

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

# 使用 AWS SDK 服務整合收集 Amazon S3 儲存貯體資訊
<a name="tutorial-gather-s3-info"></a>

本教學課程說明如何執行與 Amazon Simple Storage Service 的 [AWS SDK 整合](supported-services-awssdk.md)。您在本教學課程中建立的狀態機器會收集 Amazon S3 儲存貯體的相關資訊，然後列出儲存貯體以及目前區域中每個儲存貯體的版本資訊。

## 步驟 1：建立狀態機器
<a name="aws-sdk-create-state-machine"></a>

使用 Step Functions 主控台，您將建立一個狀態機器，其中包含列出目前帳戶和區域中所有 Amazon S3 儲存貯體`Task`的狀態。然後，您將新增另一個`Task`狀態來叫用 `[HeadBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html)` API，以驗證傳回的儲存貯體是否可以在目前區域中存取。如果無法存取儲存貯體，`HeadBucket`API 呼叫會傳回`S3.S3Exception`錯誤。您將包含一個`Catch`區塊來擷取此例外狀況，並將 `Pass` 狀態做為備用狀態。

1. 開啟 [Step Functions 主控台](https://console.aws.amazon.com/states/home)，從功能表中選擇**狀態機器**，然後選擇**建立狀態機器**。

1. 選擇**從空白建立**。

1. 為您的狀態機器命名，然後選擇**繼續**在 Workflow Studio 中編輯您的狀態機器。

1. 在本教學課程中，您將在 中撰寫狀態機器的 [Amazon States Language](concepts-amazon-states-language.md)(ASL) 定義[程式碼編輯器](workflow-studio.md#wfs-interface-code-editor)。若要這樣做，請選擇**程式碼**。

1. 移除現有的樣板程式碼，並貼上下列狀態機器定義。

   ```
   {
     "Comment": "A description of my state machine",
     "StartAt": "ListBuckets",
     "States": {
       "ListBuckets": {
         "Type": "Task",
         "Parameters": {},
         "Resource": "arn:aws:states:::aws-sdk:s3:listBuckets",
         "Next": "Map"
       },
       "Map": {
         "Type": "Map",
         "ItemsPath": "$.Buckets",
         "ItemProcessor": {
           "ProcessorConfig": {
             "Mode": "INLINE"
           },
           "StartAt": "HeadBucket",
           "States": {
             "HeadBucket": {
               "Type": "Task",
               "ResultPath": null,
               "Parameters": {
                 "Bucket.$": "$.Name"
               },
               "Resource": "arn:aws:states:::aws-sdk:s3:headBucket",
               "Catch": [
                 {
                   "ErrorEquals": [
                     "S3.S3Exception"
                   ],
                   "ResultPath": null,
                   "Next": "Pass"
                 }
               ],
               "Next": "GetBucketVersioning"
             },
             "GetBucketVersioning": {
               "Type": "Task",
               "End": true,
               "Parameters": {
                 "Bucket.$": "$.Name"
               },
               "ResultPath": "$.BucketVersioningInfo",
               "Resource": "arn:aws:states:::aws-sdk:s3:getBucketVersioning"
             },
             "Pass": {
               "Type": "Pass",
               "End": true,
               "Result": {
                 "Status": "Unknown"
               },
               "ResultPath": "$.BucketVersioningInfo"
             }
           }
         },
         "End": true
       }
     }
   }
   ```

1. 為您的狀態機器指定名稱。若要這樣做，請選擇 **MyStateMachine** 預設狀態機器名稱旁的編輯圖示。然後，在**狀態機器組態**中，在**狀態機器名稱方塊中指定名稱**。

   針對本教學課程，輸入名稱 **Gather-S3-Bucket-Info-Standard**。

1. （選用） 在**狀態機器組態**中，指定其他工作流程設定，例如狀態機器類型及其執行角色。

   在**狀態機器設定**中保留所有預設選擇。

   如果您[先前已建立具有狀態機器正確許可的 IAM 角色](procedure-create-iam-role.md)，並想要使用它，請在**許可**中，選取**選擇現有角色**，然後從清單中選擇角色。或選取**輸入角色 ARN**，然後為該 IAM 角色提供 ARN。

1. 在**確認角色建立**對話方塊中，選擇**確認**以繼續。

   您也可以選擇**檢視角色設定**以返回**狀態機器組態**。
**注意**  
如果您刪除 Step Functions 建立的 IAM 角色，Step Functions 稍後無法重新建立該角色。同樣地，如果您修改角色 （例如，從 IAM 政策中的主體移除 Step Functions)，Step Functions 稍後無法還原其原始設定。

   在[步驟 2](#aws-sdk-add-iam-permissions) 中，您會將缺少的許可新增至狀態機器角色。

## 步驟 2：新增必要的 IAM 角色許可
<a name="aws-sdk-add-iam-permissions"></a>

若要收集目前區域中 Amazon S3 儲存貯體的相關資訊，您必須提供狀態機器存取 Amazon S3 儲存貯體所需的許可。

1. 在狀態機器頁面上，選擇 **IAM 角色 ARN** 以開啟狀態機器角色的角色****頁面。

1. 選擇**新增許可**，然後選擇**建立內嵌政策**。

1. 選擇 **JSON** 索引標籤，然後將下列許可貼到 JSON 編輯器。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:ListAllMyBuckets",
                   "s3:ListBucket",
                   "s3:GetBucketVersioning"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

1. 選擇**檢閱政策**。

1. 在**檢閱政策下**，針對政策**名稱**，輸入 **s3-bucket-permissions**。

1. 選擇 **Create policy** (建立政策)。

## 步驟 3：執行標準狀態機器執行
<a name="aws-sdk-run-standard"></a>

1. 在 **Gather-S3-Bucket-Info-Standard** 頁面上，選擇**開始執行**。

1. 在**開始執行**對話方塊中，執行下列動作：

   1. （選用） 輸入自訂執行名稱以覆寫產生的預設值。
**非 ASCII 名稱和記錄**  
Step Functions 接受包含非 ASCII 字元的狀態機器、執行、活動和標籤名稱。由於這類字元會阻止 Amazon CloudWatch 記錄資料，因此我們建議您僅使用 ASCII 字元，以便您可以追蹤 Step Functions 指標。

   1. 選擇 **Start execution (開始執行)**。

   1. Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為*執行詳細資訊*頁面。在此頁面上，您可以在執行進行時或完成後檢閱執行結果。

      若要檢閱執行結果，請在**圖形檢視**中選擇個別狀態，然後選擇[步驟詳細資訊](concepts-view-execution-details.md#exec-details-intf-step-details)窗格上的個別索引標籤，分別檢視每個狀態的詳細資訊，包括輸入、輸出和定義。如需您可以在執行詳細資訊頁面上檢視之*執行資訊的詳細資訊*，請參閱 [執行詳細資訊概觀](concepts-view-execution-details.md#exec-details-interface-overview)。

## 步驟 4：執行快速狀態機器執行
<a name="aws-sdk-run-express"></a>

1. 使用[步驟 1 ](#aws-sdk-create-state-machine)中提供的狀態機器定義建立快速狀態機器。請確定您也包含必要的 IAM 角色許可，如[步驟 2](#aws-sdk-add-iam-permissions) 所述。
**提示**  
若要區分您先前建立的標準機器，請將快速狀態機器命名為 **Gather-S3-Bucket-Info-Express**。

1. 在 **Gather-S3-Bucket-Info-Standard** 頁面上，選擇**開始執行**。

1. 在**開始執行**對話方塊中，執行下列動作：

   1. （選用） 輸入自訂執行名稱以覆寫產生的預設值。
**非 ASCII 名稱和記錄**  
Step Functions 接受包含非 ASCII 字元的狀態機器、執行、活動和標籤名稱。由於這類字元會阻止 Amazon CloudWatch 記錄資料，因此我們建議您僅使用 ASCII 字元，以便您可以追蹤 Step Functions 指標。

   1. 選擇 **Start execution (開始執行)**。

   1. Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為*執行詳細資訊*頁面。在此頁面上，您可以在執行進行時或完成後檢閱執行結果。

      若要檢閱執行結果，請在**圖形檢視**中選擇個別狀態，然後選擇[步驟詳細資訊](concepts-view-execution-details.md#exec-details-intf-step-details)窗格上的個別索引標籤，分別檢視每個狀態的詳細資訊，包括輸入、輸出和定義。如需您可以在執行詳細資訊頁面上檢視之*執行資訊的詳細資訊*，請參閱 [執行詳細資訊概觀](concepts-view-execution-details.md#exec-details-interface-overview)。