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

1 分的閱讀內容
0

我想在不替換 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的情況下,在 AWS CloudFormation 中更新我的 Amazon Elastic Block Store (Amazon EBS) 磁碟區。

簡短描述

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

當您在 AWS::EC2::InstanceAWS::EC2::Template 資源類型的 BlockDeviceMappings 屬性中指定磁碟區時,會出現執行個體替換。在這種情況下,您必須新增 Retain DeletionPolicy attribute (保留 DeletionPolicy 屬性)。

先決條件:如果您將磁碟區從 gp2 修改為 gp3,請確保連接到執行個體的磁碟區修改為 gp3。此外,請確保執行個體未處於正在最佳化正在修改狀態。在將磁碟區修改為 gp3 之前,請檢查有哪些限制

**重要提示:**在解決問題之前,請拍攝磁碟區的快照,以建立關鍵工作負載的備份。

解決方案

1.    將 Retain DeletionPolicy (保留 DeletionPolicy) 新增到要更新磁碟區的執行個體的 CloudFormation 堆疊,然後更新堆疊:

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

2.    透過從範本中刪除執行個體,再次更新 CloudFormation 堆疊。**注意:**如果範本中只有一個資源,則必須建立備用資源,例如另一個執行個體。完成後,您可以從範本中刪除資源。

3.    根據您的要求修改 EBS 磁碟區屬性。

4.    將執行個體匯入回 CloudFormation 堆疊。

要將執行個體匯入回 CloudFormation 堆疊,請執行以下操作:

1.    打開 AWS CloudFormation 主控台

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

3.    更新範本:

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

4.    在識別符欄位中輸入執行個體 ID 值。

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

CloudFormation 變為 IMPORT_COMPLETE 狀態後,執行個體再次成為堆疊的一部分。

**注意:**您可能會收到錯誤,建立此變更集時出錯。作為匯入操作的一部分,您不能修改或新增 [Outputs]。若要解決此問題,請驗證最新 CloudFormation 範本的 Outputs 部分和堆疊使用的範本是相同的。如果不同,請更新最新的 CloudFormation 範本以匹配堆疊正在使用的範本的 Outputs 部分中的值。然後,再次更新堆疊。


AWS 官方
AWS 官方已更新 2 年前