从 Lambda 启动 AWS ECS 任务时端点请求超时
Endpoint request timed out when starting AWS ECS task from Lambda
我正在尝试从 Lambda Api 网关 运行 执行 ECS 任务。但是经常获取 Endpoint 请求超时。我已将默认的 Labmda 超时更改为 5 分钟。但有时仍然会出现超时异常。 有什么方法可以通过 Lambda 运行 ECS 任务而不超时吗?
这是从 Lambda 到 运行 ECS 任务的核心 python 代码
ecs = boto3.client(
'ecs',
region_name=config.AWS_REGION,
aws_access_key_id=config.AWS_ACCESS_KEY_ID,
aws_secret_access_key=config.AWS_SECRET_ACCESS_KEY
)
request_id = str(uuid.uuid1())
ecs.run_task(
cluster='test-cluster',
taskDefinition='test-task',
startedBy=request_id,
launchType='FARGATE',
overrides={
'containerOverrides': [
{
'name': 'test-container',
'environment': [
{
'name': 'request_id',
'value': request_id
}
]
}
]
},
networkConfiguration={
'awsvpcConfiguration': {
'securityGroups': [
'sg-XXXXXXXX',
],
'subnets': [
'subnet-XXXXXXXX',
'subnet-XXXXXXXX',
'subnet-XXXXXXXX'
],
'assignPublicIp': 'ENABLED'
}
}
)
AWS API 网关的硬超时限制为 29 秒。因此,无论您的 lambda 的超时限制如何,如果 API 网关在 29 秒后仍未收到响应,它将 return 超时。
尽管如此,您的 lambda 应该继续运行,这应该足够简单,可以在 cloudwatch 日志中进行验证。
我不确定你想要什么 API 在这种情况下通往 return 的网关,但让 lambda 开始工作和 return 响应 return 可能就足够了=22=] 作业已经开始的网关。
为此,我会让 API 网关调用 Lambda,后者调用 Lambda 运行 ECS 任务。要实现此异步,从 Lambda 到 Lambda 的调用需要是 'Event' 调用类型。
示例:
import boto3
import json
def lambda_handler(event, context):
response = client.invoke(
FunctionName='<ecs_lambda>',
InvocationType='Event',
Payload=json.dumps(event)
)
return { "result": "OK" }
我正在尝试从 Lambda Api 网关 运行 执行 ECS 任务。但是经常获取 Endpoint 请求超时。我已将默认的 Labmda 超时更改为 5 分钟。但有时仍然会出现超时异常。 有什么方法可以通过 Lambda 运行 ECS 任务而不超时吗?
这是从 Lambda 到 运行 ECS 任务的核心 python 代码
ecs = boto3.client(
'ecs',
region_name=config.AWS_REGION,
aws_access_key_id=config.AWS_ACCESS_KEY_ID,
aws_secret_access_key=config.AWS_SECRET_ACCESS_KEY
)
request_id = str(uuid.uuid1())
ecs.run_task(
cluster='test-cluster',
taskDefinition='test-task',
startedBy=request_id,
launchType='FARGATE',
overrides={
'containerOverrides': [
{
'name': 'test-container',
'environment': [
{
'name': 'request_id',
'value': request_id
}
]
}
]
},
networkConfiguration={
'awsvpcConfiguration': {
'securityGroups': [
'sg-XXXXXXXX',
],
'subnets': [
'subnet-XXXXXXXX',
'subnet-XXXXXXXX',
'subnet-XXXXXXXX'
],
'assignPublicIp': 'ENABLED'
}
}
)
AWS API 网关的硬超时限制为 29 秒。因此,无论您的 lambda 的超时限制如何,如果 API 网关在 29 秒后仍未收到响应,它将 return 超时。
尽管如此,您的 lambda 应该继续运行,这应该足够简单,可以在 cloudwatch 日志中进行验证。
我不确定你想要什么 API 在这种情况下通往 return 的网关,但让 lambda 开始工作和 return 响应 return 可能就足够了=22=] 作业已经开始的网关。
为此,我会让 API 网关调用 Lambda,后者调用 Lambda 运行 ECS 任务。要实现此异步,从 Lambda 到 Lambda 的调用需要是 'Event' 调用类型。
示例:
import boto3
import json
def lambda_handler(event, context):
response = client.invoke(
FunctionName='<ecs_lambda>',
InvocationType='Event',
Payload=json.dumps(event)
)
return { "result": "OK" }