當我使用帶有API網關資源的模板運行CloudFormation deploy
時,第一次運行它時,它會創建並部署到階段。隨後我運行它,它會更新資源,但不會部署到階段。CloudFormation不會在更新時部署到API網關階段
那是行爲嗎?如果是的話,我該如何將它部署到更新的階段?
(Terraform提到了一個類似的問題:https://github.com/hashicorp/terraform/issues/6613)
當我使用帶有API網關資源的模板運行CloudFormation deploy
時,第一次運行它時,它會創建並部署到階段。隨後我運行它,它會更新資源,但不會部署到階段。CloudFormation不會在更新時部署到API網關階段
那是行爲嗎?如果是的話,我該如何將它部署到更新的階段?
(Terraform提到了一個類似的問題:https://github.com/hashicorp/terraform/issues/6613)
好像有沒有辦法輕鬆地創建一個新的部署,只要您Cloudformation資源的變化之一。
解決此問題的一種方法是使用支持Lambda的自定義資源(請參閱http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)。
只有在您的某個資源已更新時,Lambda才應創建新的Deployment。要確定您的資源之一,已被更新,
你可能要實現圍繞這個API調用自定義邏輯:http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeStackEvents.html
爲了觸發您的自定義資源的更新,我建議你提供一個Cloudformation參數的方式,用於強制更新您的自定義資源(例如當前時間或版本號)。
請注意,您必須將DependsOn
子句添加到您的自定義資源中,該子句將包含與您的API相關的所有資源。否則,可能會在更新所有API資源之前創建您的部署。
希望這會有所幫助。
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
有一定的幫助。 :)亞馬遜建議另一種方式 - 如果感興趣可以分享。 – bjfletcher
@bjfletcher當然想知道! – spg
@bjfletcher也遇到這個問題,你從亞馬遜找到了什麼? –