【发布时间】:2018-09-13 08:59:34
【问题描述】:
我似乎无法让它工作。我通过 C9 创建了 2 个 lambda。我正在使用 boto3 从另一个调用一个 lambda。通过 C9 似乎一切正常,但是当我发布并尝试通过 API Gateway 访问时,我不断收到“端点请求超时”错误。
我知道这不可能是超时问题,因为我已经设置了我的 yaml 文件以便有足够的时间来执行,并且现在的 lambda 非常简单(只返回一个字符串)
这是我当前的 yaml 文件。我想知道是否可能需要在第二个 yaml 中为 API Gateway 添加某种权限
Lambda1
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
api:
Type: 'AWS::Serverless::Function'
Properties:
Description: ''
Handler: api/lambda_function.lambda_handler
MemorySize: 256
Role: 'arn:aws:iam::820788395625:role/service-role/api_int-role'
Runtime: python3.6
Timeout: 30
VpcConfig:
SecurityGroupIds:
- ...
SubnetIds:
- ...
Policies: AWSLambdaFullAccess
Lambda2
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
api:
Type: 'AWS::Serverless::Function'
Properties:
Description: ''
Handler: api/lambda_function.lambda_handler
MemorySize: 512
Role: 'arn:aws:iam::820788395625:role/service-role/api_int-role'
Runtime: python3.6
Timeout: 15
VpcConfig:
SecurityGroupIds:
- ...
SubnetIds:
- ...
我刚刚将一个 API Gateway 端点直接设置为 Lambda2,它没有返回任何问题。所以...
API 网关 -> Lambda 2(有效) API 网关 -> Lambda 1 -> Lambda 2(不起作用)
因此,由于某种原因,当我想通过 API 网关通过 Lambda 1 调用 Lambda 2 时,它不起作用。
这是调用第二个 Lambda 的代码
import json
import boto3
def lambda_handler(event, context):
print('call boto3 client')
lambda_client = boto3.client('lambda', region_name='us-east-1')
print('boto3 client called')
print('invoke lambda')
env_response = lambda_client.invoke(
FunctionName='cloud9-apiAlpha-api-TBSOYXLVBCLX',
InvocationType='RequestResponse',
Payload=json.dumps(event)
)
print('lambda invoked')
print('env_response')
print(env_response)
print(env_response['Payload'])
print(env_response['Payload'].read())
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Methods': 'POST,GET,OPTIONS,PUT,DELETE',
'Access-Control-Allow-Origin': '*'
},
'body': 'HELLO WORLD!',
'isBase64Encoded': False
}
现在,当我查看日志时,它会打印('invoke lambda'),但随后会停止并超时
【问题讨论】:
-
您的角色是否具有执行另一个 lambda 的适当权限?
api_int-role -
你能告诉我们你如何调用 lambda 的实际代码吗?
-
@AminAhmedKhan 我被告知该角色有权执行另一个 lambda
-
@yorodm 我已经分享了调用第二个 Lambda 的代码
-
如果您遇到超时问题,那么您可以异步调用 lambda 或增加调用 lambda 的超时阈值
标签: amazon-web-services aws-lambda boto3