0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

miriwoお一人様Advent Calendar 2023

Day 16

AWS CodeDeployを設定してみる EC2にデプロイ

Last updated at Posted at 2023-12-15

概要

AWS CodeDeployを初めて触ったので体験記的に残しておく。
今回はGithubで管理されているlaravelのコード郡をEC2にデプロイする。WebサーバーはApacheを使っている。
当該のEC2は下記の方法(一部PHPのバージョンなどは異なる)で構築し、手動git pullでコードの取得しEC2のパブリックDNSでブラウザからwelcome画面が開くことを確認できている。

前提

先に下記の記事で構築したCodePiplineに、本記事で作成するCodeDeployを紐づけて動作確認を行っている。

またCode三兄弟と言われるAWSリソースのざっくりとした役割分担を下記に簡単にまとめた。

基本的な設定項目

先に決定しておいたほうが良い内容を下記に記載しておく。

項目 制約や選択や内容 備考
アプリケーション名 100文字以下で日本語不可 CodeDepoloyのアプリケーション名
アプリケーション名とはデプロイ動作をグルーピングする最も外側の概念
コンピューティングプラットフォーム 「EC2/オンプレミス」 or 「AWS Lambda」 or 「Amazon ECS」から選択 デプロイ対象のリソースを選択
デプロイグループ名 100文字以下で日本語不可 デプロイアプリケーションに所属する具体的なデプロイ動作の設定の名前
サービスロール名(CodeDeploy割当) 64文字以下で日本語不可 +=,.@-_などの特殊文字使用可
サービスロール説明(CodeDeploy割当) 1000文字以下で日本語不可 +=,.@-_などの特殊文字使用可
サービスロール名(EC2割当) 64文字以下で日本語不可 +=,.@-_などの特殊文字使用可 EC2にロール未設定の場合
サービスロール説明(EC2割当) 1000文字以下で日本語不可 +=,.@-_などの特殊文字使用可 EC2にロール未設定の場合
デプロイタイプ 「インプレース」 or 「Blue/Green」 デプロイ方法の選択
デプロイ設定 「CodeDeployDefault.OneAtATime」 or
「CodeDeployDefault.HalfAtATime」 or
「CodeDeployDefault.AllAtOnce」
もしくは自分で設定
「CodeDeployDefault.OneAtATime」→すべてのインスタンスを一括デプロイ
「CodeDeployDefault.HalfAtATime」→すべてのインスタンスを半分半分にデプロイ
「CodeDeployDefault.AllAtOnce」→一つのインスタンスのみデプロイ
デプロイ先EC2のインスタンス名 CodeDeployがデプロイする先のインスタンス指定で使用
アクション名 100文字以下で日本語不可 CodePiplineと紐付ける際のデプロイアクション名

流れ

  1. デプロイグループに割り当てるサービスロールの作成
  2. EC2に割り当てるサービスロールの作成
  3. CodeDeployアプリケーションの作成
  4. デプロイメントグループの作成
  5. CodeDeployエージェントをEC2にインストール
  6. AppSpecファイルの作成
  7. CodePiplineとの紐づけ

詳細

  1. デプロイグループに割り当てるサービスロールの作成

    1. IAMを開き、左サイドバーの「ロール」をクリックする。
    2. ロールを作成をクリックする。
    3. AWSのサービスを選択し、「サービスまたはユースケース」で「CodeDeploy」を選択する。
    4. 「ユースケース」で「CodeDeploy」を選択する。
    5. 追加ポリシーを確認して問題なければ「次へ」をクリックする。
  2. EC2に割り当てるサービスロールの作成

    1. IAMを開き、左サイドバーの「ロール」をクリックする。

    2. ロールを作成をクリックする。

    3. AWSのサービスを選択し、「サービスまたはユースケース」で「EC2」を選択する。

    4. 「ユースケース」で「EC2」を選択する。

    5. 「許可を追加」にてAWSCodeDeployRoleAmazonS3ReadOnlyAccessを検索し、付与する。

    6. 追加ポリシーを確認して問題なければ「次へ」をクリックする。

    7. ロール名をec2-code-deployとしてロールを作成する。

    8. EC2の画面に移動し、デプロイ先インスタンスの詳細ページを開く。

    9. 「アクション」をクリックし「セキュリティ」→「IAMロールを変更」をクリックする。

      インスタンスの詳細___EC2___ap-northeast-1.png

    10. 先に追加したec2-code-deployのロールを割り当ててIAMロールの更新を行う。

  3. CodeDeployアプリケーションの作成

    1. CodeDeployのサイドバーで「アプリケーション」をクリックする。
    2. アプリケーションの作成をクリックする。
    3. 下記の情報を入力・選択する。
      1. アプリケーション名
      2. コンピューティングプラットフォーム
  4. デプロイメントグループの作成

    1. サイドメニューで「デプロイ」の「アプリケーション」をクリックし、先に作成したCodeDeployのアプリケーション名をクリックする。
    2. 「デプロイグループの作成」をクリックする。
    3. 各種情報を入力し、保存する。
  5. CodeDeployエージェントをEC2にインストール

    1. EC2インスタンスにssh接続する。

    2. 下記を実行してCodeDeployエージェントをEC2にインストールする。(東京リージョンの場合)

      sudo yum update
      sudo yum install ruby
      sudo yum 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
      
    3. 下記を実行してインストールできて動作しているか確認する。

      sudo service codedeploy-agent status
      
    4. 下記のようにでたらインストール完了となる。

      The AWS CodeDeploy agent is running as PID
      
    5. CodeDeployエージェントインストール後にEC2などのIAMいじった場合下記コマンドを実行してCodeDeployエージェントの再起動を都度実施する必要がある。

      sudo service codedeploy-agent restart
      
  6. AppSpecファイルの作成

    1. 実際にデプロイするときの動作を示すファイルを作成・記載していく。(Githubのリポジトリルートのappspec.ymlを特に設定せずともCodeDeployは勝手に見に行く。)
    2. appspec.ymlについてはこちらでちょっとだけ詳しく記載している。
    3. Githudで管理されているルートディレクトリに下記のファイルとディレクトリを追加する。
      • appspec.yml
      • scripts/
    4. 更に上記で追加したscripts/ディレクトリに下記のスクリプトファイルを追加する。
      • scripts/application_stop.sh
      • scripts/before_install.sh
      • scripts/after_install.sh
      • scripts/application_start.sh
      • scripts/validate_service.sh
    5. それぞれ下記のように記載する。
      • appspec.yml

        appspec.yml
        version: 0.0
        os: linux
        files:
          - source: ./
            destination: /var/www/html/test
        file_exists_behavior: OVERWRITE
        hooks:
          ApplicationStop:
            - location: scripts/application_stop.sh
              timeout: 60
              runas: root
          BeforeInstall:
            - location: scripts/before_install.sh
              timeout: 60
              runas: root
          AfterInstall:
            - location: scripts/after_install.sh
              timeout: 60
              runas: root
          ApplicationStart:
            - location: scripts/application_start.sh
              timeout: 60
              runas: root
          ValidateService:
            - location: scripts/validate_service.sh
              timeout: 60
              runas: root
        
      • scripts/application_stop.sh

        scripts/application_stop.sh
        #!/bin/bash
        
        # Apacheサーバーの停止コマンド
        sudo systemctl stop httpd
        
      • scripts/before_install.sh

        scripts/before_install.sh
        #!/bin/bash
        
        # 既存のキャッシュや一時ファイルのクリーンアップ
        rm -rf /var/www/html/test/bootstrap/cache/*.php
        
        # 設定ファイルのバックアップ
        cp /var/www/html/test/.env /var/www/html/test/.env.backup
        
      • scripts/after_install.sh

        scripts/after_install.sh
        #!/bin/bash
        
        # Laravelアプリケーションのディレクトリに移動
        cd /var/www/html/test
        
        # Composerを使用して依存関係をインストール
        composer install --no-interaction --prefer-dist --optimize-autoloader
        
        # マイグレーション
        php artisan migrate --force
        
        # キャッシュのクリア
        php artisan cache:clear
        
      • scripts/application_start.sh

        scripts/application_start.sh
        #!/bin/bash
        
        # Apacheサーバーの起動
        sudo systemctl start httpd
        
      • scripts/validate_service.sh

        scripts/validate_service.sh
        #!/bin/bash
        
        # ヘルスチェック系の処理
        
  7. CodePiplineとの紐づけ

    1. こちらの記事で作成したCodePiplineの詳細ページを開く。
    2. 「編集する」をクリックする。
    3. 「編集する: Deploy」の「ステージを編集する」をクリックする。
    4. すでに設定されているS3のデプロイシーケンスを削除する。
    5. 「+アクションの追加」をクリックし、任意のアクション名を入力し、「アクションプロバイダー」のプルダウンで「AWS CodeDeploy」を選択する。
    6. 入力項目が増えるはずなのでそれぞれ入力・選択する。
      1. 「リージョン」 → アジアパシフィック(東京)
      2. 「入力アーティファクト」 → SourceArtifact
      3. 「アプリケーション名」 → 今回追加したCodeDeployのアプリケーション名
      4. 「デプロイグループ」 → 今回追加したデプロイグループ
    7. それぞれ入力できたら「完了」を押下して登録する。
  8. 動作確認

    1. CodePiplineで監視しているリモートリポジトリに紐づくローカルリポジトリにて下記を実行し、空コミットの作成とpushを行う。(筆者の場合masterブランチが監視対象)

      git commit -m '空コミット' --allow-empty
      git push origin master
      
    2. CodePiplineが起動し、CodeDeployが無事に正常完了するかを監視する。

    3. エラー終了する場合、下記の方法でログを確認する事ができる。

☆リンク☆

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?