AWS CodeDeployを使用して、EC2に自動デプロイを行う方法

AWS

今回は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のロールを作成

参考)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へアクセスして、デプロイ用のファイルが配置されているか確認してみてください

今回は以上となります。

コメント

タイトルとURLをコピーしました