跳至內容

如何在不替換 EC2 執行個體的情況下,更新 CloudFormation 中的 EBS 磁碟區?

2 分的閱讀內容
0

我想更新 AWS CloudFormation 中的 Amazon Elastic Block Store (Amazon EBS) 磁碟區。但是,我不想取代我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。

解決方法

為防止執行個體替換,最佳做法是在 CloudFormation 中更新 EBS 磁碟區時使用 AWS::EC2::Volume 資源類型

當您在 AWS::EC2::InstanceAWS::EC2::Template 資源類型的 BlockDeviceMappings 屬性中指定磁碟區時,就會發生執行個體取代。在這種情況下,您必須新增保留 DeletionPolicy 屬性

重要:如果您手動修改磁碟區,例如從 gp2 到 gp3,那麼您也必須修改附加到執行個體的磁碟區。確認執行個體是否未處於最佳化修改狀態。在將磁碟區修改為 gp3 之前,請務必遵守磁碟區修改要求

為了避免在修改使用 BlockDeviceMappings 屬性指定的磁碟區時取代執行個體,請完成下列步驟。

在目標 AWS::EC2::Instance 範本資源中新增保留 DeletionPolicy 屬性

請完成下列步驟:

  1. 擷取磁碟區的快照,以建立關鍵工作負載的備份。

  2. 在具有要更新磁碟區之執行個體的 CloudFormation 堆疊中,將 DeletionPolicy 設為 Retain (保留)。範例:

    AWSTemplateFormatVersion: '2010-09-09'
    Resources:
     Myinstance:
      Type: AWS::EC2::Instance
      DeletionPolicy: Retain
      Properties:
       BlockDeviceMappings:
        - DeviceName: /dev/xvda
         Ebs:
          VolumeType: gp2
          VolumeSize: 10
          DeleteOnTermination: true
       EbsOptimized: false
       ImageId: ami-064ff912f78e3e561
       InstanceInitiatedShutdownBehavior: stop
       InstanceType: t2.micro
       Monitoring: false
  3. 更新堆疊

從 CloudFormation 堆疊中移除資源並實施變更

請完成下列步驟:

  1. 從範本中移除執行個體,以從 CloudFormation 堆疊中移除執行個體,但不刪除底層資源。然後,手動修改 EC2 執行個體。
    **注意:**如果您的範本中只有一個資源,那麼您必須建立一個替代資源,例如另一個執行個體。將 EC2 執行個體重新匯入到範本後,您可以從範本中刪除該資源。
  2. 修改 EBS 磁碟區屬性。

將資源重新匯入到您的 CloudFormation 堆疊中

請完成下列步驟:

  1. 開啟 CloudFormation console (CloudFormation 主控台)。

  2. 在導覽窗格中,選擇 Stack (堆疊)。

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

  4. 輸入更新的 CloudFormation 範本。範例:

    AWSTemplateFormatVersion: '2010-09-09'
    Resources:
     Myinstance:
      Type: AWS::EC2::Instance
      DeletionPolicy: Retain
      Properties:
       BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
           VolumeType: gp3
           VolumeSize: 100
           DeleteOnTermination: true
        EbsOptimized: false
        ImageId: ami-064ff912f78e3e561
        InstanceInitiatedShutdownBehavior: stop
        InstanceType: t2.micro
        Monitoring: false

    **注意:**若要匯入資源,CloudFormation 範本必須使用其現有組態來描述該資源。

  5. 對於 Identifier (識別碼),請輸入執行個體 ID。

  6. 選擇 Import resource (匯入資源)。

在 CloudFormation 將狀態更新為 IMPORT_COMPLETE 後,此執行個體即成為堆疊的一部份。

您可能會收到「建立此變更集時發生錯誤。作為匯入作業的一部分,您無法修改或新增 [Outputs]」錯誤訊息。若要解決此問題,請確認最新 CloudFormation 範本的 Outputs (輸出) 區段是否與您的堆疊使用的範本相符。如果不相同,請更新最新的 CloudFormation 範本,以符合堆疊使用範本 Outputs (輸出) 區段中的值。然後,再次更新堆疊。

AWS 官方已更新 8 個月前