

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

# 帳戶自訂
<a name="aft-account-customization-options"></a>

AFT 可以在佈建帳戶中部署標準或自訂組態。在 AFT 管理帳戶中，AFT 為每個帳戶提供一個管道。使用此管道，您可以在所有帳戶、一組帳戶或個別帳戶中實作自訂。您可以執行 Python 指令碼、Bash 指令碼和 Terraform 組態，也可以在帳戶自訂階段中與 AWS CLI 互動。

## 概觀
<a name="aft-customizations-overview"></a>

在您選擇的`git`儲存庫中指定自訂之後，無論是存放全域自訂的儲存庫，或是存放帳戶自訂的儲存庫，帳戶自訂階段都會由 AFT 管道自動完成。若要追溯自訂帳戶，請參閱 [重新叫用自訂](#aft-re-invoke-customizations)。

**全域自訂 （選用）**

您可以選擇將特定自訂套用至 AFT 佈建的所有帳戶。例如，如果您需要建立特定 IAM 角色，或在每個帳戶中部署自訂控制項，則 AFT 管道中的全域自訂階段可讓您自動執行此操作。

**帳戶自訂 （選用）**

若要自訂個別帳戶或一組帳戶，與其他 AFT 佈建帳戶不同，您可以利用 AFT 管道的帳戶自訂部分來實作帳戶特定的組態。例如，只有特定帳戶可能需要存取網際網路閘道。

## 自訂先決條件
<a name="aft-account-customization-prerequisites"></a>

開始自訂帳戶之前，請確定已備妥這些先決條件。
+ 完全部署的 AFT。如需如何部署的資訊，請參閱 [設定和啟動適用於 Terraform 的 AWS Control Tower 帳戶工廠](aft-getting-started.md#aft-configure-and-launch)。
+ 預先填入`git`的儲存庫，用於您環境中的全域自訂和帳戶自訂。如需詳細資訊[部署後步驟](aft-post-deployment.md)，請參閱 中的*步驟 3：填入每個儲存庫*。

## 套用全域自訂
<a name="aft-global-customizations"></a>

若要套用全域自訂，您必須將特定資料夾結構推送至您選擇的儲存庫。
+ 如果您的自訂組態採用 Python 程式或指令碼的形式，請將這些組態放在儲存庫的 **api\$1helpers/python** 資料夾下。
+ 如果您的自訂組態採用 Bash 指令碼形式，請將這些組態放在儲存庫的 **api\$1helpers** 資料夾下。
+ 如果您的自訂組態採用 Terraform 格式，請將它們放在儲存庫中的 **terraform** 資料夾下。
+ 如需建立自訂組態的詳細資訊，請參閱全域自訂 README 檔案。

**注意**  
在 AFT 管道的 AFT 帳戶佈建架構階段之後，會自動套用全域自訂。

## 套用帳戶自訂
<a name="aft-account-customizations"></a>

****

 您可以將特定資料夾結構推送至您選擇的儲存庫，以套用帳戶自訂。帳戶自訂會在 AFT 管道和全域自訂階段之後自動套用。您也可以在帳戶自訂儲存庫中建立多個資料夾，其中包含不同的帳戶自訂。對於您需要的每個帳戶自訂，請使用下列步驟。

**套用帳戶自訂**

1.  ** 步驟 1：為帳戶自訂建立資料夾 ** 

    在您選擇的儲存庫中，將 AFT 提供的`ACCOUNT_TEMPLATE`資料夾複製到新資料夾。新資料夾的名稱應與`account_customizations_name`您在帳戶請求中提供的 相符。

1.  ** 將組態新增至您的特定帳戶自訂資料夾 ** 

    您可以根據組態的格式，將組態新增至您的帳戶自訂資料夾。
   +  如果您的自訂組態採用 Python 程式或指令碼的形式，請將它們放在儲存庫中的 ***【account\$1customizations\$1name】*/api\$1helpers/python** 資料夾下。
   +  如果您的自訂組態是 Bash 指令碼的形式，請將它們放在儲存庫中的 ***【account\$1customizations\$1name】*/api\$1helpers** 資料夾下。
   +  如果您的自訂組態採用 Terraform 格式，請將它們放在儲存庫中的 ***【account\$1customizations\$1name】*/terraform** 資料夾下。

    如需建立自訂組態的詳細資訊，請參閱帳戶自訂 README 檔案。

1.  ** 請參閱帳戶請求檔案中的特定`account_customizations_name`參數 ** 

    AFT 帳戶請求檔案包含輸入參數 `account_customizations_name`。輸入您帳戶自訂的名稱做為此參數的值。

**注意**  
 您可以為環境中的帳戶提交多個帳戶請求。當您想要套用不同或類似的帳戶自訂時，請在帳戶請求中使用`account_customizations_name`輸入參數來指定帳戶自訂。如需詳細資訊，請參閱[提交多個帳戶請求](https://docs.aws.amazon.com/controltower/latest/userguide/aft-multiple-account-requests.html)。

## 重新叫用自訂
<a name="aft-re-invoke-customizations"></a>

AFT 提供在 AFT 管道中重新叫用自訂項目的方法。當您新增新的自訂步驟，或變更現有的自訂時，此方法非常有用。當您重新叫用 時，AFT 會啟動自訂管道，以對 AFT 佈建帳戶進行變更。event-source-based重新叫用可讓您將自訂套用至個別帳戶、所有帳戶、根據其 OU 的帳戶，或根據標籤選取的帳戶。

請依照這三個步驟，為 AFT 佈建的帳戶重新叫用自訂。

**步驟 1：將變更推送至全域或帳戶自訂`git`儲存庫**

您可以視需要更新全域和帳戶自訂，並將變更推回`git`儲存庫。此時，不會發生任何情況。自訂管道必須由事件來源調用，如接下來兩個步驟所述。

**步驟 2：啟動 AWS Step Function 執行以重新叫用自訂**

AFT 提供在 AFT 管理帳戶中呼叫`aft-invoke-customizations`的 AWS Step Function。該函數的目的是為 AFT 佈建的帳戶重新調用自訂管道。

以下是您可以建立以將輸入傳遞至 `aft-invoke-customizations` AWS Step Function 的事件結構描述 (JSON 格式） 範例。

```
{
  "include": [
    {
      "type": "all"
    },
    {
      "type": "ous",
      "target_value": [ "ou1","ou2"]
    },
    {
      "type": "tags",
      "target_value": [ {"key1": "value1"}, {"key2": "value2"}]
    },
    {
      "type": "accounts",
      "target_value": [ "acc1_ID","acc2_ID"]
    }
  ],

  "exclude": [
    {
      "type": "ous",
      "target_value": [ "ou1","ou2"]
    },
    {
      "type": "tags",
      "target_value": [ {"key1": "value1"}, {"key2": "value2"}]
    },
    {
      "type": "accounts",
      "target_value": [ "acc1_ID","acc2_ID"]
    }
  ]
}
```

 範例事件結構描述顯示您可以選擇要包含在重新叫用程序中或從中排除的帳戶。您可以依組織單位 (OU)、帳戶標籤和帳戶 ID 進行篩選。如果您未套用任何篩選條件並包含陳述式 `"type":"all"`，則會重新叫用所有 AFT 佈建帳戶的自訂。

**注意**  
 如果您的 AWS Control Tower Account Factory for Terraform (AFT) 版本為 1.6.5 或更新版本，您可以使用語法 鎖定巢狀 OUs`OU Name (ou-id-1234`)。如需詳細資訊，請參閱 [GitHub](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/issues/280) 上的下列主題。

 在您填寫事件參數之後，Step Functions 會執行並叫用對應的自訂。AFT 一次最多可以叫用 5 個自訂項目。Step Functions 會等待 和 迴圈，直到符合事件條件的所有帳戶都完成為止。

**步驟 3：監控 AWS Step Function 輸出並監看執行中的 AWS CodePipeline **
+ 產生的 Step Function 輸出包含符合 Step Function 輸入事件來源的帳戶 IDs。
+ 導覽至**開發人員工具**下的 AWS CodePipeline，並檢視帳戶 ID 對應的自訂管道。

## 使用 AFT 帳戶自訂請求追蹤進行故障診斷
<a name="aft-customization-request"></a>

 基於 AWS Lambda 的帳戶自訂工作流程會發出包含目標帳戶和自訂請求 IDs日誌。AFT 可讓您使用 Amazon CloudWatch Logs 追蹤和疑難排解自訂請求，方法是提供 CloudWatch Logs Insights 查詢，您可以使用這些查詢來依目標帳戶或自訂請求 ID 篩選與自訂請求相關的 CloudWatch Logs。如需詳細資訊，請參閱《[Amazon CloudWatch Logs 使用者指南》中的使用 Amazon CloudWatch Logs 分析日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。 *Amazon CloudWatch * 

**使用適用於 AFT 的 CloudWatch Logs Insights**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1.  從導覽窗格中，選擇**日誌**，然後選擇**日誌洞察**。

1.  選擇**查詢**。

1.  在**範例查詢**下，選擇**適用於 Terraform 的帳戶工廠**，然後選取下列其中一個查詢：
   +  **依帳戶 ID 的自訂日誌** 
**注意**  
 請務必將 *"YOUR-ACCOUNT-ID"* 取代為您的目標帳戶 ID。

     ```
     fields @timestamp, log_message.account_id as target_account_id, log_message.customization_request_id as customization_request_id, log_message.detail as detail, @logStream
     | sort @timestamp desc
     | filter log_message.account_id == "YOUR-ACCOUNT-ID" and @message like /customization_request_id/
     ```
   +  **依自訂請求 ID 的自訂日誌** 
**注意**  
 請務必使用自訂請求 ID 取代 *"YOUR-CUSTOMIZATION-REQUEST-ID"*。您可以在 AFT 帳戶佈建架構 AWS Step Functions 狀態機器的輸出中找到自訂請求 ID。如需 AFT 帳戶佈建架構的詳細資訊，請參閱 [AFT 帳戶佈建管道](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provisioning-framework.html) 

     ```
     fields @timestamp, log_message.account_id as target_account_id, log_message.customization_request_id as customization_request_id, log_message.detail as detail, @logStream
     | sort @timestamp desc
     | filter log_message.customization_request_id == "YOUR-CUSTOMIZATION-REQUEST-ID"
     ```

1.  選取查詢之後，請務必選取時間間隔，然後選擇**執行查詢**。