我正在使用terraform来提供所需的资源。
我有一个Terraform代码管道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
我得到的错误重复了这一行的“名称”值:
“无效的操作配置AWS ECS容器docker-image-name不存在”
我应该在这里叫什么名字?
答案 0 :(得分:3)
您似乎正在使用Continuous Deployment with AWS CodePipeline教程。在Prerequisites中,您应该具有任务定义和使用该任务定义的服务。
运行CodePipeline中的 ECS部署步骤时,它将查找您指定服务的任务定义,创建新的任务定义,并在其中使用相同的name
更新容器作为imagedefinition.json
文件中的文件。
因此,从您的示例中,我希望与您的管道正在更新的ECS服务关联的任务定义具有名称为docker-image-name
的容器。
答案 1 :(得分:0)
您已经创建了ERC存储库,并且已将图像上传到其中? 这可能会有所帮助,我发现这看起来与您要实现的目标有些相似: https://github.com/aws-samples/amazon-ecs-catsndogs-workshop/blob/master/Lab-6-Artifacts/dogs/buildspec.yml