使用代码管道通过 NestedStack 部署 Cloudformation

马加尔海斯

我正在使用代码管道来部署 Cloudformation 模板。问题是这个 Cloudformation 模板有一些嵌套堆栈。嵌套堆栈模板需要位于 S3 存储桶中。所以在触发主(父)CF 模板之前,我需要将 CF 嵌套堆栈上传到 S3。

我没有找到使用代码管道来做到这一点的方法。

有什么建议么?

维乔尔

一种方法是使用 Git 钩子将嵌套堆栈复制到 S3,例如 post-receive 钩子。

另一种方法是在管道中添加另一个阶段来调用 Lambda 函数。你可以按照这篇文章来配置这一步。当您设置“输入工件”字段时,CodePipeline 会传递工件 zip 文件的路径作为事件的一部分。然后 Lambda 函数提取 zip 文件并将您的堆栈上传到您的存储桶。

以下是将工件下载并提取到 /tmp 的示例 Python 代码:

import boto3
import zipfile

def lambda_handler(event, context):
    s3 = boto3.resource('s3')
    codepipeline = boto3.client('codepipeline')

    artifacts_location = event["CodePipeline.job"]["data"]["inputArtifacts"][0]["location"]["s3Location"]
    jobId = event["CodePipeline.job"]["id"]

    try:
        print("Downloading artifacts")
        s3.Bucket(artifacts_location["bucketName"]).download_file(artifact_location["objectKey"], '/tmp/artifacts.zip')
        zip_ref = zipfile.ZipFile('/tmp/artifacts.zip', 'r')
        zip_ref.extractall('/tmp')
        zip_ref.close()
    except ClientError as e:
        print("Cannot process the artifacts: {}".format(str(e)))
        codepipeline.put_job_failure_result(
           jobId=jobId,
           failureDetails={"type": 'JobFailed', "message": str(e)}
        )
        return

    # Perform the steps to copy your files from /tmp folder.
    codepipeline.put_job_success_result(jobId=jobId)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用代码管道连续部署到CloudFormation堆栈

在Cloudformation中使用S3目标进行代码管道部署

通过 Cloudformation 使用函数 URL 部署 AWS Lambda

通过CLI部署AWS CloudFormation时无法创建模板

CloudFormation 部署是否应该通过 CI/CD 完成?

通过具有属性更新的 CloudFormation 部署 AWS UserPool

cloudformation 部署后脚本

使用Ansible Tower将Cloudformation堆栈部署到AWS

使用Cloudformation和Secrets Manager将Jenkins部署到AWS

使用Cloudformation部署Lamba,包括函数可以访问的参数

如何在 CodePipeline 中使用 CloudFormation 部署多个 codeBuild 项目

AWS CloudFormation 无法使用 CodeDeploy 蓝/绿部署创建堆栈

AWS CloudFormation部署失败,该部署正在使用从另一个模板导入的资源

如何在没有内联代码的情况下使用 lambda 函数部署 cloudformation?

AWS CloudFormation创建堆栈与部署

我应该如何组织我的微服务以通过 CloudFormation 实现独立部署

通过 AWS CloudFormation 配置资源以部署 React(MERN)/Angular(MEAN) 应用程序

通过cloudformation部署的Elastic Beanstalk无法更新运行状况检查目标

通过Cloudformation,CodeBuild和CodePipeline将python软件包部署到AWS Lambda

在AWS Codepipeline中,如何分配适当的角色名称以允许通过CloudFormation进行堆栈部署?

我应该如何通过 cloudformation 部署我的 aws 状态机?

我可以使用CloudFormation StackSets部署到自己帐户中的多个区域吗?

使用CodePipeline-将CloudFormation堆栈部署到另一个帐户

无服务器框架:如何使用CloudFormation进行部署?

只需使用适用于AWS的无服务器框架来部署cloudformation更改

使用 CloudFormation / Serverless 承担角色并将资源部署到与 root 帐户不同的帐户中

仅能使用Boto3将CloudFormation模板部署到us-east-1

cloudformation 如何回滾 lambda 部署?

AWS:CloudFormation 如何知道模板已部署?