AWS Fargate 部署:"Invalid action configuration The AWS ECS container ***** does not exist"
AWS Fargate deploy: "Invalid action configuration The AWS ECS container ***** does not exist"
我正在使用 Terraform 来配置所需的资源。
我有一个 terraform codepipeline resource
并且 Production
stage
读取 imagedefinitions.json
文件以了解要部署的图像:
resource "aws_codepipeline" "pipeline" {
stage {
name = "Build"
action {
name = "Build"
category = "Build"
owner = "AWS"
provider = "CodeBuild"
version = "1"
input_artifacts = ["source"]
output_artifacts = ["imagedefinitions"]
configuration {
ProjectName = "${var.project_prefix}-codebuild"
}
}
}
stage {
name = "Production"
action {
name = "Deploy"
category = "Deploy"
owner = "AWS"
provider = "ECS"
input_artifacts = ["imagedefinitions"]
version = "1"
configuration {
ClusterName = "${var.ecs_cluster_name}"
ServiceName = "${var.ecs_service_name}"
FileName = "imagedefinitions.json"
}
}
}
imagedefinitions.json
文件是在构建阶段构建的,来自 buildspec.yml
:
build:
commands:
- echo Build started on 'date'
- echo Building the Docker image...
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- echo Build completed on 'date'
- echo Pushing the Docker images...
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- echo Writing image definitions file...
- printf '[{"name":"docker-image-name","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
我不确定这一行中的图像名称应该是什么:
- printf '[{"name":"docker-image-name","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
我得到的错误重复了这一行的 "name" 值:
"Invalid action configuration The AWS ECS container docker-image-name does not exist"
我应该在这里输入什么名字?
您已经创建了一个 ERC 存储库并上传了一张图片到它?
这可能会有所帮助,我看到这看起来有点类似于您要实现的目标的一部分:
https://github.com/aws-samples/amazon-ecs-catsndogs-workshop/blob/master/Lab-6-Artifacts/dogs/buildspec.yml
看起来您正在使用 Continuous Deployment with AWS CodePipeline tutorial. From Prerequisites,您应该有一个任务定义,以及一个使用该任务定义的服务。
当 CodePipeline 中的 ECS Deploy 步骤运行时,它会查找您指定的服务的任务定义,创建一个新的任务定义,并在其中更新容器name
作为您 imagedefinition.json
文件中的那个。
因此,根据您的示例,我希望与您的管道正在更新的 ECS 服务关联的任务定义具有一个名为 docker-image-name
.
的容器
我正在使用 Terraform 来配置所需的资源。
我有一个 terraform codepipeline resource
并且 Production
stage
读取 imagedefinitions.json
文件以了解要部署的图像:
resource "aws_codepipeline" "pipeline" {
stage {
name = "Build"
action {
name = "Build"
category = "Build"
owner = "AWS"
provider = "CodeBuild"
version = "1"
input_artifacts = ["source"]
output_artifacts = ["imagedefinitions"]
configuration {
ProjectName = "${var.project_prefix}-codebuild"
}
}
}
stage {
name = "Production"
action {
name = "Deploy"
category = "Deploy"
owner = "AWS"
provider = "ECS"
input_artifacts = ["imagedefinitions"]
version = "1"
configuration {
ClusterName = "${var.ecs_cluster_name}"
ServiceName = "${var.ecs_service_name}"
FileName = "imagedefinitions.json"
}
}
}
imagedefinitions.json
文件是在构建阶段构建的,来自 buildspec.yml
:
build:
commands:
- echo Build started on 'date'
- echo Building the Docker image...
- docker build -t $REPOSITORY_URI:latest .
- docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
post_build:
commands:
- echo Build completed on 'date'
- echo Pushing the Docker images...
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- echo Writing image definitions file...
- printf '[{"name":"docker-image-name","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
我不确定这一行中的图像名称应该是什么:
- printf '[{"name":"docker-image-name","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
我得到的错误重复了这一行的 "name" 值:
"Invalid action configuration The AWS ECS container docker-image-name does not exist"
我应该在这里输入什么名字?
您已经创建了一个 ERC 存储库并上传了一张图片到它? 这可能会有所帮助,我看到这看起来有点类似于您要实现的目标的一部分: https://github.com/aws-samples/amazon-ecs-catsndogs-workshop/blob/master/Lab-6-Artifacts/dogs/buildspec.yml
看起来您正在使用 Continuous Deployment with AWS CodePipeline tutorial. From Prerequisites,您应该有一个任务定义,以及一个使用该任务定义的服务。
当 CodePipeline 中的 ECS Deploy 步骤运行时,它会查找您指定的服务的任务定义,创建一个新的任务定义,并在其中更新容器name
作为您 imagedefinition.json
文件中的那个。
因此,根据您的示例,我希望与您的管道正在更新的 ECS 服务关联的任务定义具有一个名为 docker-image-name
.