omuronの備忘録

個人的な備忘録

「AWSの基礎を学ぼう 第六十回 AWS CodeDeploy」 #awsbasics 受講メモ

awsbasics.connpass.com

CodeDeploy って、(CodePipeline 準備した上で) AppSpec.yml を準備するのが大変じゃないですか?

セッション

AWS CodeDeploy おさらい

講師:アマゾン ウェブ サービス ジャパン、シニアエバンジェリスト 亀田氏

Push 型と Pull 型のデプロイ手段

自動化を実現するには、Pull 型のデプロイが推奨される

  • Push 型
    • デプロイ先を知る必要あり
  • Pull 型

CodeDeploy コンポーネント

  • アプリケーション
    • CodeDeploy の識別名
  • コンピューティングプラットフォーム
    • EC2/オンプレミス
      • エージェント必要
    • Lambda
    • ECS
  • デプロイグループ
    • デプロイ環境定義
      • Auto Scaling グループ
      • タググループ(EC2/オンプレ)
      • ECS サービス
  • デプロイタイプ
    • In-Place
      • All at Once
      • まとめておきかえ
      • 1台ずつの場合はローリングデプロイともいう
    • Blue/Green
      • 新規にノードを構築して、リクエスト先を振り分け
  • デプロイ設定
    • EC2
      • One-at-a-time
        • まとめて切り替え
        • カスタム可能
      • Half-at-a-time
      • All-at-once
    • Lambda/ECS
      • Linear
        • 25%最初振り分けたあと、10分後25%ずつ新規に振り分け率を増やす
      • Canary
        • 25%最初振り分けたあと、10分後まとめて新規に移行する
      • All-at-once
        • 最初から全部新規へ移行
  • リビジョン
    • EC2
    • Lambda
      • Lambda デプロイ用 AppSpec ファイル
    • ECS
      • ECS デプロイ用 AppSpec ファイル
  • ターゲットリビジョン
    • リポジトリにアップロードした直近のリビジョン
    • デプロイグループへデプロイする対象
    • 自動デプロイで取得されるリビジョン
  • サービスロール
    • CodeDeploy に付与する IAM ロール
    • CodeDeploy から AWS リソースを操作するために必要
  • IAM インスタンスプロファイル
    • EC2 インスタンスに付与する IAM ロール
    • S3 から取得できるようにする

EC2/オンプレのデプロイ

Lambda のデプロイ

ECS のデプロイ

  • Blue/Green が基本
    • Green タスクをプロビジョニングしてLBのトラフィック切り替え
    • Test traffice listener (ECSの標準機能)
      • ECS で事前に作る必要ある
  • タグ付け
    • latest は使うべきではない
      • 切り戻しできなくなる
      • スケールアウト時に未テストのコードがデプロイされる
    • イミュータブルなタグを使ってデプロイ
      • sha256 digest やビルドIDを流用してタグ付け

所感

CodeDeploy は、対象が EC2 だとエージェントいれて準備する必要があり、アプリケーションエンジニアと協業して行う部分がインフラエンジニアとしては少し大変だなーという印象があります。
CodeBuild を利用して Push 型で作りがちで、CodeDeploy に慣れてなく経験不足なだけですが、一度作っちゃうと CodeDeploy も便利なのは確かですね。
Git と連携してデプロイする場合、CodeBuild はそのまま Git からフックできますが、CodeDeploy は CodePipeline が必須なのも、あまり使わなくなる理由の1つです。
(個人だと CodePipeline にお金使うのがちょっとだけもったいない)

ECS だと、CodePipeline を利用すれば直接デプロイ可能なので、ローリングデプロイで困らなければ CodeDeploy は不要と思っています。
CodeDeploy をあえて利用する理由は Blue/Green デプロイをしたかったり Hook スクリプト利用してロールバックをしたいケースでしょうか?
プロダクション環境で安全にコンテナを差し替えする場合は、CodeDeploy をちゃんと使うほうがいいと思っていたほうが良さそうかな。

CodeDeploy への愛と理解が足りてないことを思い知らされる回でした。