跳至內容

如何使用 Lambda 函數在編目程式執行完成時自動啟動 AWS Glue 任務?

2 分的閱讀內容
0

我想使用 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 函式

請完成下列步驟:

  1. 開啟 Lambda console (Lambda 主控台)。
  2. 選擇 Create function (建立函式)。
  3. 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 角色。
  4. 選擇 Create function (建立函式)。
  5. 在函式詳細資料頁面的 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 作業的名稱。
  6. Code source (程式碼來源) 下,選擇 Test (測試)。
  7. 開啟 AWS Glue console (AWS Glue 主控台),然後確認作業已開始。

若要測試 Lambda 函式,請執行 AWS Glue 編目程式。然後,檢查 AWS Glue ETL 作業的 Jobs run (作業執行) 資源清單。Run status (執行狀態) 應顯示 Starting (啟動中) 或 Running (執行中)。

建立 EventBridge 規則

請完成下列步驟:

  1. 開啟 EventBridge 主控台
  2. 在導覽窗格中,選擇 Rules (規則),然後選擇 Create rule (建立規則)。
  3. 輸入規則的名稱和描述,然後選取 Next (下一步)。
  4. Event source (事件來源) 和 Sample event (範例事件) 使用預設值。
  5. Event pattern (事件模式) 區段下,選取 Custom Patterns (自訂模式) (JSON 編輯器)。
  6. Event pattern (事件模式) 欄位中輸入以下程式碼:
    {
        "detail-type": [
            "Glue Crawler State Change"
        ],
        "source": [
            "aws.glue"
        ],
        "detail": {
            "crawlerName": [
                "MyTestCrawl"
            ],
            "state": [
                "Succeeded"
            ]
        }
    }
    **注意:**將 MyTestCrawl 替換為您 AWS Glue 編目程式的名稱。
  7. Select targets (選取目標),輸入下列資訊:
    Target (目標),選取 Lambda function (Lambda 函式)。
    Function (函式),選取您的 Lambda 函式。
  8. 選擇 Create (建立)。

若要測試 Lambda 函式和 EventBridge 規則,請執行 AWS Glue 編目程式。然後,檢查 AWS Glue ETL 作業的 Jobs run (作業執行) 資源清單。Run status (執行狀態) 應顯示 Starting (啟動中) 或 Running (執行中)。

相關資訊

建立對 Amazon EventBridge 中事件反應的規則

AWS 官方已更新 5 個月前