CodeDeploy って、(CodePipeline 準備した上で) AppSpec.yml を準備するのが大変じゃないですか?
セッション
AWS CodeDeploy おさらい
講師:アマゾン ウェブ サービス ジャパン、シニアエバンジェリスト 亀田氏
Push 型と Pull 型のデプロイ手段
自動化を実現するには、Pull 型のデプロイが推奨される
- Push 型
- デプロイ先を知る必要あり
- Pull 型
- 各インスタンスが必要な変更を Pull
- デプロイ先を知る必要なし
CodeDeploy コンポーネント
- アプリケーション
- CodeDeploy の識別名
- コンピューティングプラットフォーム
- EC2/オンプレミス
- エージェント必要
- Lambda
- ECS
- EC2/オンプレミス
- デプロイグループ
- デプロイ環境定義
- Auto Scaling グループ
- タググループ(EC2/オンプレ)
- ECS サービス
- デプロイ環境定義
- デプロイタイプ
- In-Place
- All at Once
- まとめておきかえ
- 1台ずつの場合はローリングデプロイともいう
- Blue/Green
- 新規にノードを構築して、リクエスト先を振り分け
- In-Place
- デプロイ設定
- EC2
- One-at-a-time
- まとめて切り替え
- カスタム可能
- Half-at-a-time
- All-at-once
- One-at-a-time
- Lambda/ECS
- Linear
- 25%最初振り分けたあと、10分後25%ずつ新規に振り分け率を増やす
- Canary
- 25%最初振り分けたあと、10分後まとめて新規に移行する
- All-at-once
- 最初から全部新規へ移行
- Linear
- EC2
- リビジョン
- ターゲットリビジョン
- リポジトリにアップロードした直近のリビジョン
- デプロイグループへデプロイする対象
- 自動デプロイで取得されるリビジョン
- サービスロール
- CodeDeploy に付与する IAM ロール
- CodeDeploy から AWS リソースを操作するために必要
- IAM インスタンスプロファイル
- EC2 インスタンスに付与する IAM ロール
- S3 から取得できるようにする
EC2/オンプレのデプロイ
- エージェント必要
- In-Place or Blue/Green
- オンプレは In-Place のみ
- appspec.yml の準備が必須
- Hook スクリプトを設定可能
- ロールバックさせたりすることができる
Lambda のデプロイ
- 重み付けエイリアス
- エイリアスに荷重をつけて振り分け可能
- カナリヤ/リニアデプロイ
- appspec.yml
- SAM を利用する場合は記法が違うので注意
- Hook スクリプト
- トラフィック流す前と後の2種類のみ
ECS のデプロイ
- Blue/Green が基本
- Green タスクをプロビジョニングしてLBのトラフィック切り替え
- Test traffice listener (ECSの標準機能)
- ECS で事前に作る必要ある
- タグ付け
- latest は使うべきではない
- 切り戻しできなくなる
- スケールアウト時に未テストのコードがデプロイされる
- イミュータブルなタグを使ってデプロイ
- sha256 digest やビルドIDを流用してタグ付け
- latest は使うべきではない
所感
CodeDeploy は、対象が EC2 だとエージェントいれて準備する必要があり、アプリケーションエンジニアと協業して行う部分がインフラエンジニアとしては少し大変だなーという印象があります。
CodeBuild を利用して Push 型で作りがちで、CodeDeploy に慣れてなく経験不足なだけですが、一度作っちゃうと CodeDeploy も便利なのは確かですね。
Git と連携してデプロイする場合、CodeBuild はそのまま Git からフックできますが、CodeDeploy は CodePipeline が必須なのも、あまり使わなくなる理由の1つです。
(個人だと CodePipeline にお金使うのがちょっとだけもったいない)
ECS だと、CodePipeline を利用すれば直接デプロイ可能なので、ローリングデプロイで困らなければ CodeDeploy は不要と思っています。
CodeDeploy をあえて利用する理由は Blue/Green デプロイをしたかったり Hook スクリプト利用してロールバックをしたいケースでしょうか?
プロダクション環境で安全にコンテナを差し替えする場合は、CodeDeploy をちゃんと使うほうがいいと思っていたほうが良さそうかな。
CodeDeploy への愛と理解が足りてないことを思い知らされる回でした。