我想在不替換 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的情況下,在 AWS CloudFormation 中更新我的 Amazon Elastic Block Store (Amazon EBS) 磁碟區。
簡短描述
作為最佳實務,在 CloudFormation 中更新 EBS 磁碟區時,使用 AWS::EC2::Volume 資源類型防止執行個體替換。
當您在 AWS::EC2::Instance 和 AWS::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 部分中的值。然後,再次更新堆疊。