Avi*_*ava 5 python python-3.x boto3 aws-glue
为了使用 boto3 运行作业,仅需要文档说明。JobName但是,我的代码:
def start_job_run(self, name):
print("The name of the job to be run via client is: {}".format(name))
self.response_de_start_job = self.client.start_job_run(
JobName=name
)
print(self.response_de_start_job)
Run Code Online (Sandbox Code Playgroud)
客户是:
self.client = boto3.client(
'glue',
region_name='ap-south-1',
aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY'),
)
Run Code Online (Sandbox Code Playgroud)
当通过Python3执行时,给出错误:
botocore.errorfactory.EntityNotFoundException: An error occurred (EntityNotFoundException) when calling the StartJobRun operation: Failed to start job run due to missing metadata
Run Code Online (Sandbox Code Playgroud)
但是当我从 UI 和 cli( ) 对同一个作业执行相同的操作时aws glue start-job-run --job-name march15_9,它工作正常。
小智 6
根据我的经验,该错误通常意味着找不到工作。一旦作业绑定到区域,名称和区域的组合就会唯一地标识一个作业,其中任何一个错误(包括微小的错误)都将导致您遇到错误(d)。例如,我正在使用的作业位于 us-east-1 中,因此以下语句执行成功。
glue_client = boto3.client('glue', region_name='us-east-1')
response = glue_client.start_job_run(
JobName = glue_job_name)
Run Code Online (Sandbox Code Playgroud)
但是,下面的代码片段将产生与您相同的错误
glue_client = boto3.client('glue', region_name='us-west-1')
response = glue_client.start_job_run(
JobName = glue_job_name)
Run Code Online (Sandbox Code Playgroud)
botocore.errorfactory.EntityNotFoundException:调用 StartJobRun 操作时发生错误 (EntityNotFoundException):由于缺少元数据,无法启动作业运行
在上面的例子中,通过使用 --region 参数指定运行 cli 来检查相对容易
类似于: awsgluestart-job-run --job-name March15_9 --region ap-south-1
如果运行成功(因此该区域确实是 ap-south-1),我会在代码中显式设置参数以删除未知因素,并且您可以临时将字符串值放入代码中,而不是通过环境变量传递它们。
一旦代码使用硬编码值,您可以将它们一一删除,从而找到一个(或几个)需要正确传递的值。
一切顺利
PS 事实上,文档是正确的,只需将 JobName 设置为参数,我有这样工作的代码
| 归档时间: |
|
| 查看次数: |
19532 次 |
| 最近记录: |