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)コンソールに移動します。
- "Roles"をクリックします。
- "Create role"をクリックします。
- 信頼されるエンティティのタイプを "AWSサービス" に設定し、使用ケースを "CodeDeploy" に設定します。
- "次へ"をクリックし、ロール名を入力し、"ロールの作成"ボタンをクリックします。
ロールを作成した後、上記のポリシーを追加してください。
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ページに移動します。
-
"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" の選択を解除します(デプロイ後にロードバランシングを設定できます)。
"デプロイメントグループ作成"をクリックします。
デプロイメントグループを作成したら、"デプロイメントの作成"をクリックしてデプロイメントを作成します。次の設定を構成します:
- デプロイメントグループ: 作成したデプロイメントグループを選択します。
- リビジョンタイプ: "My application is stored in Amazon S3" を選択します。
- リビジョンの場所: アップロードしたS3のZIPファイルのURLを貼り付けます。
"デプロイメントの作成"をクリックしてデプロイメントの作成を完了します。
デプロイメントを作成したら、ライフサイクルイベントからデプロイメントのステータスを監視できます。