將現有資源匯入堆疊 - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將現有資源匯入堆疊

本主題說明如何透過在範本中描述現有資源,將現有 AWS 資源匯入至現有堆疊。若要改為掃描現有資源,並自動產生範本,讓您用來將現有資源匯入 CloudFormation 或複寫新帳戶中的資源,請參閱 使用 IaC 產生器從現有資源產生範本

先決條件

開始之前,您必須準備好以下項目:

  • 描述整個堆疊的範本,包括已是堆疊一部分的資源,以及要匯入的資源。在本機或 Amazon S3 儲存貯體中儲存範本。

    取得執行中堆疊範本的副本

    1. 在 開啟 CloudFormation 主控台https://console.aws.amazon.com/cloudformation/

    2. 從堆疊清單中,選擇要從中擷取範本的堆疊。

    3. 在堆疊詳細資訊窗格中,選擇範本索引標籤,然後選擇複製到剪貼簿

    4. 將程式碼貼到文字編輯器中,開始將其他資源新增至範本。

  • 對於您要匯入的每個資源,請包含下列項目:

範例 範本

在此逐步解說中,我們假設您使用下列範例範本,稱為 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 的資源。

  1. 登入 AWS Management Console 並在 https://console.aws.amazon.com/cloudformation 開啟 AWS CloudFormation 主控台。

  2. Stacks (堆疊) 頁面上,選擇您要匯入資源的堆疊。

  3. 選擇 Stack actions (堆疊動作),然後選擇 Import resources into stack (將資源匯入堆疊)

    主控台中 Import resource into stack (將資源匯入堆疊) 的選項。
  4. 檢閱 Import overview (匯入概觀) 頁面,然後選擇 Next (下一步)

  5. Specify template (指定範本) 頁面上,使用以下其中一種方法提供您更新後的範本,然後選擇 Next (下一步)

    • 選擇 Amazon S3 URL,然後在文字方塊中URL為您的範本指定 。

    • 選擇 Upload a template file (上傳範本檔案),然後瀏覽您的範本。

  6. Identify resources (識別資源) 頁面上,識別每個目標資源。如需詳細資訊,請參閱資源識別符

    1. Identifer property (識別碼屬性) 下方,選擇資源識別碼類型。例如,AWS::DynamoDB::Table 資源可以使用 TableName 屬性進行識別。

    2. Identifer value (識別碼值) 下方,輸入實際的屬性值。例如,範例範本中 GamesTable 資源的 TableNameGames

    3. 選擇 Next (下一步)

  7. Specify stack details (識別堆疊詳細資訊) 頁面上,更新任何參數,然後選擇 Next (下一步)。這會自動建立變更集合。

    注意

    如果您修改了啟動建立、更新或刪除操作的現有參數,匯入操作便會失敗。

  8. 檢閱stack-name頁面上,檢閱要匯入的資源,然後選擇匯入資源。這會自動執行在最後一個步驟中建立的變更集合。此時會將任何堆疊層級標籤套用到匯入的資源。如需詳細資訊,請參閱設定堆疊選項

    隨即會顯示堆疊的 Events (事件) 頁面。

    主控台中的 Events (事件) 標籤。
  9. (選用) 在 堆疊上執行漂移偵測,確認範本和匯入資源的實際組態相符。如需偵測偏離的詳細資訊,請參閱 偵測整個 CloudFormation 堆疊上的偏離

  10. (選用) 如果您匯入的資源與其預期的範本組態不相符,請修正範本組態,或是直接更新資源。如需匯入漂移資源的詳細資訊,請參閱 透過匯入作業解決漂移

使用 將現有資源匯入堆疊 AWS CLI

  1. 若要了解在範本中識別每個資源類型的屬性,請執行 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

    如需詳細資訊,請參閱資源識別符

  2. 以下列JSON字串格式撰寫要匯入的實際資源清單及其唯一識別符。

    [{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]

    或者,您可以在組態檔案中指定 JSON格式化參數。

    例如,若要匯入 GamesTable ,您可以建立包含下列組態ResourcesToImport.txt的檔案。

    [ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
  3. 若要建立變更集,請使用下列create-change-set命令並取代預留位置文字。對於 --change-set-type 選項,請指定值為 IMPORT。對於 --resources-to-import選項,將範例JSON字串取代為您剛建立的實際JSON字串。

    aws cloudformation create-change-set \ --stack-name TargetStack --change-set-name ImportChangeSet \ --change-set-type IMPORT \ --template-url https://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
  4. 檢閱變更集合,確認您將匯入正確的資源。

    aws cloudformation describe-change-set \ --change-set-name ImportChangeSet --stack-name TargetStack
  5. 若要啟動變更集並匯入資源,請使用下列execute-change-set命令並取代預留位置文字。此時會將任何堆疊層級標籤套用到匯入的資源。如需詳細資訊,請參閱設定堆疊選項。成功完成操作 (IMPORT_COMPLETE) 後,資源便已順利匯入。

    aws cloudformation execute-change-set \ --change-set-name ImportChangeSet --stack-name TargetStack
  6. (選用) 在 IMPORT_COMPLETE 堆疊上執行漂移偵測,確認範本和匯入資源的實際組態相符。如需偵測偏離的詳細資訊,請參閱偵測整個 CloudFormation 堆疊上的偏離

    1. 在指定的堆疊上執行偏離偵測。

      aws cloudformation detect-stack-drift --stack-name TargetStack

      如果成功,此命令會傳回下列範例輸出。

      { "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
    2. 檢視指定堆疊偏離偵測 ID 的偏離偵測操作進度。

      aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id 624af370-311a-11e8-b6b7-500cexample
    3. 檢視已檢查指定堆疊中漂移之資源的漂移資訊。

      aws cloudformation describe-stack-resource-drifts --stack-name TargetStack
  7. (選用) 如果您匯入的資源與其預期的範本組態不相符,請修正範本組態,或是直接更新資源。如需匯入漂移資源的詳細資訊,請參閱 透過匯入作業解決漂移