

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

# 使用偏離感知變更集
<a name="drift-aware-change-sets"></a>

偏離感知變更集是增強型 CloudFormation 變更集，可讓您以安全的方式識別和管理堆疊偏離。當堆疊資源在 CloudFormation 外部變更、使用 或基礎服務的 SDK 時 AWS 管理主控台 AWS CLI，堆疊偏離預期的範本組態。偏離感知變更集會將範本與堆疊資源的實際狀態進行比較，並使偏離的資源與其範本定義保持一致。當資源的範本定義更新以符合其實際狀態時，偏離感知變更集會重設資源的偏離狀態，而不會修改資源。

使用偏離感知變更集的優點包括：
+ **預覽覆寫偏離** – 偵測部署是否會還原事件回應期間所做的重大out-of-band變更。
+ **系統性偏離對帳** – 透過使用範本值覆寫偏離屬性或更新範本以符合實際資源狀態，將偏離的資源與合規範本定義安全地對齊。
+ **增強的復原功能** – 如果部署失敗，請將資源還原至其實際的部署前狀態，而非先前的範本狀態。
+ **完整可見**性 – 在進行變更之前，確切查看您的部署將如何影響實際的資源組態。

傳統變更集提供新範本與堆疊先前範本的比較，但不考慮堆疊偏離。偏離感知變更集透過提供以下項目之間的三向比較來解決此問題：
+ **實際狀態** – 資源的即時組態。CloudFormation 將在透過基礎服務 APIs 建立變更集時讀取您帳戶中的資源組態。
+ **先前的部署狀態** – 您上次 CloudFormation 部署的範本中定義的組態。
+ **所需狀態** – 新範本中定義的組態。

即使範本中未明確變更資源，偏離感知變更集也會更新所有堆疊資源的實際狀態，以符合所需狀態。

## 考量事項
<a name="drift-aware-change-sets-considerations"></a>
+ **資源類型支援** – 偏離感知變更集支援將所需狀態與數百種資源類型的實際狀態進行比較。對於不支援的資源類型，偏離感知變更集會回復為比較先前的部署狀態和所需的狀態。如需詳細資訊，請參閱資源類型支援限制一節。
+ **唯讀屬性** – 對於包含敏感資料 （密碼、秘密） 的屬性，偏離感知變更集會與先前的部署值比較，而非實際值。
+ **AWS受管屬性** – 偏離感知變更集會保留 AWS 服務對受管屬性所做的out-of-band變更，例如 Auto Scaling 群組所需的容量。如需詳細資訊，請參閱 AWS受管屬性一節。
+ **外部標籤金鑰** – 偏離感知變更集不會移除或修改範本中未指定的標籤金鑰，以防止與屬性型存取控制 (ABAC) 系統發生衝突。
+ **取代漂移資源** – 漂移感知變更集不支援不可變屬性的漂移對帳。
+ **跨堆疊連接** – 有些資源類型，例如 `AWS::IAM::Policy`，可能會影響其他資源類型的實際狀態，例如 `AWS::IAM::Role`。偏離感知變更集會處理堆疊內資源的連接。如果透過從不同堆疊連接次要資源來修改資源，偏離感知變更集會將修改偵測為偏離，並可以還原連接。熱門的可連接資源包括 `AWS::IAM::Policy`、`AWS::EC2::SecurityGroupIngress`、 `AWS::IAM::ManagedPolicy`和 `AWS::EC2::SecurityGroupEgress`。

## AWS受管屬性
<a name="aws-managed-properties"></a>

您可以為作用中 AWS 管理設定特定資源屬性。例如，您可以允許 Amazon Relational Database Service (Amazon RDS) 自動升級 Amazon RDS 資料表的次要引擎版本。這些變更可能會在 CloudFormation 中顯示為堆疊偏離。漂移感知變更集會辨識 AWS受管屬性的預期漂移，如果您尚未在範本中修改屬性，則讓其實際值保持不變。 AWS受管屬性的熱門範例為：
+ 啟用 Amazon RDS 資料表的 `AutoMinorVersionUpgrade` 屬性，以允許引擎版本的自動更新。
+ 使用 `AWS::ApplicationAutoScaling::ScalableTarget` 資源為屬性啟用自動擴展，例如 Amazon DynamoDB 資料表的讀取/寫入容量單位，以及 Amazon Elastic Container Service 叢集的所需計數。
+ 使用 `AWS::AutoScaling::ScalingPolicy` for Auto Scaling 群組。

偏離感知變更集會釐清識別為 AWS受管的屬性。如需詳細資訊，請參閱 AWS CLI 一節。

## 使用偏離感知變更集 （主控台）
<a name="drift-aware-change-sets-console"></a>

您可以使用與傳統變更集相同的工作流程，以及部署模式的其他選項，透過 CloudFormation 主控台建立和管理偏離感知變更集。

### 建立偏離感知變更集
<a name="drift-aware-change-sets-console-create"></a>

**建立偏離感知變更集 （主控台）**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在**堆疊**頁面上，選取您要更新的堆疊。

1. 選擇**堆疊動作**，然後選擇**建立目前堆疊的變更集**。

1. 在**建立變更集**頁面上，針對**變更集類型**，選擇**偏離感知變更集**。

1. 選擇 **Create change set (建立變更集)**。

1. 在變更集詳細資訊頁面上，檢閱顯示每個受影響資源的實際、先前部署和所需狀態的三向比較。

1. 如果您對變更感到滿意，請選擇**執行變更集**。

### 檢閱偏離感知變更集
<a name="drift-aware-change-sets-console-review"></a>

當您在主控台中檢視偏離感知變更集時，您會看到相較於傳統變更集的增強型資訊：
+ **堆疊偏離狀態 – **指出堆疊是否已偏離其上次部署。
+ **屬性比較** – 顯示受影響資源的實際和所需狀態之間的 JSON 差異。
+ **偏離指標** – 明確標記已偏離的 JSON diff 內的屬性。按一下**檢視偏離**以查看屬性的先前部署值。
+ **值來源指標** – 顯示屬性值之前的值是來自實際狀態還是先前的部署狀態。

## 使用偏離感知變更集 (AWS CLI)
<a name="drift-aware-change-sets-cli"></a>

您可以將 `--deployment-mode REVERT_DRIFT` 參數新增至 **create-change-set**命令， AWS CLI 以使用 建立和管理偏離感知變更集。

### 建立偏離感知變更集
<a name="drift-aware-change-sets-cli-create"></a>

**建立偏離感知變更集**  
使用 [create-change-set](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-change-set.html) 命令搭配 `--deployment-mode REVERT_DRIFT` 參數來建立 drift-aware 變更集。

```
aws cloudformation create-change-set \
  --stack-name {{my-stack}} \
  --change-set-name {{my-drift-aware-changeset}} \
  --template-body {{file://updated-template.yaml}} \
  --deployment-mode REVERT_DRIFT \
  --capabilities {{CAPABILITY_IAM}}
```

### 檢閱偏離感知變更集
<a name="drift-aware-change-sets-cli-review"></a>

**若要檢閱偏離感知變更集的詳細資訊**  
使用 [describe-change-set](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-change-set.html) 命令來檢閱 drift-aware 變更集的詳細資訊：

```
aws cloudformation describe-change-set \
  --change-set-name {{my-drift-aware-changeset}} \
  --stack-name {{my-stack}}
```

回應包含漂移感知變更集的增強資訊：
+ `StackDriftStatus` – 顯示堆疊是否已偏離 (`DRIFTED`、`NOT_CHECKED`、 `IN_SYNC`或 `UNKNOWN`)。
+ `ResourceDriftStatus` – 顯示每個資源 (`DELETED`、`IN_SYNC`、 `MODIFIED`或 ) 的偏離狀態`NOT_CHECKED`。
+ `BeforeValueFrom` – 指出屬性的之前值是來自 `ACTUAL_STATE`或 `PREVIOUS_DEPLOYMENT_STATE`。
+ `Drift` – 包含 屬性的偏離詳細資訊，包括 `PreviousValue`、 `ActualValue`和 `DriftDetectionTimestamp`。
+ `ResourceDriftIgnoredProperties` – 包含變更集不會還原偏離的資源屬性，以及忽略偏離的原因。

如需詳細資訊，請參閱 *AWS CloudFormation API 參考*中的 [DescribeChangeSet](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeChangeSet.html)。

### 執行偏離感知變更集
<a name="drift-aware-change-sets-cli-execute"></a>

**執行偏離感知變更集**  
檢閱變更集之後，請使用 [execute-change-set](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/execute-change-set.html) 命令來套用變更：

```
aws cloudformation execute-change-set \
  --change-set-name {{my-drift-aware-changeset}} \
  --stack-name {{my-stack}}
```

如果部署失敗，CloudFormation 會將資源復原至其實際的部署前狀態，並保留自上次部署以來所做的out-of-band變更。

## 資源類型支援限制
<a name="drift-aware-change-sets-supported-resources"></a>

偏離感知變更集支援所有支援偏離偵測[之資源類型的](resource-import-supported-resources.md)實際狀態、先前部署狀態和所需狀態的三向比較，但下列資源類型除外：
+ `AWS::SageMaker::MlflowTrackingServer`
+ `AWS::Route53Resolver::FirewallRuleGroup`
+ `AWS::MediaLive::Multiplexprogram`
+ `AWS::VpcLattice::ResourceConfiguration`
+ `AWS::S3::StorageLensGroup`
+ `AWS::Bedrock::AgentAlias`
+ `AWS::MSK::Cluster`
+ `AWS::RDS::DBProxy`
+ `AWS::Redshift::ClusterParameterGroup`
+ `AWS::QBusiness::Index`
+ `AWS::NetworkManager::CoreNetwork`
+ `AWS::IAM::OIDCProvider`
+ `AWS::Organizations::ResourcePolicy`
+ `AWS::SNS::TopicInlinePolicy`
+ `AWS::Route53::KeySigningKey`
+ `AWS::DataZone::PolicyGrant`
+ `AWS::Transfer::Certificate`
+ `AWS::SageMaker::ImageVersion`
+ `AWS::Neptune::DBParameterGroup`
+ `AWS::ODB::CloudVmCluster`
+ `AWS::RolesAnywhere::TrustAnchor`
+ `AWS::Detective::Graph`
+ `AWS::Maester::DocumentType`
+ `AWS::SageMaker::ModelPackageGroup`
+ `AWS::S3Express::BucketPolicy`
+ `AWS::Panorama::PackageVersion`
+ `AWS::S3Tables::TableBucketPolicy`

對於不支援三向比較的資源，偏離感知變更集會回復到先前部署狀態和所需狀態的比較。