1つのCodePipelineプロジェクトで複数のECSサービスをデプロイする
概要
CodePipelineで1つのプロジェクトで複数のECSサービスをデプロイするための設定方法に工夫が必要だったのでメモ
ポイント
- buildspec.ymlのアーティファクトで、デプロイするサービスの数だけの
imagedefinitions.json
を生成する - Deployステージのactionを複数作成して、buildspec.ymlに従って生成されたアーティファクトの
imagedefinitions.json
を使用する
buildspec.ymlのアーティファクトで、デプロイするサービスの数だけimagedefinitions.json
を生成する
phases:
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker images...
- docker push $SERVICE1_REPOSITORY_URI:$IMAGE_TAG
- docker push $SERVICE2_REPOSITORY_URI:$IMAGE_TAG
- echo Writing image definitions file...
- printf '[{"name":"server","imageUri":"%s"}]' $SERVICE1_REPOSITORY_URI:$IMAGE_TAG > service1_imagedefinitions.json
- printf '[{"name":"runner","imageUri":"%s"}]' $SERVICE2_REPOSITORY_URI:$IMAGE_TAG > service2_imagedefinitions.json
artifacts:
files:
- service1_imagedefinitions.json
- service2_imagedefinitions.json
Deployステージのactionを複数作成して、buildspec.ymlに従って生成されたアーティファクトのサービス名_imagedefinitions.json
を使用する
ここで指定するサービス名_imagedefinitions.json
は、決まってないので好きな名前で名前で良い。
ビルドステージで指定した
- printf '[{"name":"server","imageUri":"%s"}]' $SERVICE1_REPOSITORY_URI:$IMAGE_TAG > service1_imagedefinitions.json
- printf '[{"name":"runner","imageUri":"%s"}]' $SERVICE2_REPOSITORY_URI:$IMAGE_TAG > service2_imagedefinitions.json
service1_imagedefinitions.json
やservice2_imagedefinitions.json
の部分とDeployステージのactionで指定するFileNameが一致していることが大事
Terraform
Terraformでは、FileName の部分にサービス名_imagedefinitions.json
といったイメージ定義を指定する
stage {
name = "Deploy"
dynamic "action" {
for_each = var.deploy_actions
content {
name = action.value.name
category = action.value.category
owner = action.value.owner
provider = action.value.provider
input_artifacts = action.value.input_artifacts
version = action.value.version
configuration = {
FileName = "service1_imagedefinitions.json"
ClusterName = var.cluster_name
ServiceName = var.service_name
}
}
}
AWS: aws_codepipeline - Terraform by HashiCorp
所感
AWSCode3兄弟は概念がたくさん出現するので混乱しますが、ビルド→ECSデプロイの流れはとても便利だなと思いました
Author And Source
この問題について(1つのCodePipelineプロジェクトで複数のECSサービスをデプロイする), 我々は、より多くの情報をここで見つけました https://qiita.com/fuubit/items/fd8fbf7feafb362decb3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .