我想使用 AWS Lambda 函數在編目程式執行完成時自動啟動 AWS Glue 任務。
簡短描述
若要在編目程式執行完成後啟動任務,請建立 AWS Lambda 函數和 Amazon EventBridge 規則。您也可以修改此方法以自動化其他 AWS Glue 函數。
注意:您也可以使用 AWS Glue 工作流程,以在編目程式執行完成時自動啟動任務。此方法需要您從 AWS Glue 主控台的工作流程頁面啟動編目程式。如需詳細資訊,請參閱如何在編目程式執行完成時使用 AWS Glue 工作流程自動啟動任務?
解決方法
在完成下列步驟之前,請確保您具有:
- AWS Glue 擷取、轉換和載入 (ETL) 任務。
- AWS Glue 編目程式。
- 具有執行 AWS Glue 任務許可的 Lambda 的 AWS Identity and Access Management (IAM) 角色。例如,為連接了 AWSGlueServiceRole 政策的 Lambda 設定服務連結角色。
建立 Lambda 函數
1. 開啟 Lambda 主控台。
2. 選擇建立函數。
注意:如果您沒有 Lambda 函數,則會出現入門頁面。選擇建立函數,然後繼續下一步。
3. 確保已選取從頭開始撰寫,然後設定下列選項:
對於名稱,輸入函數的名稱。
對於執行時期,選擇其中一個 Python 選項。
對於架構,使用預設選項 x86\ _64。
對於角色,選取變更預設執行角色下拉式清單,然後選取使用現有角色。
對於現有角色,選取具有執行 AWS Glue 任務許可的 IAM 角色。
4. 選擇建立函數。
5. 在函數程式碼區段中,貼上類似下列的程式碼。確保使用 AWS Glue ETL 任務的名稱取代 MyTestJob。
# Set up logging
import 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
6. 在程式碼編輯 UI 頂端選擇部署,然後選擇測試。
7. 開啟 AWS Glue 主控台並確認任務已開始。
建立 EventBridge 規則
1. 開啟 Amazon EventBridge 主控台。
2. 在導覽窗格中,選擇規則,然後選擇建立規則。
3. 輸入規則的名稱和描述,然後選取下一步。
4. 對事件來源和**「範例事件」使用預設值。在事件模式區段中,選取自訂模式** (JSON 編輯器)。
5. 將下列程式碼複製並貼到事件模式方塊中。確保使用 AWS Glue 編目程式的名稱取代 MyTestCrawl。
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
6. 在選取目標區段中,執行下列動作:
對於目標,選取 Lambda 函數。
對於函數,選取 Lambda 函數的名稱。
7. 選擇建立。
若要測試 Lambda 函數和 EventBridge 規則,請執行 AWS Glue 編目程式。然後,檢查 AWS Glue ETL 任務的「歷史記錄」標籤。執行狀態應顯示啟動中或執行中。
相關資訊
建立對事件做出反應的 Amazon EventBridge 規則