CreateFunction - AWS Lambda

CreateFunction

创建 Lambda 函数。要创建函数,需要部署程序包执行角色。部署包是包含函数代码的 .zip 文件存档或容器映像。执行角色授予该函数使用 AWS 服务 的权限,例如用于日志流的 Amazon CloudWatch Logs 和用于请求跟踪的 AWS X-Ray。

如果部署包是容器映像,则可将部署包类型设置为 Image。对于容器映像,代码属性必须在 Amazon ECR 注册表中包含容器映像的 URI。您无需指定处理程序和运行时属性。

如果部署包是 .zip 文件存档,则可将部署包类型设置为 Zip。对于 .zip 文件存档,代码属性会指定 .zip 文件的位置。您还必须指定处理程序和运行时属性。部署包中的代码必须与函数的目标指令集架构兼容(x86-64arm64)。如果未指定架构,则默认值为 x86-64

创建函数时,Lambda 会预置该函数及其支持资源的实例。如果您的函数连接到 VPC,此过程可能需要一分钟左右。在此期间,您无法调用或修改函数。来自 GetFunctionConfiguration 的响应中的 StateStateReasonStateReasonCode 字段指示函数何时可进行调用。有关更多信息,请参阅 Lambda 函数状态

函数具有未发布的版本,并且可以具有已发布的版本和别名。更新函数的代码和配置时,未发布的版本将会更改。已发布版本是函数代码和配置的快照,无法更改。别名是映射到版本的命名资源,并且可以更改为映射到其他版本。使用 Publish 参数,以通过其初始配置创建函数的版本 1

其他参数允许您配置特定于版本和函数级别的设置。稍后可以使用 UpdateFunctionConfiguration 修改特定于版本的设置。函数级别设置同时应用于函数的未发布版本和已发布版本,并且包含标签 (TagResource) 和每函数并发限制 (PutFunctionConcurrency)。

如果部署包是 .zip 文件存档,则可以使用 代码签名 。要为此函数启用代码签名,请指定代码签名配置的 ARN。当用户尝试使用 UpdateFunctionCode部署代码包时,Lambda 会检查代码包是否具有可信发布者的有效签名。代码签名配置包括一组签名配置文件,这些配置文件定义了此函数的可信发布者。

如果另一个 AWS 账户 或 AWS 服务 调用您的函数,请使用 AddPermission 通过创建基于资源的 AWS Identity and Access Management(IAM)policy 授予权限。您可以在函数级别授予版本或别名的权限。

要直接调用函数,请使用 Invoke。要调用您的函数以响应其他 AWS 服务,请创建事件源映射(CreateEventSourceMapping),或者在其他服务中配置函数触发器。有关更多信息,请参阅调用 Lambda 函数

请求语法

POST /2015-03-31/functions HTTP/1.1 Content-type: application/json { "Architectures": [ "string" ], "Code": { "ImageUri": "string", "S3Bucket": "string", "S3Key": "string", "S3ObjectVersion": "string", "ZipFile": blob }, "CodeSigningConfigArn": "string", "DeadLetterConfig": { "TargetArn": "string" }, "Description": "string", "Environment": { "Variables": { "string" : "string" } }, "EphemeralStorage": { "Size": number }, "FileSystemConfigs": [ { "Arn": "string", "LocalMountPath": "string" } ], "FunctionName": "string", "Handler": "string", "ImageConfig": { "Command": [ "string" ], "EntryPoint": [ "string" ], "WorkingDirectory": "string" }, "KMSKeyArn": "string", "Layers": [ "string" ], "LoggingConfig": { "ApplicationLogLevel": "string", "LogFormat": "string", "LogGroup": "string", "SystemLogLevel": "string" }, "MemorySize": number, "PackageType": "string", "Publish": boolean, "Role": "string", "Runtime": "string", "SnapStart": { "ApplyOn": "string" }, "Tags": { "string" : "string" }, "Timeout": number, "TracingConfig": { "Mode": "string" }, "VpcConfig": { "Ipv6AllowedForDualStack": boolean, "SecurityGroupIds": [ "string" ], "SubnetIds": [ "string" ] } }

URI 请求参数

该请求不使用任何 URI 参数。

请求体

请求接受采用 JSON 格式的以下数据。

Architectures

该函数支持的指令集架构。输入具有其中一个有效值(arm64 或 x86_64)的字符串数组。默认值为 x86_64

类型:字符串数组

数组成员:固定数量为 1 项。

有效值:x86_64 | arm64

必需:否

Code

函数的代码。

类型:FunctionCode 对象

必需:是

CodeSigningConfigArn

要为此函数启用代码签名,请指定代码签名配置的 ARN。代码签名配置包括一组签名配置文件,这些配置文件定义了此函数的可信发布者。

类型:字符串

长度约束:最大长度为 200。

模式:arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\d{1}:\d{12}:code-signing-config:csc-[a-z0-9]{17}

必需:否

DeadLetterConfig

死信队列配置,用于指定 Lambda 在处理失败时发送异步事件的队列或主题。有关更多信息,请参阅死信队列

类型:DeadLetterConfig 对象

必需:否

Description

该函数的描述。

类型:字符串

长度约束:最小长度为 0。长度上限为 256。

必需:否

Environment

执行期间可从函数代码访问的环境变量。

类型:Environment 对象

必需:否

EphemeralStorage

函数的 /tmp 目录大小(以 MB 为单位)。默认值为 512,但可以是介于 512 到 10240 MB 之间的任意整数。有关更多信息,请参阅配置短暂存储(控制台)

类型:EphemeralStorage 对象

必需:否

FileSystemConfigs

Amazon EFS 文件系统的连接设置。

类型:FileSystemConfig 对象数组

数组成员:最多 1 个物品。

必需:否

FunctionName

Lambda 函数的名称。

名称格式
  • 函数名称my-function

  • 函数 ARNarn:aws:lambda:us-west-2:123456789012:function:my-function

  • 部分 ARN123456789012:function:my-function

长度约束仅适用于完整 ARN。如果您仅指定函数名称,它的长度限制为 64 个字符。

类型:字符串

长度限制:最小长度为 1。长度上限为 140。

模式:(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-_]+))?

必需:是

Handler

代码中方法的名称,Lambda 可调用该方法来运行您的函数。如果部署包是 .zip 文件归档,则需要使用处理程序。该格式包括文件名,也可以包括命名空间和其他限定符,具体取决于运行时。有关更多信息,请参阅 Lambda 编程模型

类型:字符串

长度限制:最大长度为 128。

模式:[^\s]+

必需:否

ImageConfig

覆盖容器镜像 Dockerfile 中的值的容器镜像配置值

类型:ImageConfig 对象

必需:否

KMSKeyArn

AWS Key Management Service (AWS KMS) 客户托管密钥的 ARN,用于加密函数的环境变量。激活 Lambda SnapStart 后,Lambda 还使用此密钥对函数的快照进行加密。如果您使用容器映像部署函数,Lambda 还会在部署函数后使用此密钥对其进行加密。请注意,此密钥与在 Amazon Elastic Container Registry(Amazon ECR)中用于保护容器映像的密钥不同。如果您未提供客户托管密钥,Lambda 将使用默认服务密钥。

类型:字符串

模式:(arn:(aws[a-zA-Z-]*)?:[a-z0-9-.]+:.*)|()

必需:否

Layers

要添加到函数执行环境中的函数层列表。通过 ARN 指定每一层,包括版本。

类型:字符串数组

长度限制:最小长度为 1。长度上限为 140。

模式:arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\d{12}:layer:[a-zA-Z0-9-_]+:[0-9]+

必需:否

LoggingConfig

该函数的 Amazon CloudWatch Logs 配置设置。

类型:LoggingConfig 对象

必需:否

MemorySize

在运行时 可用于函数的内存 量。提高该函数的内存也会增加它的 CPU 分配。默认值为 128 MB。该值可以是 1 MB 的任意倍数。

类型:整数

有效范围:最小值为 128。最大值为 10240。

必需:否

PackageType

部署程序包的类型。将容器映像设置为 Image,然后将 .zip 文件归档设置为 Zip

类型:字符串

有效值:Zip | Image

必需:否

Publish

设置为 true 以在创建期间发布函数的第一个版本。

类型:布尔值

必需:否

Role

函数的执行角色的 Amazon Resource Name (ARN)。

类型:字符串

模式:arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+

必需:是

Runtime

函数的运行时的标识符。如果部署包是 .zip 文件归档,则需要使用运行时。

以下列表包括已弃用的运行时。有关更多信息,请参阅运行时弃用策略

类型:字符串

有效值:nodejs | nodejs4.3 | nodejs6.10 | nodejs8.10 | nodejs10.x | nodejs12.x | nodejs14.x | nodejs16.x | java8 | java8.al2 | java11 | python2.7 | python3.6 | python3.7 | python3.8 | python3.9 | dotnetcore1.0 | dotnetcore2.0 | dotnetcore2.1 | dotnetcore3.1 | dotnet6 | nodejs4.3-edge | go1.x | ruby2.5 | ruby2.7 | provided | provided.al2 | nodejs18.x | python3.10 | java17 | ruby3.2 | python3.11 | nodejs20.x | provided.al2023 | python3.12 | java21

必需:否

SnapStart

函数的 SnapStart 设置。

类型:SnapStart 对象

必需:否

Tags

要应用于函数的标签列表。

类型:字符串到字符串映射

必需:否

Timeout

Lambda 在停止函数前允许其运行的时长(以秒为单位)。默认值为 3 秒。允许的最大值为 900 秒。有关更多信息,请参阅 Lambda 执行环境

类型:整数

有效范围:最小值为 1。

必需:否

TracingConfig

Mode 设置为 Active,以使用 X-Ray 对传入请求的子集进行采样和跟踪。

类型:TracingConfig 对象

必需:否

VpcConfig

对于与 VPC 中的AWS资源的网络连接,指定 VPC 中的安全组和子网列表。当您将函数连接到 VPC 时,它只能通过该 VPC 访问资源和互联网。有关更多信息,请参阅配置 Lambda 函数以访问 VPC 中的资源

类型:VpcConfig 对象

必需:否

响应语法

HTTP/1.1 201 Content-type: application/json { "Architectures": [ "string" ], "CodeSha256": "string", "CodeSize": number, "DeadLetterConfig": { "TargetArn": "string" }, "Description": "string", "Environment": { "Error": { "ErrorCode": "string", "Message": "string" }, "Variables": { "string" : "string" } }, "EphemeralStorage": { "Size": number }, "FileSystemConfigs": [ { "Arn": "string", "LocalMountPath": "string" } ], "FunctionArn": "string", "FunctionName": "string", "Handler": "string", "ImageConfigResponse": { "Error": { "ErrorCode": "string", "Message": "string" }, "ImageConfig": { "Command": [ "string" ], "EntryPoint": [ "string" ], "WorkingDirectory": "string" } }, "KMSKeyArn": "string", "LastModified": "string", "LastUpdateStatus": "string", "LastUpdateStatusReason": "string", "LastUpdateStatusReasonCode": "string", "Layers": [ { "Arn": "string", "CodeSize": number, "SigningJobArn": "string", "SigningProfileVersionArn": "string" } ], "LoggingConfig": { "ApplicationLogLevel": "string", "LogFormat": "string", "LogGroup": "string", "SystemLogLevel": "string" }, "MasterArn": "string", "MemorySize": number, "PackageType": "string", "RevisionId": "string", "Role": "string", "Runtime": "string", "RuntimeVersionConfig": { "Error": { "ErrorCode": "string", "Message": "string" }, "RuntimeVersionArn": "string" }, "SigningJobArn": "string", "SigningProfileVersionArn": "string", "SnapStart": { "ApplyOn": "string", "OptimizationStatus": "string" }, "State": "string", "StateReason": "string", "StateReasonCode": "string", "Timeout": number, "TracingConfig": { "Mode": "string" }, "Version": "string", "VpcConfig": { "Ipv6AllowedForDualStack": boolean, "SecurityGroupIds": [ "string" ], "SubnetIds": [ "string" ], "VpcId": "string" } }

响应元素

如果此操作成功,则该服务将会发送回 HTTP 201 响应。

服务以 JSON 格式返回的以下数据。

Architectures

该函数支持的指令集架构。架构是具有有效值之一的字符串数组。默认架构值是 x86_64

类型:字符串数组

数组成员:固定数量为 1 项。

有效值:x86_64 | arm64

CodeSha256

函数部署包的 SHA256 哈希。

类型:字符串

CodeSize

函数部署包的大小(以字节为单位)。

类型:长整型

DeadLetterConfig

函数的死信队列。

类型:DeadLetterConfig 对象

Description

函数说明。

类型:字符串

长度约束:最小长度为 0。长度上限为 256。

Environment

函数环境变量。在 AWS CloudTrail 日志中被忽略。

类型:EnvironmentResponse 对象

EphemeralStorage

函数的 /tmp 目录大小(以 MB 为单位)。默认值为 512,但可以是介于 512 到 10240 MB 之间的任意整数。有关更多信息,请参阅配置短暂存储(控制台)

类型:EphemeralStorage 对象

FileSystemConfigs

Amazon EFS 文件系统的连接设置。

类型:FileSystemConfig 对象数组

数组成员:最多 1 个物品。

FunctionArn

函数的 Amazon Resource Name (ARN)。

类型:字符串

模式: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-_]+))?

FunctionName

函数的名称。

类型:字符串

长度限制:最小长度为 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-_]+))?

Handler

Lambda 为开始运行您的函数而调用的函数。

类型:字符串

长度限制:最大长度为 128。

模式:[^\s]+

ImageConfigResponse

函数的镜像配置值。

类型:ImageConfigResponse 对象

KMSKeyArn

用于加密函数的环境变量的 AWS KMS key。激活 Lambda SnapStart 时,此密钥还用于加密您的函数的快照。仅当您配置了客户托管密钥时,才会返回此密钥。

类型:字符串

模式:(arn:(aws[a-zA-Z-]*)?:[a-z0-9-.]+:.*)|()

LastModified

该函数上次更新的日期和时间,采用 ISO-8601 格式 (YYYY-MM-DDThh:mm:ss.sTZD)。

类型:字符串

LastUpdateStatus

上次对函数执行的更新的状态。函数创建完成后,首先设置为 Successful

类型:字符串

有效值:Successful | Failed | InProgress

LastUpdateStatusReason

上次对函数执行更新的原因。

类型:字符串

LastUpdateStatusReasonCode

函数上次更新的原因代码。

类型:字符串

有效值:EniLimitExceeded | InsufficientRolePermissions | InvalidConfiguration | InternalError | SubnetOutOfIPAddresses | InvalidSubnet | InvalidSecurityGroup | ImageDeleted | ImageAccessDenied | InvalidImage | KMSKeyAccessDenied | KMSKeyNotFound | InvalidStateKMSKey | DisabledKMSKey | EFSIOError | EFSMountConnectivityError | EFSMountFailure | EFSMountTimeout | InvalidRuntime | InvalidZipFileException | FunctionError

Layers

函数的

类型:Layer 对象数组

LoggingConfig

该函数的 Amazon CloudWatch Logs 配置设置。

类型:LoggingConfig 对象

MasterArn

对于 Lambda@Edge 函数,为主函数的 ARN。

类型:字符串

模式: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-_]+))?

MemorySize

在运行时 可用于函数的内存 量。

类型:整数

有效范围:最小值为 128。最大值为 10240。

PackageType

部署程序包的类型。将容器映像设置为 Image,然后将 .zip 文件存档设置为 Zip

类型:字符串

有效值:Zip | Image

RevisionId

函数或别名的最新更新版本。

类型:字符串

Role

函数的执行角色。

类型:字符串

模式:arn:(aws[a-zA-Z-]*)?:iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+

Runtime

函数的运行时的标识符。如果部署包是 .zip 文件归档,则需要使用运行时。

以下列表包括已弃用的运行时。有关更多信息,请参阅运行时弃用策略

类型:字符串

有效值:nodejs | nodejs4.3 | nodejs6.10 | nodejs8.10 | nodejs10.x | nodejs12.x | nodejs14.x | nodejs16.x | java8 | java8.al2 | java11 | python2.7 | python3.6 | python3.7 | python3.8 | python3.9 | dotnetcore1.0 | dotnetcore2.0 | dotnetcore2.1 | dotnetcore3.1 | dotnet6 | nodejs4.3-edge | go1.x | ruby2.5 | ruby2.7 | provided | provided.al2 | nodejs18.x | python3.10 | java17 | ruby3.2 | python3.11 | nodejs20.x | provided.al2023 | python3.12 | java21

RuntimeVersionConfig

运行时的 ARN 和发生的任何错误。

类型:RuntimeVersionConfig 对象

SigningJobArn

签名任务的 ARN。

类型:字符串

模式:arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\-])+:([a-z]{2}(-gov)?-[a-z]+-\d{1})?:(\d{12})?:(.*)

SigningProfileVersionArn

签名配置文件版本的 ARN。

类型:字符串

模式:arn:(aws[a-zA-Z0-9-]*):([a-zA-Z0-9\-])+:([a-z]{2}(-gov)?-[a-z]+-\d{1})?:(\d{12})?:(.*)

SnapStart

发布函数版本时,将 ApplyOn 设置为 PublishedVersions 以创建初始化执行环境的快照。有关更多信息,请参阅 Improving startup performance with Lambda SnapStart(使用 Lambda SnapStart 提高启动性能)。

类型:SnapStartResponse 对象

State

函数的当前状态。当状态为 Inactive,您可以通过调用函数来重新激活该函数。

类型:字符串

有效值:Pending | Active | Inactive | Failed

StateReason

函数当前状态的原因。

类型:字符串

StateReasonCode

函数当前状态的原因代码。当代码为 Creating 时,无法调用或修改该函数。

类型:字符串

有效值:Idle | Creating | Restoring | EniLimitExceeded | InsufficientRolePermissions | InvalidConfiguration | InternalError | SubnetOutOfIPAddresses | InvalidSubnet | InvalidSecurityGroup | ImageDeleted | ImageAccessDenied | InvalidImage | KMSKeyAccessDenied | KMSKeyNotFound | InvalidStateKMSKey | DisabledKMSKey | EFSIOError | EFSMountConnectivityError | EFSMountFailure | EFSMountTimeout | InvalidRuntime | InvalidZipFileException | FunctionError

Timeout

Lambda 在停止函数前允许其运行的时长(以秒为单位)。

类型:整数

有效范围:最小值为 1。

TracingConfig

函数的 AWS X-Ray 跟踪配置。

类型:TracingConfigResponse 对象

Version

Lambda 函数的版本。

类型:字符串

长度限制:最小长度为 1。长度上限为 1024。

模式:(\$LATEST|[0-9]+)

VpcConfig

函数的网络配置。

类型:VpcConfigResponse 对象

错误

有关所有操作返回的常见错误的信息,请参阅 常见错误

CodeSigningConfigNotFoundException

指定的代码签名配置不存在。

HTTP 状态代码:404

CodeStorageExceededException

您的 AWS 账户 已超出最大总代码大小。有关更多信息,请参阅 Lambda 限额

HTTP 状态代码:400

CodeVerificationFailedException

代码签名失败,一个或多个签名验证检查不匹配或过期,并且代码签名策略设置为“ENFORCE”。Lambda 阻止部署。

HTTP 状态代码:400

InvalidCodeSignatureException

代码签名未通过完整性检查。如果完整性检查失败,Lambda 会阻止部署,即使代码签名策略设置为 WARN 也是如此。

HTTP 状态代码:400

InvalidParameterValueException

请求中的参数之一无效。

HTTP 状态代码:400

ResourceConflictException

资源已存在,或者其他操作正在进行中。

HTTP 状态代码:409

ResourceNotFoundException

请求中指定的资源不存在。

HTTP 状态代码:404

ServiceException

AWS Lambda 服务遇到了内部错误。

HTTP 状态代码:500

TooManyRequestsException

超出了请求吞吐量限制。有关更多信息,请参阅 Lambda 限额

HTTP 状态代码:429

另请参阅

有关在特定语言的 AWS SDK 中使用此 API 的更多信息,请参阅以下内容: