はじめに
AWS CodeDeployについて理解を深めるためにまとめてみました。
AWS CodeDeployとは
アプリケーションを構成するファイル群のデプロイを自動化するサービス
以下の特徴があります。
- フルマネージドでソフトウェアのデプロイを自動化
- Amazon EC2、AWS Lambda、オンプレミス サーバー、コンテナへの自動的なデプロイメント
- アプリケーションの複雑なアップデートの実施
- アプリケーションのデプロイ中のダウンタイムを回避
- エラーを検知すると自動的にロールバックを実行
主要コンポーネント
-
アプリケーション
- デプロイするアプリケーションを一意に識別する名前
-
コンピューティングプラットフォーム
-
デプロイグループ
- デプロイ環境の定義
- Auto Scalingグループ
- タグのグループ
- EC2インスタンス
- オンプレミスインスタンス
- ECSサービス
-
デプロイタイプ
- EC2の場合In-PlaceもしくはBlue/Green
- Lambda、ECSの場合はBlue/Green
In-Place Deploy(インプレイスデプロイ)
既存のインフラストラクチャやリソース上に新しいバージョンのアプリケーションを直接デプロイする方法
Blue/Green Deploy(ブルー/グリーンデプロイ)
新しいバージョンのアプリケーションを既存の環境(Blue)とは別の環境(Green)にデプロイし、切り替えることでデプロイメントを行う方法
AppSpecファイル(Application Specification File)
AWS CodeDeployを使用してアプリケーションをデプロイする際に使用される設定ファイル
記入例.yaml
version: 0.0
Resources:
- TargetService:
Type: AWS::ECS::Service
Properties:
TaskDefinition: "arn:aws:ecs:us-east-1:111222333444:task-definition/my-task-definition-family-name:1"
LoadBalancerInfo:
ContainerName: "SampleApplicationName"
ContainerPort: 80
# Optional properties
PlatformVersion: "LATEST"
NetworkConfiguration:
AwsvpcConfiguration:
Subnets: ["subnet-1234abcd","subnet-5678abcd"]
SecurityGroups: ["sg-12345678"]
AssignPublicIp: "ENABLED"
CapacityProviderStrategy:
- Base: 1
CapacityProvider: "FARGATE_SPOT"
Weight: 2
- Base: 0
CapacityProvider: "FARGATE"
Weight: 1
Hooks:
- BeforeInstall: "LambdaFunctionToValidateBeforeInstall"
- AfterInstall: "LambdaFunctionToValidateAfterInstall"
- AfterAllowTestTraffic: "LambdaFunctionToValidateAfterTestTrafficStarts"
- BeforeAllowTraffic: "LambdaFunctionToValidateBeforeAllowingProductionTraffic"
- AfterAllowTraffic: "LambdaFunctionToValidateAfterAllowingProductionTraffic"
AppSpecファイル例 より引用
ターゲットリビジョン
デプロイ対象となるアプリケーションの特定のバージョンを指す。
-
サービスロール
- CodeDaployに付与するIAMロール
- CodeDaployからAWSリソースを操作するために必要
- 管理ポリシー
- AWSCodeDeployRole
- AWSCodeDeployRoleForLambda
- AWSCodeDeployRoleForLambdaLimited
- AWSCodeDeployRoleForECS
- AWSCodeDeployRoleForECSLimited
-
IAMインスタンスプロファイル
- EC2インスタンスに付与するIAM ロール
- S3から配布物を取得できるようにする