我想使用 AWS Lambda 函數在編目程式執行完成時自動啟動 AWS Glue 任務。
簡短描述
若要在編目程式執行完成後啟動作業,請建立 AWS Lambda 函式和 Amazon EventBridge 規則。
**注意:**您也可以使用 AWS Glue 工作流程,以在編目程式執行完成時自動啟動作業。如需詳細資訊,請參閱如何在編目程式執行完成時,使用 AWS Glue 工作流程自動啟動作業?
解決方法
先決條件:
您必須具有以下項目:
- AWS Glue 擷取、轉換和載入 (ETL) 作業
- AWS Glue 編目程式
- 具有執行 AWS Glue 作業權限的 Lambda 的 AWS Identity and Access Management (IAM) 角色。例如,為 Lambda 設定服務連結角色,並將 AWSGlueServiceRole 政策附加到該角色。
建立 Lambda 函式
請完成下列步驟:
- 開啟 Lambda console (Lambda 主控台)。
- 選擇 Create function (建立函式)。
- 在 Create function (建立函式) 頁面上,輸入下列資訊:
選擇 Author from scratch (從頭開始撰寫)。
在 Function name (函數名稱) 中,輸入函數的名稱。
在 Runtime (執行時期),選擇 Python 選項。
對於架構,使用預設選項 x86\ _64。
在 Change default execution role (變更預設執行角色) 下,於 Execution role (執行角色),選擇 Use an existing role (使用現有角色)。
在 Existing role (現有角色),選取具有執行 AWS Glue 作業權限的 IAM 角色。
- 選擇 Create function (建立函式)。
- 在函式詳細資料頁面的 Code source (程式碼來源) 下,輸入以下程式碼:
# Set up loggingimport json
import os
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Import Boto 3 for AWS Glue
import boto3
client = boto3.client('glue')
# Variables for the job:
glueJobName = "MyTestJob"
# Define Lambda function
def lambda_handler(event, context):
logger.info('## INITIATED BY EVENT: ')
logger.info(event['detail'])
response = client.start_job_run(JobName = glueJobName)
logger.info('## STARTED GLUE JOB: ' + glueJobName)
logger.info('## GLUE JOB RUN ID: ' + response['JobRunId'])
return response
**注意:**將 MyTestJob 替換為您 AWS Glue ETL 作業的名稱。
- 在 Code source (程式碼來源) 下,選擇 Test (測試)。
- 開啟 AWS Glue console (AWS Glue 主控台),然後確認作業已開始。
若要測試 Lambda 函式,請執行 AWS Glue 編目程式。然後,檢查 AWS Glue ETL 作業的 Jobs run (作業執行) 資源清單。Run status (執行狀態) 應顯示 Starting (啟動中) 或 Running (執行中)。
建立 EventBridge 規則
請完成下列步驟:
- 開啟 EventBridge 主控台。
- 在導覽窗格中,選擇 Rules (規則),然後選擇 Create rule (建立規則)。
- 輸入規則的名稱和描述,然後選取 Next (下一步)。
- Event source (事件來源) 和 Sample event (範例事件) 使用預設值。
- 在 Event pattern (事件模式) 區段下,選取 Custom Patterns (自訂模式) (JSON 編輯器)。
- 在 Event pattern (事件模式) 欄位中輸入以下程式碼:
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
**注意:**將 MyTestCrawl 替換為您 AWS Glue 編目程式的名稱。
- 在 Select targets (選取目標),輸入下列資訊:
在 Target (目標),選取 Lambda function (Lambda 函式)。
在 Function (函式),選取您的 Lambda 函式。
- 選擇 Create (建立)。
若要測試 Lambda 函式和 EventBridge 規則,請執行 AWS Glue 編目程式。然後,檢查 AWS Glue ETL 作業的 Jobs run (作業執行) 資源清單。Run status (執行狀態) 應顯示 Starting (啟動中) 或 Running (執行中)。
相關資訊
建立對 Amazon EventBridge 中事件反應的規則