AWS FargateでCDK Typescriptを使ってCodeDeplyを作成する。
CDKでFargateのCodeDeployを作成したので、記事を書きます。
本番環境にデプロイするときは、Codedeploy使ったほうがいいですよね。
またCDKで記述しておけば、後々らくです。
手作業に対するCodeDeployのメリット
- 公開する前に、同じ環境で、動作確認ができる。
- 一部の人に最初に公開し、問題ないか確認できる。
- すぐに切り戻しができる。
- ある程度、好きなタイミングで公開できる。
前置き
- すでにCDKでFargateを作成していること。今回の記事はCodeDeploy部分の解説です。
- CodeDeployの動きなどは自分で調べてください。
- サービスの命名はきちんと適切なものに変更してください。
サービスの修正
const loadBalancedFargateService = new ecsPatterns.ApplicationLoadBalancedFargateService(this,srvName, {
......
deploymentController: {
type: ecs.DeploymentControllerType.CODE_DEPLOY
}
});
クラスタのサービスにdeploymentControllerのCODE_DEPLOYを指定します。
この修正は、サービスが再作成になるので、注意が必要です。
ターゲットグループの追加
const targetgroup2 = new elbv2.ApplicationTargetGroup(this, 'srv-target-green', {
targetType: elbv2.TargetType.IP,
targets: [fargateService],
port: 80,
targetGroupName: 'tgt-green',
healthCheck: { path: '/health' },
vpc: vpc,
})
今まであるターゲットグループと同じように作成します。
ロードバランサのlistener作成
const listener2 = loadBalancedFargateService.loadBalancer.addListener('http-listener', {
protocol: ApplicationProtocol.HTTP,
port: 80,
defaultTargetGroups:[targetgroup2],
});
ターゲットグループと同じようにlistenerももう一つ作成します。以前のポートとは違うポートを指定します。
今回はHTTPSに対してHTTPを作成しました。テスト接続用のlistenerになります。
前で作成したtargetgroupを指定します。
ApplicationとDeploymentGroupを作成
// create code deploy ecsApplication
const ecsApplication = new codedeploy.EcsApplication(this, 'ecs-application', {
applicationName: 'application',
});
// create code deploy deploymentGroup
const deploymentGroup = new codedeploy.EcsDeploymentGroup(this, 'deployment-group', {
application: ecsApplication,
deploymentGroupName: 'deplgp',
deploymentConfig: codedeploy.EcsDeploymentConfig.ALL_AT_ONCE,
service: fargateService,
blueGreenDeploymentConfig: {
blueTargetGroup: loadBalancedFargateService.targetGroup,
greenTargetGroup: targetgroup2,
listener: loadBalancedFargateService.listener,
testListener: listener2,
},
});
EcsApplicationの作成は名前を適当に指定します。
EcsDeploymentGroupの作成は、前で作成した諸々を指定します。
最後に
- あとはタスクを更新し、更新したものからデプロイを作成すればデプロイできるはずです。
- ポイントポイントで書いたので、継接ぎですが、動かなかったら、すいません。
- デプロイ自体の設定はデフォルトを使用しているので、時間等は自分で指定してください。