CodeDeploy蓝绿部署ECS Fargate报错:ARN语法无效求助
问题:CodeDeploy阶段报错「Invalid arn syntax」且无部署记录
使用Terraform创建了ECS Fargate、CodeBuild、CodeDeploy及CodePipeline,但流水线运行时在CodeDeploy阶段失败,报错信息为「Invalid arn syntax」,且未生成任何部署记录。已尝试修改验证配置但无效,请求协助排查问题。
相关资源信息
日志截图
- CodeDeploy日志截图
- CodeDeploy输入信息截图
- 部署记录截图
- 部署组配置截图
工件文件
appspec.yml
version: 0.0 Resources: - TargetService: Type: AWS::ECS::Service Properties: TaskDefinition: "<TASK_DEFINITION>" LoadBalancerInfo: ContainerName: "name-container" ContainerPort: "3000" PlatformVersion: "LATEST"
taskdef.json
{ "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "family": "name-task-def", "executionRoleArn": "arn:aws:iam::ACC_ID:role/name-execution-role", "taskRoleArn": "arn:aws:iam::ACC_ID:role/name-task-role", "memory": "1024", "cpu": "512", "containerDefinitions": [ { "image": "ACC_ID.dkr.ecr.eu-central-1.amazonaws.com/name-ecr-repo:latest", "name": "name-container", "mountPoints": [], "logConfiguration": { "options": { "awslogs-group": "/aws/ecs/task-name", "awslogs-region": "eu-central-1", "awslogs-stream-prefix": "rails" }, "logDriver": "awslogs" }, "cpu": 0, "portMappings": [ { "protocol": "tcp", "containerPort": 3000, "hostPort": 3000 } ], "environment": [], "environmentFiles": [ { "value": "name-s3-store-envs/fe-app/.env", "type": "s3" } ], "essential": true } ] }
Terraform配置片段(main.tf)
resource "aws_ecs_service" "ecs_service" { ... deployment_controller { type = CODE_DEPLOY } } resource "aws_codedeploy_app" "codedeploy_app" { name = "${var.codedeploy_app.name}-codedeploy-app" compute_platform = "ECS" } resource "aws_codedeploy_deployment_group" "codedeploy_deployment_group" { app_name = aws_codedeploy_app.codedeploy_app.name deployment_group_name = "${var.deploy_name}-deploy-grp" service_role_arn = aws_iam_role.code_deploy_role.arn deployment_config_name = "CodeDeployDefault.ECSAllAtOnce" autoscaling_groups = var.codedeploy_deployment_groups[0].autoscaling_groups deployment_style { deployment_type = "BLUE_GREEN" deployment_option = "WITH_TRAFFIC_CONTROL" } auto_rollback_configuration { enabled = var.codedeploy_deployment_groups[0].auto_rollback_configuration events = ["DEPLOYMENT_FAILURE"] } load_balancer_info { target_group_pair_info { prod_traffic_route { listener_arns = [aws_lb_listener.listen_443.arn] } target_group { name = aws_lb_target_group.target_group_blue.name } target_group { name = aws_lb_target_group.target_group_green.name } } } } resource "aws_codepipeline" "codepipeline" { name = "${var.codepipeline_app.name}-codepipeline" pipeline_type = "V2" role_arn = aws_iam_role.code_pipeline_role.arn artifact_store { location = module.s3_artifact.s3_bucket_id type = "S3" ... stage { name = "Deploy" action { name = "Deploy-BlueGreen" category = "Deploy" owner = "AWS" provider = "CodeDeployToECS" input_artifacts = ["build"] version = "1" run_order = "1" configuration = { ApplicationName = aws_codedeploy_app.codedeploy_app.name DeploymentGroupName = "${var.deploy_name}-deploy-grp" AppSpecTemplateArtifact = "build" AppSpecTemplatePath = var.codepipeline_app.app_spec_path TaskDefinitionTemplateArtifact = "build" TaskDefinitionTemplatePath = var.codepipeline_app.task_def_path } } }
排查与修复建议
环境文件路径格式错误
taskdef.json中environmentFiles.value使用了相对路径name-s3-store-envs/fe-app/.env,不符合S3 ARN规范,需修改为完整ARN格式:"value": "arn:aws:s3:::name-s3-store-envs/fe-app/.env"任务定义变量替换验证
确认CodeBuild环节是否正确将appspec.yml中的<TASK_DEFINITION>替换为有效的ECS任务定义ARN。若替换失败,会直接导致无效ARN语法错误。部署组ASG配置检查
Fargate模式下不需要配置Auto Scaling组,需确认var.codedeploy_deployment_groups[0].autoscaling_groups是否传入了无效值,可尝试移除该配置项。资源ARN完整性验证
检查CodeDeploy部署组中listener_arns、服务角色ARN是否为完整有效的格式,确保无拼写错误或截断。
内容的提问来源于stack exchange,提问作者Minh NA
相关产品推荐
相关产品推荐

