今回はAWS CodeDeployを使用して、Spring Bootで作成・ビルドしたwarファイルをEC2に自動デプロイする方法について確認していきます
今回の内容は、こちらの続きの内容となります
・EC2(OS:Amazon Linux 2)でTomcatが起動できる
・S3バケットに対象のwarファイルがZip形式で格納されている
・EC2にS3アクセスのためのロールが付与されている(ポリシー名:AmazonS3FullAccess)
- EC2にSSMエージェントをインストールしておく
- EC2にCodeDeployエージェントをインストールしておく
- EC2のロールを作成
- CodeDeployのロールを作成
- appspec.ymlファイルの作成
- CodeDeployでアプリケーションの作成
- CodeDeployでデプロイグループの作成
- デプロイの作成
EC2にSSMエージェントをインストールしておく
※SSMエージェントは、CodeDeployエージェントをインストールするために必要
※Amazon Linux 2やAmazon Linux 2023にはデフォルトでSSMがインストールされている
SSMエージェントについてはこちら
実際にインストールされているか以下のコマンドで確認
systemctl status amazon-ssm-agent
インストールされているが起動していない場合は以下
sudo systemctl start amazon-ssm-agent
インストールされていない場合は、手動にてインストールする。詳しくはこちら
EC2にCodeDeployエージェントをインストールしておく
CodeDeployエージェントについてはこちら
今回は、CLIでCodeDeployエージェントをインストールしていきます
インストールの参考はこちら
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
直下にinstallディレクトリが作成されているか一応確認
ls
chmod +x ./install
最新のCodeDeployエージェントをインストール
sudo ./install auto
サービスの実行確認
systemctl status codedeploy-agent
サービスの停止
sudo systemctl stop codedeploy-agent
サービスの起動
sudo systemctl start codedeploy-agent
EC2のロールを作成
今回はS3からEC2にデプロイするZipファイル(QRcode_Demo.warとappspec.yml)をダウンロードするため、EC2にS3へのアクセス用のロールをアタッチしておきます
今回はAWS側で管理されている既存のポリシーを使用して、ロールを作成していきます。
ポリシー名:AmazonS3FullAccess
ロール名:Ec2ToS3FullAccessRole
AWS Management ConsoleでIAMと検索し、「ロール」を選択し、「ロールの作成」を押下

「信頼されたエンティティタイプ」:AWSのサービス
「ユースケース」:EC2

許可ポリシーで「AmazonS3FullAccess」を選択

ロール名を「Ec2ToS3FullAccessRole」として、「ロールの作成」
このロールをEC2にアタッチします。アタッチする際は、EC2が停止していること
AWS Management ConsoleでEC2と検索し、対象のEC2をチェック→アクション→セキュリティ→IAMロールを変更

先ほど作成したロールを選択し、「IAMロールの更新」を選択

CodeDeployのロールを作成
今回はAWS側で管理されている既存のポリシーを使用して、ロールを作成していきます
ポリシー名:AWSCodeDeployRole
ロール名:CodeDeployServiceRole
AWS Management ConsoleでIAMと検索し、「ロール」を選択し、「ロールの作成」を押下

「信頼されたエンティティタイプ」:AWSのサービス
「ユースケース」:CodeDeploy

「許可を追加」でAWSCodeDeployRoleが許可ポリシーとして選択されているかと思いますので、そのまま「次へ」

ロール名をCodeDeployServiceRoleとして、「ロールを作成」を選択する

これでCodeDeployのロールが作成されました。こちらのロールは後ほど、CodeDeployでの設定時に使用します
appspec.ymlファイルの作成
AWS CodeDeployで使用されるappspec.ymlファイルは、アプリケーションのデプロイメント方法を定義する重要な設定ファイルとなります
appspec.ymlを作成しますが、このファイルはアプリケーションのルートディレクトリに置いておきます。今回であれば、GitHub上で管理されているアプリケーションのルートディレクトリとなります

内容は以下のようになります。
version: 0.0
os: linux
files:
- source: /QRcode_Demo.war
destination: /opt/apache-tomcat-10.1.29/webapps
permissions:
- object: /opt/apache-tomcat-10.1.29/webapps
pattern: "**"
owner: tomcat
group: tomcat
mode: 755
今回は最低限の仕様で作成していますので、appspec.ymlを詳しく知りたい方はこちらを参考にしてみてください
【sourceに指定されてあるパスについて】
CodeDeployがEC2にデプロイする対象のファイル(QRcode_Demo.war)は現在、S3にappspec.ymlと一緒にZip化され格納されている想定です
この状態でCodeDeployを実行すると、S3バケットからアーチファクト(Zipファイル)をダウンロードします。ダウンロードしたZipファイルはEC2インスタンス上の一時的なディレクトリに展開されます
展開先(例):/opt/codedeploy-agent/deployment-root/[deployment-group-ID]/[deployment-ID]/
つまり、Zipファイルが展開されると、その中身(QRcode_Demo.warとappspec.yml)がEC2の一時ディレクトリの直下に配置されます
appspec.ymlのfilesセクションのsourceパスは、この一時ディレクトリをルート(/)として扱います
そのため、sourceパスは/QRcode_Demo.warとなっていおり、destinationではEC2のルート(/)からのパスを指定して、ファイルをデプロイ(配置)しています。後ほど、CodeDeployが成功した後でEC2を確認してみてください

CodeDeployでアプリケーションの作成
CodeDeplooyのアプリケーションについてはこちら
ではAWS Management Consoleで「CodeDeploy」と検索し、「アプリケーションの作成」を選択

アプリケーション名は任意で、コンピューティングプラットフォームはデプロイ先がEC2のため、「EC2/オンプレミス」を選択します

これでアプリケーションが作成できました。
CodeDeployでデプロイグループの作成
CodeDeployのデプロイグループについてはこちら
次にデプロイグループの作成を行います。
「デプロイグループの作成」を選択し、今回は以下のように設定しています
※画像が小さいかも。。。ごめんなさい

デプロイ設定についてはこちら
デプロイの作成
デプロイ方法についてはこちらを参考
※デプロイの作成を行う前に、対象のEC2インスタンスを起動 +今回であれば、Tomcatを起動させておいてください
「デプロイの作成」を選択

以下のデプロイ画面のように設定し、「デプロイの作成」を選択

※S3のリビジョンの場所は、CodeBuildで指定したS3のURIとなります
以下のように、デプロイが成功すれば、無事完了です

試しに、EC2へアクセスして、デプロイ用のファイルが配置されているか確認してみてください

今回は以上となります。
コメント