Invoke
调用 Lambda 函数。您可以同步调用函数(并等待响应),也可以异步调用函数。默认情况下,Lambda 会同步调用函数(即 InvocationType 是 RequestResponse)。要异步调用函数,请将 InvocationType 设置为 Event。Lambda 将 ClientContext 对象传递给函数(仅限同步调用)。
对于同步调用,有关函数响应的详细信息(包括错误)包含在响应正文和标题中。对于任一调用类型,您可以在执行日志和跟踪中找到更多信息。
当发生错误时,您的函数可能会被多次调用。重试行为因错误类型、客户端、事件源和调用类型而异。例如,如果您异步调用函数并返回错误,则 Lambda 最多再执行两次该函数。有关更多信息,请参阅 Lambda 中的错误处理和自动重试。
对于异步调用,Lambda 会将事件添加到队列,然后将它们发送到函数。如果您的函数没有足够的容量来跟上队列,事件可能会丢失。有时,您的函数可能会多次收到相同的事件,即使没有发生错误。要保留未处理的事件,请使用死信队列配置函数。
API 响应中的状态代码不反映函数错误。错误代码是为阻止函数执行的错误而预留的,例如权限错误、限额错误或与函数的代码和配置有关的问题。例如,如果运行该函数会导致您超出账户级别(ConcurrentInvocationLimitExceeded)或函数级别(ReservedFunctionConcurrentInvocationLimitExceeded)的并发限制,则 Lambda 将返回 TooManyRequestsException。
对于超时很长的函数,在等待响应的同步调用期间,客户端可能会断开连接。配置您的 HTTP 客户端、软件开发工具包、防火墙、代理或操作系统,以允许针对超时或保持活动设置保持长时间的连接。
此操作需要 lambda:InvokeFunction 操作的权限。有关如何设置跨账户调用权限的详细信息,请参阅向其他账户授予函数访问权。
请求语法
POST /2015-03-31/functions/FunctionName/invocations?Qualifier=Qualifier HTTP/1.1
X-Amz-Invocation-Type: InvocationType
X-Amz-Log-Type: LogType
X-Amz-Client-Context: ClientContext
Payload
    
      URI 请求参数
请求使用以下 URI 参数。
- ClientContext
 - 
               
有关要传递给上下文对象中的函数的调用客户端的 base64 编码数据,最多为 3,583 字节。Lambda 将
ClientContext对象传递给函数(仅限同步调用)。 - FunctionName
 - 
               
Lambda 函数的名称、版本或别名。
名称格式
- 
                     
函数名称 –
my-function(仅限名称)、my-function:v1(具有别名)。 - 
                     
函数 ARN –
arn:aws:lambda:us-west-2:123456789012:function:my-function。 - 
                     
部分 ARN –
123456789012:function:my-function。 
您可以将一个版本号或别名附加到任何格式。长度约束仅适用于完整 ARN。如果您仅指定函数名称,它的长度限制为 64 个字符。
长度限制:最小长度为 1。长度上限为 170。
模式:
(arn:(aws[a-zA-Z-]*)?:lambda:)?([a-z]{2}(-gov)?-[a-z]+-\d{1}:)?(\d{12}:)?(function:)?([a-zA-Z0-9-_\.]+)(:(\$LATEST|[a-zA-Z0-9-_]+))?必需:是
 - 
                     
 - InvocationType
 - 
               
从以下选项中进行选择。
- 
                     
RequestResponse(默认)– 同步调用函数。保持连接打开,直到函数返回响应或超时。API 响应包括函数响应和其他数据。 - 
                     
Event– 异步调用函数。将多次失败的事件发送到函数的死信队列(如果已配置)。API 响应仅包含状态代码。 - 
                     
DryRun– 验证参数值并验证用户或角色是否具有调用函数的权限。 
有效值:
Event | RequestResponse | DryRun - 
                     
 - LogType
 - 
               
设置
Tail以在响应中包含执行日志。仅适用于同步调用的函数。有效值:
None | Tail - Qualifier
 - 
               
指定版本或别名以调用函数的已发布版本。
长度限制:最小长度为 1。长度上限为 128。
模式:
(|[a-zA-Z0-9$_-]+) 
请求正文
请求接受以下二进制数据。
- Payload
 - 
               
您想要作为输入提供到您的 Lambda 函数的 JSON。
您可以直接输入 JSON。例如,
--payload '{ "key": "value" }'。此外,您还可以指定文件路径。例如,--payload file://payload.json。 
响应语法
HTTP/1.1 StatusCode
X-Amz-Function-Error: FunctionError
X-Amz-Log-Result: LogResult
X-Amz-Executed-Version: ExecutedVersion
Payload
    
      响应元素
如果此操作成功,则该服务将会发送回 HTTP 响应。
- StatusCode
 - 
                  
对于成功请求,HTTP 状态代码在 200 范围内。对于
RequestResponse调用类型,状态代码为 200。对于Event调用类型,状态代码为 202。对于DryRun调用类型,状态代码为 204。 
响应将返回以下 HTTP 标头。
- ExecutedVersion
 - 
               
执行的函数的版本。当您调用带有别名的函数时,这将指示别名解析为哪个版本。
长度限制:最小长度为 1。长度上限为 1024。
模式:
(\$LATEST|[0-9]+) - FunctionError
 - 
               
如果存在,则表示函数执行过程中发生错误。响应负载中包含有关错误的详细信息。
 - LogResult
 - 
               
Base64 编码执行日志的最后 4 KB。
 
响应将以下内容作为 HTTP 正文返回。
- Payload
 - 
               
来自函数或错误对象的响应。
 
错误
有关所有操作返回的常见错误的信息,请参阅 常见错误。
- EC2AccessDeniedException
 - 
               
需要额外的权限才能配置 VPC 设置。
HTTP 状态代码:502
 - EC2ThrottledException
 - 
               
AWS Lambda 是由 Amazon EC2 在 Lambda 函数初始化期间使用为函数提供的执行角色进行节流的。
HTTP 状态代码:502
 - EC2UnexpectedException
 - 
               
AWS Lambda 在设置 Lambda 函数时收到意外的 Amazon EC2 客户端异常。
HTTP 状态代码:502
 - EFSIOException
 - 
               
从连接的文件系统读取或向其中写入时发生了错误。
HTTP 状态代码:410
 - EFSMountConnectivityException
 - 
               
Lambda 函数无法与配置的文件系统建立网络连接。
HTTP 状态代码:408
 - EFSMountFailureException
 - 
               
由于权限或配置问题,Lambda 函数无法挂载配置的文件系统。
HTTP 状态代码:403
 - EFSMountTimeoutException
 - 
               
Lambda 函数能够连接到配置的文件系统,但挂载操作超时。
HTTP 状态代码:408
 - ENILimitReachedException
 - 
               
AWS Lambda 无法在 VPC 中创建指定为 Lambda 函数配置一部分的弹性网络接口,因为已达到网络接口限制。有关更多信息,请参阅 Lambda 限额。
HTTP 状态代码:502
 - InvalidParameterValueException
 - 
               
请求中的参数之一无效。
HTTP 状态代码:400
 - InvalidRequestContentException
 - 
               
请求正文无法解析为 JSON。
HTTP 状态代码:400
 - InvalidRuntimeException
 - 
               
运行时或运行时版本不受支持。
HTTP 状态代码:502
 - InvalidSecurityGroupIDException
 - 
               
Lambda 函数 VPC 配置中提供的安全组 ID 无效。
HTTP 状态代码:502
 - InvalidSubnetIDException
 - 
               
Lambda 函数 VPC 配置中提供的子网 ID 无效。
HTTP 状态代码:502
 - InvalidZipFileException
 - 
               
AWS Lambda 无法解压缩部署程序包。
HTTP 状态代码:502
 - KMSAccessDeniedException
 - 
               
Lambda 无法解密环境变量,因为对 AWS KMS 的访问已被拒绝。检查 Lambda 函数的 KMS 权限。
HTTP 状态代码:502
 - KMSDisabledException
 - 
               
Lambda 无法解密环境变量,因为使用的 AWS KMS key 已被禁用。检查 Lambda 函数的 KMS 密钥设置。
HTTP 状态代码:502
 - KMSInvalidStateException
 - 
               
Lambda 无法解密环境变量,因为所使用的 AWS KMS key 的状态对解密无效。检查函数的 KMS 密钥设置。
HTTP 状态代码:502
 - KMSNotFoundException
 - 
               
Lambda 无法解密环境变量,因为找不到 AWS KMS key。检查函数的 KMS 密钥设置。
HTTP 状态代码:502
 - RecursiveInvocationException
 - 
               
Lambda 检测到您的函数在涉及其他 AWS 资源的递归循环中被调用,因而停止了调用您的函数。
HTTP 状态代码:400
 - RequestTooLargeException
 - 
               
请求负载已超出
Invoke请求正文 JSON 输入限额。有关更多信息,请参阅 Lambda 限额。HTTP 状态代码:413
 - ResourceConflictException
 - 
               
资源已存在,或者其他操作正在进行中。
HTTP 状态代码:409
 - ResourceNotFoundException
 - 
               
请求中指定的资源不存在。
HTTP 状态代码:404
 - ResourceNotReadyException
 - 
               
函数处于非活动状态,其 VPC 连接不再可用。等待 VPC 连接重新建立,然后重试。
HTTP 状态代码:502
 - ServiceException
 - 
               
AWS Lambda 服务遇到了内部错误。
HTTP 状态代码:500
 - SnapStartException
 - 
               
afterRestore()运行时挂钩遇到错误。有关更多信息,请查看 Amazon CloudWatch 日志。HTTP 状态代码:400
 - SnapStartNotReadyException
 - 
               
Lambda 正在初始化函数。您可以在函数状态变为
Active时调用该函数。HTTP 状态代码:409
 - SnapStartTimeoutException
 - 
               
Lambda 无法在超时限制内还原快照。
HTTP 状态代码:408
 - SubnetIPAddressLimitReachedException
 - 
               
由于配置的一个或多个子网没有可用的 IP 地址,因此 AWS Lambda 无法为 Lambda 函数设置 VPC 访问。
HTTP 状态代码:502
 - TooManyRequestsException
 - 
               
超出了请求吞吐量限制。有关更多信息,请参阅 Lambda 限额。
HTTP 状态代码:429
 - UnsupportedMediaTypeException
 - 
               
Invoke的内容类型请求体不是 JSON。HTTP 状态代码:415
 
另请参阅
有关在特定语言的 AWS SDK 中使用此 API 的更多信息,请参阅以下内容: