使用Terraform部署AWS CodePipeline时遇区域不支持错误求助
CodePipeline部署错误排查与修复
错误原因
触发InvalidActionDeclarationException的核心原因是:你当前使用的GitHub源动作类型(Category: 'Source', Provider: 'Github', Owner: 'ThirdParty', Version: '1')在us-east-1区域已被AWS弃用,旧的第三方GitHub集成方案不再被支持。
修复步骤
1. 替换Source阶段的动作配置
将CodePipeline中Source阶段的action块参数替换为AWS官方维护的GitHub源类型:
owner改为AWSprovider改为GitHub(注意首字母大写)version改为2- 配置项改用
ConnectionArn(需提前在AWS控制台创建GitHub连接,这是官方推荐的安全集成方式)
2. 修正CodeBuild项目名称引用
你的CodePipeline Build阶段中ProjectName硬编码为xxxx,但实际CodeBuild项目名称是xxxx-project,需修正为引用CodeBuild资源的name属性,避免后续构建失败。
修改后的完整代码块
resource "aws_codebuild_project" "xxxx_build" { name = "xxxx-project" service_role = aws_iam_role.iam_for_codebuild.arn source { type = "GITHUB" location = "https://github.com/oihuegbu/terraformproject.git" } environment { compute_type = "BUILD_GENERAL1_SMALL" image = "aws/codebuild/amazonlinux-x86_64-standard:5.0" type = "LINUX_CONTAINER" } artifacts { type = "NO_ARTIFACTS" } } resource "aws_codepipeline" "codepipeline" { name = "xxxx-pipeline" role_arn = aws_iam_role.iam_for_codepipeline.arn artifact_store { location = aws_s3_bucket.codepipeline_bucket.bucket type = "S3" } stage { name = "Source" action { name = "GitHubSource" category = "Source" owner = "AWS" provider = "GitHub" output_artifacts = ["SourceOutput"] version = "2" configuration = { Owner = "oihuegbu" Repo = "terraformproject" Branch = "main" ConnectionArn = aws_codestarconnections_connection.github_connection.arn # 需提前创建GitHub连接 } } } stage { name = "Build" action { name = "Build" category = "Build" owner = "AWS" provider = "CodeBuild" input_artifacts = ["SourceOutput"] output_artifacts = ["build_output"] version = "1" configuration = { ProjectName = aws_codebuild_project.xxxx_build.name # 引用CodeBuild项目名称,避免硬编码 } } } }
补充说明
如果暂时无法创建AWS CodeStar Connections连接,也可以继续使用OAuth方式,但需注意:
- 对于Version 2的GitHub源,
OAuthToken仍可放在configuration中,但需确保CodePipeline的IAM角色拥有对应的权限,不过官方强烈推荐使用连接方式以提升安全性。
内容的提问来源于stack exchange,提问作者Kachi
相关产品推荐
相关产品推荐

