Jam*_*ams 3 python amazon-web-services aws-lambda aws-batch
我有一个 Lambda 函数,它有一个 Python 处理程序,可通过客户端向 AWS Batch 提交作业boto3
:
client = boto3.client('batch', 'us-east-1')
def handle_load(event, context):
hasher = hashlib.sha1()
hasher.update(str(time.time()).encode())
job_name = f"job-{hasher.hexdigest()[:10]}"
job_queue = os.environ.get("job_queue")
job_definition = os.environ.get("job_definition")
logger.info(f"Submitting job named '{job_name}' to queue '{job_queue}' "
f"with definition '{job_definition}'")
response = client.submit_job(
jobName=job_name,
jobQueue=job_queue,
jobDefinition=job_definition,
)
logger.info(f"Submission successful, job ID: {response['jobId']}")
Run Code Online (Sandbox Code Playgroud)
我可以看到此 Lambda 函数在 CloudWatch 日志中提交批处理作业,但在响应返回之前它总是超时。我从来没有看到这些作业出现在队列中,所以我不确定它们提交后会去哪里,似乎 Lambda 总是在响应返回之前超时,我没有什么可继续的。
我已使用 Lambda 的 Python 代码中使用的相同队列和定义 ARN,通过 AWS CLI 成功将作业添加到队列中。该作业可以在可运行选项卡下的队列中看到(大概该作业将在不久的将来的某个时刻启动)。
使用 AWS CLI 提交的作业会立即返回,因此 Lambda 配置中一定存在问题,导致作业无法提交。也许我没有为提交作业的 Lambda 使用正确的角色,或者有一些其他权限错误导致超时?Lambda 有权对batch:SubmitJob
所有资源执行允许的操作。
如果 AWS Lambda 函数未连接到 VPC,则默认情况下它会连接到 Internet。这意味着它可以调用驻留在互联网上的AWS API函数。
如果您的 Lambda 函数配置为使用 VPC,则默认情况下它将无法访问 Internet。这对于连接到 VPC 中的其他资源很有用,但如果您希望与 AWS 服务通信,您可以:
因此,如果您的 Lambda 函数不需要连接到 VPC 中的其他资源,您可以断开连接,它应该可以工作。否则,请使用NAT 网关。
归档时间: |
|
查看次数: |
3155 次 |
最近记录: |