AWS Code DeployでEC2にデプロイする
運用していたEC2へのソースコードを反映するのにCodeDeployを導入してみたので、その作業メモです。
とてもシンプルな状態で試したので、環境は以下の通りです。
- EC2インスタンスは1台のみ
- ELBの利用なし
- ソースコードはGitHubより取得する
- デプロイはソースコードをサーバー上に置くのみ
- デプロイの実行はAWSのコンソールから手動で実行する。
※CircleCI連携についてはコチラ
IAM準備
EC2用とCodeDeploy用のロールを準備します。
まずEC2用のロールを作成します。
IAMロール作成画面にてAWSサービス > EC2を選び、次のステップへ進みます。

ポリシーはAmazonEC2RoleforAWSCodeDeploy
を指定して、次のステップへ進みます。

タグは未指定でも良いので、必要なければ次のステップに進みます。

適当なロール名を決めて設定し、『ロールの作成』をクリックします。

次にCodeDeploy用のロールを作成します。
IAMロール作成画面にてAWSサービス > CodeDeployを選びます。

画面が下へスクロールしてユースケースの選択が表示されます。
今回は純粋なEC2上のボリュームにデプロイするだけなので、CodeDeploy
を指定して次のステップへ進みます。

ポリシーはAWSCodeDeployRole
が表示されるので、そのまま次のステップへ進みます。

適当なロール名を決めて設定し、『ロールの作成』をクリックします。

EC2準備
まず、EC2インスタンスに管理コンソールからロール付与します。
管理コンソールにて対象インスタンスを開いて以下をクリックします。
アクション > インスタンスの設定 > IAMロールの割り当て/置換

そこで先ほど作成したEC2用のロールを設定します。

次にコンソールにて対象インスタンスにログインし、CodeDeployのエージェントをインストールします。
ダウンロードするインストーラーはrubyが無いと動かないので、インストールされていない場合はインストールしておきます。
$ sudo yum install ruby # rubyがインストールされてない場合
$ sudo yum install aws-cli # aws-cliがインストールされていない場合
$ aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
$ chmod +x ./install
$ sudo ./install auto
インストールが完了したら念の為動作している事を確認する。
$ sudo service codedeploy-agent status
The AWS CodeDeploy agent is running as PID 12345
もし上記のロール割り当てより先にCodeDeployエージェントを起動してしまった場合は、
ロール割り当て後にCodeDeployエージェントを再起動すれば大丈夫です。
$ sudo service codedeploy-agent restart
リポジトリ準備
デプロイ対象のgitリポジトリのTOP階層にappspec.yml
というファイルを作成し、以下のように記載します。
version: 0.0
os: linux
files:
- source: ./
destination: /usr/share/nginx/html
これでリポジトリ内のsource
で指定した階層(上例ではリポジトリ全て)をdestination
にデプロイするようになります。
source
とdestination
の組み合わせは複数記載することもでき、デプロイ前後に処理を追加する事も可能です。
詳しくはAWS公式ページを参照してください。
これをGitHubにプッシュしておきます。
CodeDeployの設定
まず、アプリケーションの作成をクリックします。

アプリケーション名を決めて入力し、コンピューティングプラットフォームは『EC2/オンプレミス』を選択して
『アプリケーションの作成』をクリックします。

次にアプリケーションに登録するデプロイグループを設定します。
(デプロイグループ:デプロイする際に対象となるEC2インスタンス群などをグルーピングしておく。)
グルーピングと言いながら、今回はEC2インスタンス1つだけを登録します。
まず『デプロイグループの作成』をクリックします。

作成するデプロイグループ名を決めて入力します。
また、サービスロールは先ほど作成したCodeDeploy用のロールを指定します。

下にスクロールすると『環境設定』という設定項目があるので、作成済みのEC2インスタンスの名前を指定します。

デプロイ設定は『CodeDeployDefault.AllAtOnce』にしておき、『デプロイグループの作成』をクリックします。
(今回はデプロイ対象のインスタンスは1台だけなので、どれを選んでもあまり意味はありません)

これでデプロイグループの作成が完了です。
CodeDeployの実行
実際にサーバーにソースコードを反映するにはデプロイを作成します。
デプロイの作成はデプロイグループの画面より実施できます。
(以下はデプロイグループ作成完了時の画面)

デプロイ作成画面に入ったら、まずデプロイグループに先ほど作成したデプロイグループを指定します。

次にリビジョンタイプでGitHubを選びます。
するとGitHub情報を入力する欄が出てくるので、GitHubトークン名にgithubアカウント名を入力して
『GitHubに接続』をクリックします。

GitHub側で承認画面が表示される場合は承認します。

続いてリポジトリ名とサーバーに反映したい時点のコミットIDを入力します。
リポジトリ名は『アカウント名/リポジトリ名』形式で、コミットIDは省略していないフルのIDです。

次に追加のデプロイ動作設定にて『コンテンツの上書き』を選択し、
『デプロイの作成』をクリックすればデプロイが走ります。
※コンテンツの上書きを指定しないと既存コンテンツがある場合にコケます。

デプロイが途中でコケてしまう場合はEC2上で以下のエージェントのログを確認してください。
/var/log/aws/codedeploy-agent/codedeploy-agent.log
関連する記事
- EC2とECSのレコードを全てCSVに出力する
- Route53のレコードを全てCSVに出力する
- AWS lambdaからDBアクセスも外部アクセスもできるようにする。
- EC2上でオレオレ証明書を作る
- AWS S3を使ったリダイレクトの方法
- Serverless Frameworkを使ってLambda & API Gatewayをデプロイする
- GitHub ActionsでAWS Code Deployを回す
- lightsail上に自前でWordpressを構築する(CentOS編)
- lightsail上に自前でWordpressを構築する(Amazon Linux編)
- LightsailにOpenVPNサーバーを立てる
- CircleCIからAWS Code Deployを実行する
- 【Let'sEncrypt】Amazon Linux2でCertbotを使う
- Wordpressの画像をS3+CloudFrontで配信する
- AWS ELB配下でWordpressを動かす際のSSL対応
- AWS ELB配下でApacheのRewriteRuleが上手く動かなかった話
- 【AWS】新規EC2立ち上げ後の作業メモ