CodePipelineによるECSへのデプロイステージをキャンセルする方法をAWSに問い合わせました。
概要としては以下の通りです。
- デプロイのタイムアウトは60分(現状この値を変更できない)
- アクションの中断は手動で行えない(代替案は後述)
なお上記の2点については、AWSの製品開発チームにフィードバックしているとのことです。
「アクションの中断を手動で行えるようにしたい」および「アクションのタイムアウト時間を変更したい」というご要望については、既に他のお客様からも機能追加のご要望をいただいております。
本お問い合わせにつきましても、機能追加要望として製品開発チームにフィードバックさせていただきます。
何が問題かというと、新しいコンテナがヘルスチェックの失敗により落ちてしまった場合、再度新しいコンテナの立ち上げが60分間繰り返される点です。そのためのキャンセル方法を、AWSサポートが代替案として紹介してくださいました。
パイプラインの実行中に「パイプラインの設定変更」を行うことにより、擬似的にパイプラインの実行を中断することが可能でございます。
マネジメントコンソールより実行中のパイプラインを選択して「編集」をクリックし、例えば実行中のアクションの "アクション名" を変更して「保存」することで、パイプラインの実行が中断されることを当方でも検証により確認しております。
「パイプラインの実行を中断するためにパイプラインを編集する」といった操作は想定外の使用方法であることをご認識いただいた上で、こちらの代替案によりお客様のご要件を満たすことが可能か、ご確認いただけますと幸いです。
ということらしいです。
Terraform上からでもstage > action > name
を別の名前にすればキャンセルできます。(下の例ではDeployからDeploysにするとキャンセルされる)
resource "aws_codepipeline" "application" {
name = "my-application-pipeline"
[.....]
stage {
name = "ProductionDeploy"
action {
name = "Deploy"
category = "Deploy"
owner = "AWS"
provider = "ECS"
input_artifacts = ["imagedefinitions"]
version = "1"
configuration {
ClusterName = "${aws_ecs_cluster.this.name}"
ServiceName = "${aws_ecs_service.this.name}"
FileName = "imagedefinitions.json"
}
}
}
}
以上です。CodePipelineにはお世話になっているので、上記の改善を心よりお待ちしております。