[英]Renaming Resource in CloudFormation Template
您可以重命名 CloudFormation 模板中的資源嗎?
假設我創建了一個堆棧模板來創建單個 lambda 函數。
GetTheFunnyPhraseText:
Type: AWS::Serverless::Function
Properties:
CodeUri: ../Lambda/
Handler: GetFunnyPhrase.handler
FunctionName: GetFunnyPhrase
Role: !GetAtt [ ExecuteFunctionGetFunnyPhrase, Arn ]
無論出於何種原因,我想將資源名稱GetTheFunnyPhraseText
更改為GetFunnyPhrase
。 是否有更改名稱的機制?
我嘗試了幾件事...
GetTheFunnyPhraseText
和創建GetFunnyPhrase
。 這里的問題是資源創建發生在資源刪除之前,導致操作失敗,因為 Lambda 函數存在。對於那些建議不要命名函數的人,理解; 暫時在該反饋中放置一個引腳。
既然CloudFormation 導入可用,在技術上就可以做到這一點,盡管它很乏味。
這是您需要執行的操作:
GetTheFunnyPhraseText
的定義以添加DeletionPolicy: "Retain"
,上傳到 CloudFormationGetTheFunnyPhraseText
。 上傳到 CloudFormation。 由於之前添加的DeletionPolicy
這實際上不會刪除底層 LambdaGetTheFunnyPhraseText
添加回來)並將邏輯名稱更改為GetFunnyPhrase
DeletionPolicy
)GetFunnyPhrase
邏輯名稱,並詢問您應該將哪個實際FunctionName
映射到該名稱。 提供現有的GetFunnyPhrase
Lambda 名稱並完成導入。DeletionPolicy
肯定是一個乏味的過程,但如果您真的不想刪除現有資源,技術上是可行的。
不! 在 Cloud Formation 中無法重命名資源的邏輯名稱。
正如您所測試的那樣,CloudFormation 將其視為移除舊資源並創建新資源。 之所以如此,是因為創建后,CloudFormation 將邏輯資源 ID 綁定到資源的物理 ID。 但是對於 CloudFormation 模板語言,它在解析模板時僅識別邏輯 ID,因此對其的任何更改都意味着與其關聯的資源將被更改。
在某些資源類型中,雖然您可以通過使用特定於資源的某些名稱屬性自己設置物理 ID,例如資源AWS::RDS::DBInstance
可能具有屬性DBInstanceIdentifier
,它將是數據庫實例本身的物理名稱.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.