4
3

Amazon S3とAWS CodeDeployを使用したソースコードをEC2インスタンスにデプロイ

Last updated at Posted at 2023-11-09

Amazon S3とAWS CodeDeployを使用したソースコードをデプロイの手順

この技術記事では、Amazon S3とAWS CodeDeployを使用してソースコードをデプロイするプロセスについて説明します。EC2インスタンスが実行中であることを前提とします。
注記:OSは、AmazonLinux3を利用しています。

1. セキュリティグループのインバウンドルール設定

次の手順に従ってください:

  • EC2インスタンスが使用するセキュリティグループをクリックします。
  • "インバウンドルールの編集"をクリックします。
  • "ルールの追加"ボタンをクリックし、リストから "HTTPS" を選択してルールを保存します。

2. IAMロールにポリシーを追加

EC2インスタンスで使用するIAMロールに次のポリシーを追加する必要があります:

  • AmazonEC2RoleforAWSCodeDeploy
  • AWSCodeDeployFullAccess
  • AmazonS3ReadOnlyAccess

さらに、CodeDeploy用の新しいIAMロールを作成し、次のポリシーを追加する必要があります:

  • AmazonS3FullAccess
  • AWSCodeDeployRoleForECS

以下は新しいIAMロールを作成する手順です:

  • アイデンティティおよびアクセス管理(IAM)コンソールに移動します。
    image.png
  • "Roles"をクリックします。
  • "Create role"をクリックします。
  • 信頼されるエンティティのタイプを "AWSサービス" に設定し、使用ケースを "CodeDeploy" に設定します。
  • "次へ"をクリックし、ロール名を入力し、"ロールの作成"ボタンをクリックします。
    image.png
    image.png
    ロールを作成した後、上記のポリシーを追加してください。
    Screenshot 2023-11-09 at 17.31.25.png

AWS CodeDeploy エージェントのインストール

EC2インスタンスにRubyがインストールされていることを確認してください。次のコマンドを使用して確認できます:

ruby -v

Rubyがインストールされていない場合は、次のコマンドを使用してインストールできます:

sudo yum install -y ruby

AWS CodeDeployエージェントをインストールするには、次のコマンドを使用してください。EC2インスタンスに応じてリージョン名を適切に置き換えてください:

wget https://aws-codedeploy-RegionName.s3.RegionName.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

AWS CodeDeployエージェントが実行されていることを確認するには、次のコマンドを実行します:

sudo service codedeploy-agent status

エージェントが実行されている場合、"The AWS CodeDeploy agent is running"のようなメッセージが表示されます。エージェントが実行されていない場合は、次のコマンドを使用してサービスを起動します:

sudo service codedeploy-agent start

S3バケットの作成

S3バケットを作成するには、次の手順に従ってください:

  • Amazon S3のダッシュボードに移動します。
  • "バケットの作成"ボタンをクリックします。
  • バケットに一意で説明的な名前を指定してください。
  • バケットを作成したいAWSリージョンを選択します。AWS CodeDeployアプリケーションとデプロイメントグループが配置されているリージョンと一致することが重要です。
  • バージョニング、ログ記録、およびタグなどのオプションを要件に合わせて設定できます。
  • "作成"ボタンをクリックしてS3バケットを作成します。

appspec.yml ファイルの作成

appspec.yml ファイルを作成するには、プロジェクトのルートフォルダに移動し、以下の内容をコピーしてください:

version: 0.0
os: linux
files:
  - source: /backend
    destination: /var/www/backend

このファイルでは、デプロイの詳細を設定できます:

  • version: デプロイのバージョンを指定します。
  • os: デプロイ先のオペレーティングシステムを指定します。
  • files: ファイルのコピー元とコピー先を設定します。例えば、 /backend フォルダから /var/www/backend にファイルをコピーします。
  • hooks: デプロイの各段階で実行するスクリプトを設定できます。スクリプトの場所、タイムアウト時間、実行ユーザなどを指定できます。
hooks:
    AfterInstall:
      - location: scripts/AfterInstall-base.sh
       runas: ec2-user

このファイルを適切に設定し、必要に応じて他のライフサイクルフックを追加できます。また、AfterInstall-base.sh ファイルが存在することを確認してください。

この appspec.yml ファイルは、AWS CodeDeployがデプロイプロセスを制御し、ファイルの配置、スクリプトの実行などを管理するのに役立ちます。デプロイの詳細を設定するための重要なファイルです。

圧縮してS3にアップロード

ターミナルを開いてプロジェクトのルートフォルダに移動し、次のコマンドを使用してZIPファイルを作成します:

zip -rq backend.zip .

ZIPファイルをS3バケットにアップロードします。

AWS CodeDeployアプリケーションとデプロイメントグループの作成

次の手順に従ってAWS CodeDeployアプリケーションとデプロイメントグループを作成します:

  • AWS CodeDeployページに移動します。

  • "デプロイ"をクリックし、"Applications"をクリックします。
    -image.png

  • "Create application"をクリックし、アプリケーションに意味のある名前を指定します。

  • コンピュートプラットフォームを "EC2/On-Premises"

  • コンピュートプラットフォームを "EC2/On-Premises" に設定し、"Create application"をクリックします。

次に、"Create deployment group"をクリックし、次の設定を構成します:

  • デプロイメントグループ名: デプロイメントグループに説明的な名前を付けます。
  • サービスロール: CodeDeploy用に作成したIAMロールを選択します。
  • デプロイメントタイプ: "In-place" を選択します。
  • 環境構成: "Amazon EC2インスタンス" をチェックし、ソースEC2インスタンスを選択します。
  • AWS Systems Managerとのエージェント構成: "Never"
  • デプロイメント設定: "CodeDeployDefault.AllAtOnce"
  • ロードバランサー: "Enable load balancing" の選択を解除します(デプロイ後にロードバランシングを設定できます)。
    "デプロイメントグループ作成"をクリックします。
    Screenshot 2023-11-09 at 17.15.48.pngScreenshot 2023-11-09 at 17.16.32.png
    Screenshot 2023-11-09 at 17.16.59.png

デプロイメントグループを作成したら、"デプロイメントの作成"をクリックしてデプロイメントを作成します。次の設定を構成します:

  • デプロイメントグループ: 作成したデプロイメントグループを選択します。
  • リビジョンタイプ: "My application is stored in Amazon S3" を選択します。
  • リビジョンの場所: アップロードしたS3のZIPファイルのURLを貼り付けます。
    Screenshot 2023-11-09 at 17.49.20.png

"デプロイメントの作成"をクリックしてデプロイメントの作成を完了します。
Screenshot 2023-11-09 at 17.52.00.png
デプロイメントを作成したら、ライフサイクルイベントからデプロイメントのステータスを監視できます。

4
3
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
4
3