如何配置CodePipeline阶段,跟踪CodeCommit并部署CloudFormation模板?
配置CodePipeline跟踪CodeCommit并部署CloudFormation模板
我来帮你完善这个CloudFormation模板里的Pipeline Stages配置,同时把缺失的IAM角色权限也补上——毕竟没有合适的权限,Pipeline根本跑不起来。
完整的模板补充内容
首先把你的PipelineRole补全,它需要信任CodePipeline服务,并且拥有访问CodeCommit、S3以及调用CloudFormation的权限:
PipelineRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: codepipeline.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: PipelineExecutionPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - codecommit:GitPull - codecommit:GetBranch - codecommit:GetCommit Resource: !GetAtt PipelineRepo.Arn - Effect: Allow Action: - s3:GetObject - s3:PutObject - s3:GetBucketVersioning Resource: - !Sub "${PipelineArtifacts.Arn}" - !Sub "${PipelineArtifacts.Arn}/*" - Effect: Allow Action: - cloudformation:CreateStack - cloudformation:DescribeStacks - cloudformation:UpdateStack - cloudformation:DeleteStack - cloudformation:ExecuteChangeSet Resource: "*" - Effect: Allow Action: iam:PassRole Resource: !Sub "${CloudFormationExecutionRole.Arn}"
接下来是核心的Stages配置,我们需要两个关键阶段:源阶段(拉取CodeCommit代码)和部署阶段(用CloudFormation执行模板):
Pipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: pipeline-pipeline ArtifactStore: Type: S3 Location: !Ref PipelineArtifacts RoleArn: !GetAtt PipelineRole.Arn Stages: # 源阶段:从CodeCommit拉取代码 - Name: Source Actions: - Name: PullFromCodeCommit ActionTypeId: Category: Source Owner: AWS Provider: CodeCommit Version: '1' Configuration: RepositoryName: !Ref PipelineRepo BranchName: main # 替换成你要跟踪的分支,比如master OutputArtifacts: - Name: SourceCode RunOrder: 1 # 部署阶段:用CloudFormation部署仓库中的模板 - Name: Deploy Actions: - Name: DeployWithCloudFormation ActionTypeId: Category: Deploy Owner: AWS Provider: CloudFormation Version: '1' Configuration: ActionMode: CREATE_UPDATE # 每次执行都创建或更新堆栈 StackName: MyDeployedStack # 替换成你的CloudFormation堆栈名称 TemplatePath: SourceCode::templates/main.yml # 替换成你仓库中模板的路径 RoleArn: !GetAtt CloudFormationExecutionRole.Arn # 需要一个给CloudFormation用的执行角色 InputArtifacts: - Name: SourceCode RunOrder: 1
另外,你还需要添加一个CloudFormation执行角色,让CloudFormation有足够权限创建你模板里的资源:
CloudFormationExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: cloudformation.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/AdministratorAccess # 生产环境建议缩小权限,这里是测试用的全权限
关键部分解释
源阶段:
- 用
CodeCommit作为源提供者,指定你创建的仓库和目标分支 OutputArtifacts会把仓库里的代码打包成一个工件,存储到你定义的S3桶中,供后续阶段使用
- 用
部署阶段:
ActionMode: CREATE_UPDATE表示如果堆栈不存在就创建,存在就更新TemplatePath格式是[工件名称]::[仓库内模板路径],比如你的模板在仓库的templates文件夹下的main.yml,就写SourceCode::templates/main.ymlCloudFormationExecutionRole是CloudFormation用来创建资源的角色,必须有对应资源的创建权限(生产环境别用全权限,根据你的模板内容缩小范围)
注意事项
- 确保你的CodeCommit仓库里已经有指定路径的CloudFormation模板文件
- 分支名称要和你配置的一致(比如上面用的
main,如果是旧仓库可能是master) - IAM权限要最小化,上面的全权限是为了快速测试,生产环境一定要根据实际需求裁剪权限
内容的提问来源于stack exchange,提问作者user3002273
相关产品推荐
相关产品推荐

