本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將現有資源匯入堆疊
本主題說明如何透過在範本中描述現有資源,將現有 AWS 資源匯入至現有堆疊。若要改為掃描現有資源,並自動產生範本,讓您用來將現有資源匯入 CloudFormation 或複寫新帳戶中的資源,請參閱 使用 IaC 產生器從現有資源產生範本。
先決條件
開始之前,您必須準備好以下項目:
-
描述整個堆疊的範本,包括已是堆疊一部分的資源,以及要匯入的資源。在本機或 Amazon S3 儲存貯體中儲存範本。
取得執行中堆疊範本的副本
-
在 開啟 CloudFormation 主控台https://console.aws.amazon.com/cloudformation/
。 -
從堆疊清單中,選擇要從中擷取範本的堆疊。
-
在堆疊詳細資訊窗格中,選擇範本索引標籤,然後選擇複製到剪貼簿。
-
將程式碼貼到文字編輯器中,開始將其他資源新增至範本。
-
-
對於您要匯入的每個資源,請包含下列項目:
-
定義資源目前組態的屬性和屬性值。
-
資源的唯一識別符,例如資源名稱。如需詳細資訊,請參閱資源識別符。
-
範例 範本
在此逐步解說中,我們假設您使用下列範例範本,稱為 TemplateToImport.json
,指定兩個 DynamoDB 資料表。 目前ServiceTable
是堆疊的一部分,而 GamesTable
是您要匯入的資料表。
注意
此範本僅供參考。若要將其用於您自己的測試目的,請將範例資源取代為來自您 帳戶的資源。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Import test",
"Resources": {
"ServiceTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"TableName": "Service",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 1
}
}
},
"GamesTable": {
"Type": "AWS::DynamoDB::Table",
"DeletionPolicy": "Retain",
"Properties": {
"TableName": "Games",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 1
}
}
}
}
}
使用 將現有資源匯入堆疊 AWS Management Console
注意
AWS CloudFormation 主控台不支援在匯入資源時使用內部函數 Fn::Transform。您可以使用 AWS Command Line Interface 匯入使用內部函數 Fn::Transform 的資源。
登入 AWS Management Console 並在 https://console.aws.amazon.com/cloudformation
開啟 AWS CloudFormation 主控台。 -
在 Stacks (堆疊) 頁面上,選擇您要匯入資源的堆疊。
-
選擇 Stack actions (堆疊動作),然後選擇 Import resources into stack (將資源匯入堆疊)。
-
檢閱 Import overview (匯入概觀) 頁面,然後選擇 Next (下一步)。
-
在 Specify template (指定範本) 頁面上,使用以下其中一種方法提供您更新後的範本,然後選擇 Next (下一步)。
-
選擇 Amazon S3 URL,然後在文字方塊中URL為您的範本指定 。
-
選擇 Upload a template file (上傳範本檔案),然後瀏覽您的範本。
-
-
在 Identify resources (識別資源) 頁面上,識別每個目標資源。如需詳細資訊,請參閱資源識別符。
-
在 Identifer property (識別碼屬性) 下方,選擇資源識別碼類型。例如,
AWS::DynamoDB::Table
資源可以使用TableName
屬性進行識別。 -
在 Identifer value (識別碼值) 下方,輸入實際的屬性值。例如,範例範本中
GamesTable
資源的TableName
是
。Games
-
選擇 Next (下一步)。
-
-
在 Specify stack details (識別堆疊詳細資訊) 頁面上,更新任何參數,然後選擇 Next (下一步)。這會自動建立變更集合。
注意
如果您修改了啟動建立、更新或刪除操作的現有參數,匯入操作便會失敗。
-
在檢閱
stack-name
頁面上,檢閱要匯入的資源,然後選擇匯入資源。這會自動執行在最後一個步驟中建立的變更集合。此時會將任何堆疊層級標籤套用到匯入的資源。如需詳細資訊,請參閱設定堆疊選項。隨即會顯示堆疊的 Events (事件) 頁面。
-
(選用) 在 堆疊上執行漂移偵測,確認範本和匯入資源的實際組態相符。如需偵測偏離的詳細資訊,請參閱 偵測整個 CloudFormation 堆疊上的偏離。
-
(選用) 如果您匯入的資源與其預期的範本組態不相符,請修正範本組態,或是直接更新資源。如需匯入漂移資源的詳細資訊,請參閱 透過匯入作業解決漂移。
使用 將現有資源匯入堆疊 AWS CLI
-
若要了解在範本中識別每個資源類型的屬性,請執行 get-template-summary命令,指定範本URL的 S3。例如,
AWS::DynamoDB::Table
資源可以使用TableName
屬性進行識別。針對範例範本中的GamesTable
資源,TableName
的值是Games
。在下一個步驟中,您將需要此資訊。aws cloudformation get-template-summary \ --template-url
https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
如需詳細資訊,請參閱資源識別符。
-
以下列JSON字串格式撰寫要匯入的實際資源清單及其唯一識別符。
[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
或者,您可以在組態檔案中指定 JSON格式化參數。
例如,若要匯入
GamesTable
,您可以建立包含下列組態ResourcesToImport.txt
的檔案。[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
-
若要建立變更集,請使用下列create-change-set命令並取代預留位置文字。對於
--change-set-type
選項,請指定值為IMPORT
。對於--resources-to-import
選項,將範例JSON字串取代為您剛建立的實際JSON字串。aws cloudformation create-change-set \ --stack-name
TargetStack
--change-set-nameImportChangeSet
\ --change-set-typeIMPORT
\ --template-urlhttps://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
\ --resources-to-import'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'
注意
--resources-to-import
不支援內嵌 YAML。JSON 字串中逸出引號的需求會因終端機而異。如需詳細資訊,請參閱AWS Command Line Interface 《 使用者指南》中的在字串內使用引號。或者,您可以使用 檔案URL做為
--resources-to-import
選項的輸入,如下列範例所示。--resources-to-import
file://ResourcesToImport.txt
-
檢閱變更集合,確認您將匯入正確的資源。
aws cloudformation describe-change-set \ --change-set-name
ImportChangeSet
--stack-nameTargetStack
-
若要啟動變更集並匯入資源,請使用下列execute-change-set命令並取代預留位置文字。此時會將任何堆疊層級標籤套用到匯入的資源。如需詳細資訊,請參閱設定堆疊選項。成功完成操作
(IMPORT_COMPLETE)
後,資源便已順利匯入。aws cloudformation execute-change-set \ --change-set-name
ImportChangeSet
--stack-nameTargetStack
-
(選用) 在
IMPORT_COMPLETE
堆疊上執行漂移偵測,確認範本和匯入資源的實際組態相符。如需偵測偏離的詳細資訊,請參閱偵測整個 CloudFormation 堆疊上的偏離。-
在指定的堆疊上執行偏離偵測。
aws cloudformation detect-stack-drift --stack-name
TargetStack
如果成功,此命令會傳回下列範例輸出。
{ "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
-
檢視指定堆疊偏離偵測 ID 的偏離偵測操作進度。
aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id
624af370-311a-11e8-b6b7-500cexample
-
檢視已檢查指定堆疊中漂移之資源的漂移資訊。
aws cloudformation describe-stack-resource-drifts --stack-name
TargetStack
-
-
(選用) 如果您匯入的資源與其預期的範本組態不相符,請修正範本組態,或是直接更新資源。如需匯入漂移資源的詳細資訊,請參閱 透過匯入作業解決漂移。