現在、AWS Glueジョブを使用してデータをRedShiftにロードしていますが、そのロード後、おそらくAWSLambda関数を使用していくつかのデータクレンジングタスクを実行する必要があります。 Glueジョブの最後にLambda関数をトリガーする方法はありますか? Lambda関数はSNSメッセージを使用してトリガーできますが、Glueジョブの最後にSNSを送信する方法が見つかりませんでした。
いいえ。現在、Glueジョブの終了時にラムダ関数をトリガーすることはできません。これは、このトリガーがLambdaのAWSによってまだ提供されていないためです。ラムダ関数を作成した後にAWSラムダトリガーのリストを見ると、ほとんどのAWSサービスがトリガーとして含まれていますが、AWSGlueは含まれていないことがわかります。したがって、現時点では不可能ですが、将来的には可能性があります。
ただし、ラムダpythonスクリプトを使用して、グルースクリプトのフローを実際に制御できることをお伝えしたいと思います(Pythonを使用して実行しました。これをサポートする他の言語があると確信しています)。私の使用例は、S3バケットにオブジェクトをアップロードするたびに、オブジェクトファイルを読み取ってグルージョブを開始するラムダ関数トリガーを取得することでした。グルージョブのステータスが完了すると、ファイルをに書き戻します。このLambda関数にリンクされたS3バケット。
@oreoluwaは正しいです。これは、CloudwatchEventsを使用して実行できます。
Cloudwatchダッシュボードから:
ラムダで開催されるイベントの形式は次のとおりです。
{
'version': '0',
'id': 'a9bc90be-xx00-03e0-9bc5-a0a0a0a0a0a0',
'detail-type': 'GlueJobStateChange',
'source': 'aws.glue',
'account': 'xxxxxxxxxx',
'time': '2018-05-10T16: 17: 03Z',
'region': 'us-east-2',
'resources': [],
'detail': {
'jobName': 'xxxx_myjobname_yyyy',
'severity': 'INFO',
'state': 'SUCCEEDED',
'jobRunId': 'jr_565465465446788dfdsdf546545454654546546465454654',
'message': 'Jobrunsucceeded'
}
}
AWS GlueがPythonのサポートを開始したので、おそらく以下のパスに従って、目的を達成できます。以下のサンプルスクリプトは、その方法を示しています-
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import boto3 ## Step-2
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
## Do all ETL stuff here
## Once the ETL completes
lambda_client = boto3.client('lambda') ## Step-3
response = lambda_client.invoke(FunctionName='string') ## Step-4
Glueジョブの作成中に使用しているロールに、ラムダ関数を呼び出す権限があることを確認してください。
ラムダについては、Boto3のドキュメントを参照してください ここ 。
@aceと@adeelにはソリューションの一部がありますが、次のイベントパターンでCloudWatch Ruleを作成することで、これを解決できます。
{
"source": [
"aws.glue"
],
"detail-type": [
"Glue Job State Change"
],
"detail": {
"jobName": [
"<YourJobName>"
],
"state": [
"SUCCEEDED"
]
}
}
ラムダはS3プットでトリガーできます。最後の接着ジョブとして、ダミーファイルをS3に配置できます。これにより、ラムダがトリガーされます。私はこれをテストしました。