使用 Python 从 Lambda 启动 AWS Glue 作业?

Starting an AWS Glue job from Lambda using Python?

我正在尝试在将新文件放入 S3 存储桶时通过 Lambda 启动 AWS Glue 作业 (Python shell)。我有 Glue 作业设置,如果我手动 运行 它会按预期运行。我认为从 S3 创建触发的 Lambda 触发 Glue 作业会很简单。到目前为止,我已经创建了 Lambda,它会在创建 S3 文件时执行 运行,但是它不想实际启动 Glue 作业,也不想提供任何关于它为何无法启动的反馈。下面是我在 Lambda 中使用的 Python 3.8 代码:

import boto3
from botocore.exceptions import ClientError

def handler(event, context):
   glue_client = boto3.client('glue')
   job_name = 'my-glue-job-name'
   
   try:
      print('Attempting to start glue job:', job_name)
      job_run_id = glue_client.start_job_run(JobName=job_name)
      print('Running Glue job, id:', job_run_id)
      return job_run_id
   except ClientError as e:
      print('>>>>>error 1:', e)
      raise Exception( "boto3 client error in run_glue_job: " + e.__str__())
   except Exception as e:
      print('>>>>>error 2:', e)
      raise Exception( "Unexpected error in run_glue_job: " + e.__str__())

当我检查 Lambda 的日志时,我可以看到 lambda 在 S3 中创建文件时启动。我可以看到打印条目 'Attempting to start glue job: my-glue-job-name'。这就是我所看到的。我没有看到 'Running Glue job, id: xxx' 打印的日志条目,也没有看到任何错误消息。同样,Glue 作业日志没有显示正在启动的迹象。

我已经为 Lambda 提供了 AWSGlueServiceRole 策略,所以我认为这不是权限问题。

欢迎任何想法。

您能否与我们分享您设置并附加到该功能的服务相关角色?

通过阅读 boto3 Glue 规范和 AWS 文档,需要满足以下条件:

An AWS Identity and Access Management (IAM) role for Lambda with permission to run AWS Glue jobs. For example, set up a service-linked role for Lambda that has the AWSGlueServiceRole policy attached to it.

事实证明,这根本不是 IAM 权限问题,而是 VPC 问题。我们所有的 Glue 服务都需要添加一个 VPC 端点,以允许从我们帐户中的其他服务进行访问。一旦完成,它就会按预期工作。