У меня есть лямбда-функция, которая имеет обработчик Python, который отправляет задание AWS Пакетная обработка через 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']}")
Я вижу, как эта лямбда-функция отправляет пакетное задание в CloudWatch регистрирует, но время ожидания ответа всегда возвращается. Я никогда не вижу, чтобы эти задания появлялись в очереди, поэтому я не уверен, где вещи go после их отправки, кажется, что лямбда-тайм-аут всегда истекает до того, как ответ возвращается, у меня мало другого для go на.
Я успешно добавил задание в очередь через AWS CLI, используя те же ARN очереди и определения, которые используются в коде Python Lambda. Это задание можно увидеть в очереди на вкладке «Выполнить» (предположительно, задание будет запущено в какой-то момент в ближайшем будущем).
Отправка задания с помощью AWS CLI возвращается немедленно, поэтому необходимо что-то не так в конфигурации Lambda, препятствующей выполнению задания. Возможно, я не использую правильную роль для Lambda, которая отправляет задание, или у меня есть какие-то другие разрешения, которые не соответствуют истечении времени ожидания? У лямбды есть разрешение на действие batch:SubmitJob
, разрешенное для всех ресурсов.