首页 文章

CloudFormation在更新时不会部署到API网关阶段

提问于
浏览
17

当我使用带有API网关资源的模板运行CloudFormation deploy 时,第一次运行它时,它会创建并部署到阶段 . 随后我运行它,它会更新资源但不会部署到阶段 .

这种行为是否符合预期?如果是的话,我是如何在更新时将其部署到阶段的?

(Terraform提到了一个类似的问题:https://github.com/hashicorp/terraform/issues/6613

2 回答

  • 6

    似乎无论何时您的某个Cloudformation资源发生变化,都无法轻松创建新的部署 .

    解决这个问题的一种方法是使用Lambda支持的自定义资源(请参阅http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html) .

    只有在您的某个资源已更新时,Lambda才应创建新的部署 . 要确定您的某个资源是否已更新,
    您可能必须围绕此API调用实现自定义逻辑:http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackEvents.html

    为了触发自定义资源的更新,我建议您提供一个Cloudformation参数,用于强制更新自定义资源(例如当前时间或版本号) .

    请注意,您必须在自定义资源中添加 DependsOn 子句,其中包含与API相关的所有资源 . 否则,可能会在更新所有API资源之前创建部署 .

    希望这可以帮助 .

  • 10

    亚马逊的CloudFormation是:

    AWS CloudFormation负责为您配置和配置这些资源http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html

    重新部署API不是一项配置任务......这是一项促销活动,是软件发布过程中的一个阶段 .

    AWS CodePipeline是一种持续交付服务,可用于建模,可视化和自动化发布软件所需的步骤 . http://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html

    CodePipeline还支持从管道中的Actions执行Lambda函数 . 因此,如前所述,创建一个Lambda函数来部署您的API,但是从Codepipeline而不是CloudFormation调用它 .

    有关详细信息,请参阅此页面:http://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html

相关问题