AWS はじめてのCodeDeploy


CodeDeployを設定したので備忘録的に残そうと思います。

IAM作成

毎回悩まされる権限周り
CodeDeployに必要なIAMとデプロイ先のEC2インスタンス用のIAMをそれぞれ作成する

CodeDeploy用のIAM

AWSCodedeployをアタッチ
AutoScalingを利用する場合には、AutoScaling関連の権限もアタッチ。
・ロールタイプ
 AWSサービスロール→EC2
・ポリシーのアタッチ
 AWSCodeDeployRole

EC2用のIAM

AmazonS3ReadOnlyAccessをアタッチ
・ロールタイプ
 AWSサービスロール→EC2
・ポリシーのアタッチ
 AmazonS3ReadOnlyAccess

EC2のセットアップ

EC2インスタンス用意

デプロイするEC2インスタンスを作成。
この時、上記で作成したEC2用のIAMロールを割り当てる
(ロールを割り当てていないとデプロイ失敗のもととなる。体験談。。)

CodeDeploy-agentの導入

EC2インスタンスを立てたら、次はCodeDeploy-agentの導入。
OSはAmazon Linuxを利用している。基本的に以下の通りに進めれば問題ない。
Install the CodeDeploy agent for Amazon Linux or RHEL

東京リージョンで利用する場合は、以下の通り。


$ sudo yum update
$ sudo yum install ruby
$ sudo yum install aws-cli
$ cd /home/ec2-user
$ aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
$ chmod +x ./install
$ sudo ./install auto

導入後agentが起動しているか確認。以下の結果が返ってこればOK

$ sudo service codedeploy-agent status
The AWS CodeDeploy agent is running as PID 12491

appspec作成

デプロイ内容を記載するappspec.ymlを作成。
作成後は、リポジトリの直下に配置する。

設定の内容は以下の感じ

項目 説明
version デプロイバージョン
os デプロイ先のサーバのOS(linux or windows)
files:source どこのディレクトリのコードを持ってくるか。全ファイルを持ってきたい時は"/"にする
files:destination デプロイ先のサーバのどこのディレクトリにコードを配置するかを指定する
hooks デプロイの過程で実行するスクリプトの配置先などを指定する

あとはコンソールでCodeDeployの設定

CodeDeploy設定

はじめにアプリケーションの作成

CodeDeploy→アプリケーション→アプリケーションの作成

項目 説明
アプリケーション名 任意
コンピューティングプラットフォーム EC2/オンプレミス、AWS Lambda、Amazon ECSから選択

デプロイグループの作成

CodeDeploy→アプリケーション→作成したアプリケーション名→デプロイグループの作成

項目 説明
デプロイグループ名 任意
サービスロール はじめの方に作成したCodeDeploy用のIAMを選択
デプロイタイプ アプリケーションのデプロイ方法をインプレースBlue/Greenのどちらかを選択(違いについては今回説明しない)
環境設定 EC2インスタンス AutoScalingグループオンプレミスインスタンスの任意の組み合わせを選択
デプロイ設定 OneAtATime(1回に1個のインスタンスにデプロイ)、AllAtOnce(1回に最大ですべてのインスタンスにデプロイ)、HalfAtATime(1回に最大で半分のインスタンスにデプロイ)を選択
ロードバランサー デプロイプロセス中に着信トラフィックを管理するロードバランサーを選択(今回は使ってないので、使う機会がある時に調べてみる)

デプロイの作成&デプロイ実行

CodeDeploy→アプリケーション→作成したアプリケーション名→デプロイの作成

項目 説明
リビジョンタイプ アプリケーションの格納先をS3GitHubから選択
リビジョンの場所 上記から保存されている場所をしていする
デプロイの説明 デプロイについて簡単な説明を記入(任意)
追加のデプロイ動作設定 ApplicationStop ライフサイクルイベントの障害、配置先のインスタンスに同じファイルがあった場合の対処方法について選択(任意)デプロイタイプをインプレース選択時にコンテンツ上書きを選択してなかったことがありつまづいた(体験談。。)
デプロイグループのオーバーライド 上記デプロイ設定と同じ(OneAtATimeAllAtOnceHalfAtATime)から選択
ロールバック設定の上書き デプロイ失敗時のロールバックや、アラームのしきい値を超えた場合のロールバックについて選択可能

デプロイ作成ボタンを押すとデプロイが実行される

結果を確認

成功!やったね♪

デプロイのライフライクルイベント→Vieweventsから詳細を確認することも可能

お疲れさまでしたー

参考:
EC2デプロイのためにCodeDeployを導入する