必要ソフトの準備(Python, pip, AWS CLI || git)
CodeDeployを使用するにあたってソースコードを何処から持ってくる必要がありますが、CodeDeployで選べるのはS3かGitHubのどちらかとなります。
- piplineを使えばcodecommit等も使えますが、今回はS3での手順となります。
- アップ先にS3を使用する場合は、AWSコンソールから直接アップするかAWSCLIのコマンドでアップする方法があります。
AWS CLIのインストール
AWS設定
ファイルアップロード用 S3バケットの作成
- バケット名:codedeploy-bucket
CodeDeploy から EC2 や AutoScaling などの情報を参照するための権限(IAM Role)を作成
- AWS の Management Colsole から IAM を選択し Role を作成します。「IAM → ロール → ロールの作成 → CodeDeploy → ユースケースの選択(CodeDeploy) → 次(アクセス権限) → 次(確認) → ロールの作成」
S3からファイルを取得する権限(IAM Role)を作成しEC2にアタッチ
- S3から情報取得するロールの作成:「IAM → ロール → ロールの作成 → EC2 → 次(アクセス権限) → AmazonS3ReadOnlyAccessを選択 → 次(確認) → ロールの作成」
- EC2にロールをアタッチ:「ec2管理 → インスタンス選択 → アクション → インスタンスの設定 → IAMロールの割当て/置換」からアタッチ
EC2にAWS CodeDeploy エージェントをインストール(CodeDeployはrubyで動いてるので入って無ければrubyを入れる。例ではwgetも使用)
yum -y install ruby
yum -y install wget
cd /home/ec2-user
wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
※ bucket-nameは作成したS3バケットと同じaws-codedeploy-ap-northeast-1(東京)
※ CodeDeploy エージェントをインストールすると /var/log/aws/codedeploy-agent/ にログが出力されるようになる
参考: https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html
CodeDeployエージェント起動
sudo service codedeploy-agent start
sudo service codedeploy-agent status
デプロイ設定
アップ対象のフォルダ内にappspec.yml を作成(下記例は最低限)
version: 0.0
os: linux
files:
- source: /
destination: /var/www/html/app
※参考:https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file.html
アプリケーション作成
- CodeDeploy の Console画面にて、デプロイ → アプリケーション → アプリケーションの作成
デプロイグループの作成
- サービスロールの選択
- デプロイタイプはインプレースか「Blue/Green」を選択 ※今回はインプレース想定
- 環境設定では EC2インスタンス を選択し、キーと値を選択または追加。対象インスタンスが複数ある場合は、タグでデプロイ対象に紐づけたタグを使う
- デプロイ設定を選択。
※1個づつか、半分か、全部いっぺんにデプロイするかの選択。それぞれ成否判定が異なるので注意 - ロードバランサを使用しているなら対象のロードバランサ―を選択できます。
※詳しい動作はデプロイタイプによって異なります。
デプロイ
- S3へソースのアップ。
aws deploy push --application-name hoge --description "hoge" --ignore-hidden-files --s3-location s3://codedeploy-bucket/hoge.zip --source .
※「AWS CLI」でS3にアップする場合
2. AWSコンソール画面からCodeDeploy → デプロイ → アプリケーション → アプリケーション選択 → デプロイタブ → デプロイの作成
3. デプロイグループ:AWS設定で作成したデプロイグループ選択
4. リビジョンタイプ:今回は「S3に格納・・・」を選択
5. リビジョンの場所:アップしたリビジョンを選択 ※手動デプロイだと対象が分かり辛い
6. 各種動作を設定して、「デプロイの作成」でデプロイ実行
まとめ
CodeDeploy単体だと、都度ソースを手動でアップしデプロイを実行しなければいけませんので非常に面倒です。デプロイ対象の判別も目視なのでミスが発生してしまいそうです。
CodePiplineを使えば自動デプロイも可能でその辺が見事に解消されるので、そちらも合せて使う事をお勧めします。
CodeCommit+CodeDeploy+CodePiplineでデプロイを自動化