如何用Terraform创建Github V1版AWS CodePipeline?遇区域不可用问题
关于在AWS EU_CENTRAL_1区域用Terraform创建Github V1版CodePipeline的问题
我希望用Terraform创建基于Github Version 1的AWS CodePipeline(不能用AWS Codestar),请问还能实现吗?如果可以该怎么操作?我创建管道时遇到了这个错误:Error creating CodePipeline: InvalidActionDeclarationException: ActionType (Category: 'Source', Provider: 'Github', Owner: 'ThirdParty', Version: '1') in action 'Source' is not available in region EU_CENTRAL_1
附上的Terraform代码:
resource "aws_codepipeline" "ecs_pipeline" { ... stage { name = "Source" action { name = "Source" category = "Source" owner = "ThirdParty" provider = "Github" version = 1 run_order = 1 output_artifacts = ["SourceArtifact"] configuration = { RepositoryName = var.repo_name BranchName = var.branch OAuthToken = var.github_oauth_token Owner = var.repo_owner } } } stage { name = "Build" ... } stage { name = "Deploy" ... } }
结论
Github Version 1的CodePipeline源动作已经在包括EU_CENTRAL_1在内的大部分AWS区域停止支持,且AWS已将其标记为弃用状态,不建议继续使用。可通过以下两种方式解决问题:
方案1:改用Github Version 2源动作(推荐)
Github V2源动作使用AWS CodeStar Connections授权,安全性更高,且在所有支持CodePipeline的区域都可用。修改Terraform代码如下:
resource "aws_codepipeline" "ecs_pipeline" { ... stage { name = "Source" action { name = "Source" category = "Source" owner = "AWS" # 此处改为AWS provider = "GitHub" # 首字母大写(AWS官方定义为GitHub) version = "2" # 切换到版本2 run_order = 1 output_artifacts = ["SourceArtifact"] configuration = { RepositoryName = var.repo_name BranchName = var.branch ConnectionArn = var.github_connection_arn # 替换为你的CodeStar Connection ARN FullRepositoryId = "${var.repo_owner}/${var.repo_name}" # 需要完整仓库ID } } } # Build和Deploy阶段保持不变 stage { name = "Build" ... } stage { name = "Deploy" ... } }
注意事项:
- 需先在AWS控制台创建CodeStar Connection,关联你的Github账号和目标仓库,再获取该Connection的ARN作为
var.github_connection_arn的值。 - V2版本不再使用OAuthToken,而是依赖CodeStar Connection的授权,这是AWS推荐的安全方式。
方案2:切换到仍支持Github V1的区域(不推荐)
如果非要坚持使用Github V1,只能切换到AWS仍保留该动作的区域,比如us-east-1。但这种方式风险极高,AWS随时可能在剩余区域移除V1支持,后续维护会非常麻烦。
内容的提问来源于stack exchange,提问作者RazvanPtS
相关产品推荐
相关产品推荐

