CodeDeploy を使って EC2 にデプロイしてみる

2022年8月15日

CodeDeploy を使って Github のコードを EC2 にデプロイしてみます。
必要最低限ですが図は下の感じになるかと思います。

参考

手順

  1. 環境構築
  2. EC2 に割り当てるロールを作成する
  3. EC2 にロールを割り当てる
  4. CodeDeploy に割り当てるロールを作成する
  5. GitHub にリポジトリを作成する
  6. CodeDeployAgent をインストールする
  7. CodeDeplooy を作成し実行する
  8. デプロイされたか確認する

環境構築

Cloud Formation で CodeDeploy 以外構築を構築します。

テンプレートは次の通りです。

AWSTemplateFormatVersion: "2010-09-09"
Description: "CloudFormation Template Test"
# Setting key and IP
Parameters:
  KeyName:
    Description: The EC2 Key Pair to allow SSH access to the instance
    Type: "AWS::EC2::KeyPair::KeyName"
  MyIP:
    Description: IP address allowed to access EC2
    Type: String
Resources:
  # VPC
  HogeVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: "10.0.0.0/16"
      EnableDnsSupport: "true"
      EnableDnsHostnames: "true"
      InstanceTenancy: "default"
      Tags:
        - Key: Name
          Value: "hoge-vpc"
  # InternetGateway
  HogeInternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: "hoge-igw"
  HogeAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref HogeVPC
      InternetGatewayId: !Ref HogeInternetGateway
  # Subnet
  HogePublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone: "ap-northeast-1c"
      CidrBlock: "10.0.1.0/24"
      VpcId: !Ref HogeVPC
      Tags:
        - Key: Name
          Value: "hoge-public-subnet"
  # RouteTable
  HogePublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref HogeVPC
      Tags:
        - Key: Name
          Value: !Sub hoge-public-routetable
  HogePublicRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref HogePublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref HogeInternetGateway
  # Subnet to attach
  HogePublicSubnetRouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref HogePublicSubnet
      RouteTableId: !Ref HogePublicRouteTable
  # EC2
  EC2:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-00d101850e971728d
      KeyName: !Ref KeyName
      InstanceType: t2.micro
      NetworkInterfaces: # assign public IP
        - AssociatePublicIpAddress: "true"
          DeviceIndex: "0"
          SubnetId: !Ref HogePublicSubnet
          GroupSet:
            - !Ref EC2SG
      UserData: !Base64 | # coding commands what you want
        #!/bin/bash
        sudo amazon-linux-extras install -y nginx1
        sudo systemctl start nginx
      Tags:
        - Key: Name
          Value: hogeEC2
  # SecurityGroup
  EC2SG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: hoge-sg
      GroupDescription: Allow SSH and HTTP access only MyIP
      VpcId: !Ref HogeVPC
      SecurityGroupIngress:
        # http
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: !Ref MyIP
        # ssh
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: !Ref MyIP
Outputs:
  EC2PublicIP:
    Value: !GetAtt EC2.PublicIp
    Description: Public IP of EC2 instance

環境構築と同時に Nginx をインストールして起動しておきます。

UserData: !Base64 | # coding commands what you want
  #!/bin/bash
  sudo amazon-linux-extras install -y nginx1
  sudo systemctl start nginx

サービス CodeDeploy が EC2 を認識する際にタグを使用するので下記の Value の値「hogeEC2」は注意が必要です。

Tags:
- Key: Name
    Value: hogeEC2

EC2 に割り当てるロールを作成する

  1. サービス「IAM」で検索し「IAM」をクリックする。
  2. 画面左の「ロール」をクリックする。
  3. 「ロールを作成」をクリックする。
  4. 「信頼されたエンティティタイプ」で「AWS のサービス」が選択されているのを確認する。
  5. 「ユースケース」で「EC2」を選択する。
  6. 「次へ」をクリックする。
  7. 「AmazonEC2RoleforAWSCodeDeploy」で検索して「AmazonEC2RoleforAWSCodeDeploy」にチェックを付ける。
  8. 「次へ」をクリックする。
  9. 「ロール名」に任意の名前を入力する。
  10. 「ロールを作成」をクリックする。

EC2 にロールを割り当てる

  1. サービス「EC2」で検索し「EC2」をクリックする。
  2. 画面左の「インスタンス」をクリックする。
  3. 対象の EC2 にチェックを付ける。
  4. 「アクション」をクリックする。
  5. 「セキュリティ」をクリックする。
  6. 「IAM ロールを変更」をクリックする。
  7. 「IAM ロール」で作成したロールを選択する。
  8. 「Update IAM role」をクリックする。

CodeDeploy に割り当てるロールを作成する

  1. サービス「IAM」で検索し「IAM」をクリックする。
  2. 画面左の「ロール」をクリックする。
  3. 「ロールを作成」をクリックする。
  4. 「信頼されたエンティティタイプ」で「AWS のサービス」が選択されているのを確認する。
  5. 「他の AWS のサービスのユースケース」に「CodeDeploy」と入力し「CodeDeploy」にチェックを付ける。
  6. 「次へ」をクリくする。
  7. 「許可ポリシー」のページも確認して「次へ」をクリックする。
  8. 「ロール名」に任意の名前を入力する。
  9. 「ロールを作成」をクリックする。

GitHub にリポジトリを作成する

hoge と言うリポジトリに下記の二つのファイルを作成します。

appspec.yml

  • リポジトリの直下に配置する。
  • source はデプロイするパスやファイルを指定する。(今回はファイルを指定)
  • destination はデプロイ先のパスを指定。
version: 0.0
os: linux
files:
  - source: ./hogehoge.html
    destination: /usr/share/nginx/html/

今回は nginx が表示できるようにしたいので /usr/share/nginx/html を指定する事にします。

hogehoge.html

  • リポジトリ直下に配置する。
hogehoge

今回デプロイされるファイルでこれもリポジトリ直下に置きます。
とりあえず「IP アドレス/hogehoge.html」にアクセスしたらブラウザに hogehoge と表示されるようにします。

CodeDeployAgent をインストールする

以下作成した EC2 に ssh して実行します。

sudo yum -y update
sudo yum -y install ruby
sudo yum -y install wget
cd /home/ec2-user
wget https://aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

確認します。

# 状態確認
sudo service codedeploy-agent status
# 再起動
sudo service codedeploy-agent start

CodeDeplooy を作成し実行する

  1. サービス作成を開始する。
    1. サービス「CodeDeploy」で検索し「CodeDeploy」をクリックする。
    2. 画面左の「開始方法」をクリックする。
  2. アプリケーションを作成する。
    1. 「アプリケーションの作成」をクリックする。
    2. 「アプリケーション名」に「hoge-app」と入力する。
    3. 「コンピューティングプラットフォーム」で「EC2/オンプレミス」を選択する。
    4. 「アプリケーションの作成」をクリックする。
  3. デプロイグループを作成する。
    1. 「デプロイグループの作成」をクリックする。
    2. 「デプロイグループ名」に「hoge-group」と入力する。
    3. 「サービスロール」に手順「CodeDeploy に割り当てるロールを作成する」で作成したロールを選択する。
    4. 「デプロイタイプ」で「インプレース」を選択する。
    5. 「環境設定」で「Amazon EC2 インスタンス」にチェックを付ける。
    6. 「キー」に「Name」を、「値 - オプショナル」に「hogeEC2」を設定する。
    7. 「AWS CodeDeploy エージェントのインストール」で「今すぐ更新し、更新をスケジュール」「ベーシックスケジューラ」を選択する。
    8. 「デプロイグループの作成」をクリックする。
  4. デプロイを作成する。
    1. 「デプロイの作成」をクリックする。
    2. 「アプリケーションは GitHub に格納されています」を選択する。
    3. 「GitHub トークン名」に「hoge-token-name」と入力する。
    4. 「GitHub に接続」をクリックする。
    5. 「確認」をクリックする。
    6. 「リポジトリ名」に対象のリポジトリ名を入力する。(accountname/hoge)
    7. 「コミット ID」に対象のコミット ID を入力する。(d840126559dabcd9fefgd01236aabdb74bxyzf57)
    8. 「デプロイの作成」をクリックする。

デプロイされたか確認する

ブラウザに「xxx.xxx.xxx.xxx/hogehoge.html」と入力し hogehoge と表示されたら成功です。

2022年8月15日