You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
      }
    }
  }

排查与修复建议

  1. 环境文件路径格式错误
    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"
    
  2. 任务定义变量替换验证
    确认CodeBuild环节是否正确将appspec.yml中的<TASK_DEFINITION>替换为有效的ECS任务定义ARN。若替换失败,会直接导致无效ARN语法错误。

  3. 部署组ASG配置检查
    Fargate模式下不需要配置Auto Scaling组,需确认var.codedeploy_deployment_groups[0].autoscaling_groups是否传入了无效值,可尝试移除该配置项。

  4. 资源ARN完整性验证
    检查CodeDeploy部署组中listener_arns、服务角色ARN是否为完整有效的格式,确保无拼写错误或截断。

内容的提问来源于stack exchange,提问作者Minh NA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:36:00