クローラーの実行が完了したときに Lambda 関数を使用して AWS Glue ジョブを自動的に開始する方法を教えてください。

最終更新日: 2020 年 3 月 13 日

クローラーの実行が完了したときに AWS Lambda 関数を使用して、AWS Glue ジョブを自動的に開始したいと考えています。これはどのように実行できますか?

簡単な説明

クローラーの実行が完了したときにジョブを開始するには、AWS Lambda 関数と Amazon CloudWatch Events ルールを作成します。このメソッドを変更して、他の AWS Glue 関数を自動化できます。

注意: AWS Glue ワークフローを使用して、クローラーの実行が完了したときにジョブを自動的に開始することもできます。この方法では、AWS Glue コンソールの [ワークフロー] ページからクローラーを開始する必要があります。詳細については、クローラーの実行が完了したときに AWS Glue ワークフローを使用してジョブを自動的に開始する方法を教えてくださいを参照してください。

解決方法

以下の手順を実行する前に、次のものが用意されていることを確認します。

  • AWS Glue の抽出、変換、およびロード (ETL、Extract, Transform, and Load) ジョブ。
  • AWS Glue クローラー。
  • AWS Glue ジョブを実行するためのアクセス許可が付与された、Lambda の AWS Identity and Access Management (IAM) ロール。たとえば、AWSGlueServiceRole ポリシーがアタッチされている、Lambda のサービスにリンクされたロールをセットアップするなど。

Lambda 関数を作成する

1.    Lambda コンソールを開きます。

2.    [Create function] を選択します。
注: Lambda 関数がない場合、[今すぐ始める] ページが表示されます。[関数の作成] をクリックして次のステップに進みます。

3.    [一から作成] が選択されていることを確認し、次のオプションを設定します。
[名前] に関数の名前を入力します。
[ランタイム] で、Python オプションのいずれかを選択します。
[ロール] に、[既存のロールを選択する] を選択します。
[既存のロール] で、AWS Glue ジョブを実行するアクセス許可が付与されている IAM ロールを選択します。

4.    [Create function] を選択します。

5.    [関数コード] セクションで、次のようなコードを貼り付けます。必ず、[MyTestJob] を、自分の AWS Glue ETL ジョブの名前に置き換えます。

# 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('## TRIGGERED 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.    ページの右上隅で [Save] を選択し、次に [Test] を選択します。

7.    AWS Glue コンソールを開き、ジョブが開始していることを確認します。

CloudWatch Events ルールを作成する

1.    CloudWatch コンソールを開きます。

2.    ナビゲーションペインで [Rules] を選択し、続いて [Create rule] を選択します。

3.    [Event Source] セクションで [Event Pattern] を選択し、Build event pattern to match events by service のラベルがついた要素を選択します。表示されたドロップダウンリストから、[Custom event pattern] を選択します。

4.    [Build custom event pattern] ボックスで、既存のコードを次のコードに置きかえます。必ず、MyTestCrawl を、自分の AWS Glue クローラーの名前に置きかえます。

{
    "detail-type": [
        "Glue Crawler State Change"
    ],
    "source": [
        "aws.glue"
    ],
    "detail": {
        "crawlerName": [
            "MyTestCrawl"
        ],
        "state": [
            "Succeeded"
        ]
    }
}

5.    ページ右側の [Targets] セクションで、[Add target] を選択します。

6.    ドロップダウンリストから、まだ選択されていなければ [Lambda function] を選択します。

7.    [Function] のドロップダウンリストで、Lambda 関数の名前を選択します。

8.    ページの右下隅で、[Configure details] を選択します。

9.    CloudWatch Events ルールの [Name] と [Description] を入力し、[Create rule] を選択します。

Lambda 関数と CloudWatch Events ルールをテストするには、AWS Glue クローラーを実行します。次に、AWS Glue ETL ジョブの [History] タブを確認します。[実行ステータス] に [開始中] または [実行中] と表示されます。

注意: CloudWatch Events は最善努力原則によって出力されます。まれに、イベントの順序が乱れたり、欠落したり、Lambda 関数が実行されない場合があります。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合