

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

# 使用 Amazon EventBridge 事件啟動 AWS Glue 工作流程
<a name="starting-workflow-eventbridge"></a>

Amazon EventBridge 也稱為 CloudWatch Events，可讓您自動化 AWS 服務，並自動回應系統事件，例如應用程式可用性問題或資源變更。來自 AWS 服務的事件會以近乎即時的方式交付至 EventBridge。您可編寫簡單的規則，來指示您在意的事件，以及當事件符合規則時所要自動執行的動作。

透過 EventBridge 支援，AWS Glue 可以在事件驅動的架構中作為事件生產者和消費者。對於工作流程，AWS Glue 支援任何類型的 EventBridge 事件作為消費者。最常見的使用案例是 Amazon S3 儲存貯體中的新物件。如果您的資料以不規則或未定義的間隔送達，您可以儘可能接近其到達處理此資料。

**注意**  
AWS Glue 不提供 EventBridge 訊息的保證傳遞。如果 EventBridge 傳送重複的訊息，AWS Glue 不會執行重複資料刪除。您必須根據使用案例來管理冪等性。  
請務必正確設定 EventBridge 規則，以避免傳送不想要的事件。

**開始之前**  
如果您想要使用 Amazon S3 資料事件啟動工作流程，您必須確保將感興趣的 S3 儲存貯體的事件記錄到 AWS CloudTrail 和 EventBridge。若要這麼做，您必須建立 CloudTrail 線索。如需詳細資訊，請參閱[為您的 AWS 帳戶建立追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)。

**使用 EventBridge 事件啟動工作流程**
**注意**  
在下列命令中：  
將 *<workflow-name>* 取代為要指派給工作流程的名稱。
將 *<trigger-name>* 取代為要指派給觸發的名稱。
將 *<bucket-name>* 取代為 Amazon S3 儲存貯體的名稱。
具有有效 AWS 帳戶 ID 的 *<account-id>*。
將 *<region>* 取代為區域的名稱 (如 `us-east-1`)。
將 *<rule-name>* 取代為要指派給 EventBridge 規則的名稱。

1. 確定您具有建立和檢視 EventBridge 規則和目標的 AWS Identity and Access Management (IAM) 許可。下列是您可以連接的範例政策。您可能希望將其範圍限制為對操作和資源進行限制。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "events:PutRule",
           "events:DisableRule",
           "events:DeleteRule",
           "events:PutTargets",
           "events:RemoveTargets",
           "events:EnableRule",
           "events:List*",
           "events:Describe*"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

1. 建立 EventBridge 服務在將事件傳遞至 AWS Glue 時可擔任的 IAM 角色。

   1. 在 IAM 主控台的 **Create role (建立角色)**頁面上，選擇**AWS Service (AWS 服務)**。然後選擇服務 **CloudWatch Events**。

   1. 完成 **Create role (建立角色)** 精靈。精靈會自動連接 `CloudWatchEventsBuiltInTargetExecutionAccess` 和 `CloudWatchEventsInvocationAccess` 政策。

   1. 將下列內嵌策略連接到角色。此政策允許 EventBridge 服務將事件導向至 AWS Glue。

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "glue:notifyEvent"
            ],
            "Resource": [
              "arn:aws:glue:us-east-1:111122223333:workflow/workflow-name"
            ]
          }
        ]
      }
      ```

------

1. 輸入下列命令以建立工作流程。

   如需其他選用命令列參數的相關資訊，請參閱 *AWS CLI 命令參考*中的 [create-workflow](https://docs.aws.amazon.com/cli/latest/reference/glue/create-workflow.html)。

   ```
   aws glue create-workflow --name <workflow-name>
   ```

1. 輸入下列命令為工作流程建立 EventBridge 事件觸發。這將是工作流程的啟動觸發。將 *<actions>* 替換成要執行的動作 (要啟動的任務和爬蟲程式)。

   請參閱 *AWS CLI 命令參考*中的 [create-trigger](https://docs.aws.amazon.com/cli/latest/reference/glue/create-trigger.html) 以取得如何編寫 `actions` 引數程式碼的詳細資訊。

   ```
   aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --actions <actions>
   ```

   如果您希望工作流程由一批事件而非單一 EventBridge 事件觸發，請改為輸入下列命令。

   ```
   aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --event-batching-condition BatchSize=<number-of-events>,BatchWindow=<seconds> --actions <actions>
   ```

   對於 `event-batching-condition` 引數，`BatchSize` 是必要的，而 `BatchWindow` 是選用的。如果忽略 `BatchWindow`，時段會預設為 900 秒，也就是時段大小上限。  
**Example**  

   下列範例會建立觸發，以在三個 EventBridge 事件到達後或第一個 EventBridge 事件到達後五分鐘 (以先到達者為準) 啟動 `eventtest` 工作流程。

   ```
   aws glue create-trigger --workflow-name eventtest --type EVENT --name objectArrival --event-batching-condition BatchSize=3,BatchWindow=300 --actions JobName=test1
   ```

1. 在 Amazon EventBridge 中建立規則。

   1. 在您偏好的文字編輯器中建立規則詳細資訊的 JSON 物件。

      下列範例將 Amazon S3 指定為事件來源、`PutObject` 作為事件名稱，並將儲存貯體名稱作為請求參數。當新物件到達儲存貯體時，此規則會啟動工作流程。

      ```
      {
        "source": [
          "aws.s3"
        ],
        "detail-type": [
          "AWS API Call via CloudTrail"
        ],
        "detail": {
          "eventSource": [
            "s3.amazonaws.com"
          ],
          "eventName": [
            "PutObject"
          ],
          "requestParameters": {
            "bucketName": [
              "<bucket-name>"
            ]
          }
        }
      }
      ```

      若要在新物件到達儲存貯體內的資料夾時啟動工作流程，您可以將下列程式碼替換為 `requestParameters`。

      ```
          "requestParameters": {
            "bucketName": [
              "<bucket-name>"
            ]
            "key" : [{ "prefix" : "<folder1>/<folder2>/*"}}]
        }
      ```

   1. 使用您偏好的工具將規則 JSON 物件轉換為逸出的字串。

      ```
      {\n  \"source\": [\n    \"aws.s3\"\n  ],\n  \"detail-type\": [\n    \"AWS API Call via CloudTrail\"\n  ],\n  \"detail\": {\n    \"eventSource\": [\n      \"s3.amazonaws.com\"\n    ],\n    \"eventName\": [\n      \"PutObject\"\n    ],\n    \"requestParameters\": {\n      \"bucketName\": [\n        \"<bucket-name>\"\n      ]\n    }\n  }\n}
      ```

   1. 執行下列命令以建立 JSON 參數範本，您可以編輯該範本，以指定後續 `put-rule` 命令。將輸出儲存在檔案中。在此範例中，檔案稱為 `ruleCommand`。

      ```
      aws events put-rule --name <rule-name> --generate-cli-skeleton >ruleCommand
      ```

      如需關於 `--generate-cli-skeleton` 參數的詳細資訊，請參閱《*AWS 命令行介面使用者指南*》中的[從 JSON 或 YAML 輸入檔案產生 AWS CLI Skeleton 及輸入參數](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html)。

      輸出檔案現在應該與下列類似。

      ```
      {
          "Name": "",
          "ScheduleExpression": "",
          "EventPattern": "",
          "State": "ENABLED",
          "Description": "",
          "RoleArn": "",
          "Tags": [
              {
                  "Key": "",
                  "Value": ""
              }
          ],
          "EventBusName": ""
      }
      ```

   1. 編輯檔案以選擇性地移除參數，並指定至少 `Name`、`EventPattern` 以及 `State` 參數。對於 `EventPattern` 參數，提供您在上一個步驟中建立的規則詳細資訊提供逸出字串。

      ```
      {
          "Name": "<rule-name>",
          "EventPattern": "{\n  \"source\": [\n    \"aws.s3\"\n  ],\n  \"detail-type\": [\n    \"AWS API Call via CloudTrail\"\n  ],\n  \"detail\": {\n    \"eventSource\": [\n      \"s3.amazonaws.com\"\n    ],\n    \"eventName\": [\n      \"PutObject\"\n    ],\n    \"requestParameters\": {\n      \"bucketName\": [\n        \"<bucket-name>\"\n      ]\n    }\n  }\n}",
          "State": "DISABLED",
          "Description": "Start an AWS Glue workflow upon new file arrival in an Amazon S3 bucket"
      }
      ```
**注意**  
最好在您完成建立工作流程之前，將規則保持停用狀態。

   1. 輸入下列 `put-rule` 命令，該命令會從檔案 `ruleCommand` 中讀取輸入參數。

      ```
      aws events put-rule --name <rule-name> --cli-input-json file://ruleCommand
      ```

      以下輸出表示成功。

      ```
      {
          "RuleArn": "<rule-arn>"
      }
      ```

1. 輸入下列命令將規則連接至目標。目標是 AWS Glue 中的工作流程。將 *<role-name>* 取代為您在此程序開始時建立的角色。

   ```
   aws events put-targets --rule <rule-name> --targets "Id"="1","Arn"="arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>","RoleArn"="arn:aws:iam::<account-id>:role/<role-name>" --region <region>
   ```

   以下輸出表示成功。

   ```
   {
       "FailedEntryCount": 0,
       "FailedEntries": []
   }
   ```

1. 輸入下列命令，確認規則與目標的連線成功。

   ```
   aws events list-rule-names-by-target --target-arn arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>
   ```

   以下輸出表示成功，其中 *<rule-name>* 是您建立的規則名稱。

   ```
   {
       "RuleNames": [
           "<rule-name>"
       ]
   }
   ```

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

1. 選取工作流程，並確認啟動觸發及其動作 (其啟動的任務或爬蟲程式) 顯示在工作流程圖形上。然後繼續 [步驟 3：新增更多觸發](creating_running_workflows.md#workflow-step3) 中的程序。或者使用 AWS Glue API 或 AWS Command Line Interface新增其他元件至工作流程。

1. 完全指定工作流程後，請啟用規則。

   ```
   aws events enable-rule --name <rule-name>
   ```

   工作流程現已就緒，可由 EventBridge 事件或事件批次啟動。

**另請參閱**  
[https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html)
[AWS Glue 中的工作流程概觀](workflows_overview.md)
[在 AWS Glue 中手動建立和建構工作流程](creating_running_workflows.md)