为了使用boto3运行作业,documentation声明仅需要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)
并且客户是:
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'),
)
通过Python3执行时,出现错误:
botocore.errorfactory.EntityNotFoundException: An error occurred (EntityNotFoundException) when calling the StartJobRun operation: Failed to start job run due to missing metadata
但是当我从UI和cli(aws glue start-job-run --job-name march15_9
)对同一作业执行相同的操作时,一切正常。
答案 0 :(得分:0)
什么胶水错误日志指示?
您可能在胶粘作业中使用了一些在调用作业时未传递的参数
答案 1 :(得分:0)
我也遇到了同样的错误,问题是将胶水作业的ARN作为JobName传递。通过仅传递胶粘作业的名称来解决。
response = client.start_job_run(
JobName='Glue Job Name not ARN'
)
答案 2 :(得分:0)
根据我的经验,该错误通常表示 找不到工作 。 作业绑定到区域后,名称和区域的组合会唯一地标识一个作业,并且其中任何一个错误(包括小错误类型)都会导致您遇到错误。 例如,我正在使用的作业在us-east-1中,因此以下语句成功执行。
glue_client = boto3.client('glue', region_name='us-east-1')
response = glue_client.start_job_run(
JobName = glue_job_name)
但是,下面的代码段将产生与您相同的错误
glue_client = boto3.client('glue', region_name='us-west-1')
response = glue_client.start_job_run(
JobName = glue_job_name)
botocore.errorfactory.EntityNotFoundException:调用StartJobRun操作时发生错误(EntityNotFoundException):由于缺少元数据而无法启动作业
在上述情况下,通过使用--region参数指定运行cli,检查起来相对容易
类似于: aws胶水start-job-run --job-name march15_9 --region ap-south-1
如果此操作成功运行(因此该区域的确是ap-south-1),则我将在代码中显式设置参数以删除未知因素,并且可以通过将字符串值临时放入代码。
一旦代码使用了硬编码的值,您就可以将它们一一删除,从而找到一个(或几个)需要正确传递的值。
祝一切顺利
P.S。确实,文档是正确的,只需要将JobName设置为参数,我的代码就可以这样工作
答案 3 :(得分:0)
检查胶水作业的名称是否正确写入。我有一个类似的案例,我就是这样解决的。 (例如:Job_01 而不是 Job_01)