AWS::Serverless::Function - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS::Serverless::Function

建立 AWS Lambda 函數、 AWS Identity and Access Management (IAM) 執行角色,以及觸發函數的事件來源對應。

資AWS::Serverless::Function源也支援 Metadata resource 屬性,因此您可以指示建置應用程式所 AWS SAM 需的自訂執行階段。如需建立自訂執行階段的詳細資訊,請參閱〈〉使用自訂執行階段建置 Lambda 函數 AWS SAM

注意

當您部署到時 AWS CloudFormation,將您的 AWS SAM 資源 AWS SAM 轉換為 AWS CloudFormation 資源。如需詳細資訊,請參閱 產生的 AWS CloudFormation 資源 AWS SAM

語法

若要在 AWS Serverless Application Model (AWS SAM) 範本中宣告此實體,請使用下列語法。

屬性

Architectures

函數的指令集架構。

如需有關此屬性的詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 指令集架構

有效值:其中一個x86_64arm64

類型:清單

必要:否

預設x86_64

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的Architectures屬性。

AssumeRolePolicyDocument

添加 AssumeRolePolicyDocument 為此函數創建Role的默認值。如果未指定此屬性,請為此函數 AWS SAM 新增預設假設角色。

類型:JSON

必要:否

AWS CloudFormation 兼容性:此屬性類似於AWS::IAM::Role資源的AssumeRolePolicyDocument屬性。 AWS SAM 將此屬性新增至此函數產生的 IAM 角色。如果為此函數提供角色的 Amazon 資源名稱 (ARN),則此屬性不會執行任何動作。

AutoPublishAlias

Lambda 別名的名稱。如需 Lambda 別名的詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 函數別名。如需使用此性質的範例,請參閱逐步部署無伺服器應用程式 AWS SAM

AWS SAM 設置此屬性時生成AWS::Lambda::VersionAWS::Lambda::Alias資源。如需有關此案例的資訊,請參閱AutoPublishAlias 屬性已指定。如需有關已產生 AWS CloudFormation 資源的一般資訊,請參閱產生的 AWS CloudFormation 資源 AWS SAM

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

AutoPublishAliasAllProperties

指定何時創建一AWS::Lambda::Version個新的。何時true,會在修改 Lambda 函數中的任何屬性時建立新的 Lambda 版本。如果false,只有在修改下列任何屬性時,才會建立新的 Lambda 版本:

  • Environment, MemorySize, 或 SnapStart.

  • 導致Code屬性更新的任何變更,例如CodeDictImageUri、或InlineCode

需要AutoPublishAlias定義此屬性。

如果AutoPublishSha256也指定,則其行為優先於AutoPublishAliasAllProperties: true

類型:布林值

必要:否

預設值false

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

AutoPublishCodeSha256

使用時,此字串會與CodeUri值搭配使用,以判斷是否需要發行新的 Lambda 版本。此屬性通常用於解決以下部署問題:部署套件存放在 Amazon S3 位置,並由具有更新 Lambda 函數程式碼的新部署套件取代,但該CodeUri屬性保持不變 (與新的部署套件上傳到新 Amazon S3 位置並變更為新位置相反)。CodeUri

這個問題是由具有下列特性的 AWS SAM 範本所標示:

  • DeploymentPreference物件已配置為漸進式部署 (如中所述逐步部署無伺服器應用程式 AWS SAM)

  • AutoPublishAlias容已設定,且不會在部署之間變更

  • CodeUri容已設定,且不會在部署之間變更。

在這個案例中,更新會AutoPublishCodeSha256導致成功建立新的 Lambda 版本。不過,將無法辨識部署到 Amazon S3 的新函數程式碼。若要辨識新的函數程式碼,請考慮在 Amazon S3 儲存貯體中使用版本控制。指定 Lambda 函數的Version屬性,並將儲存貯體設定為永遠使用最新的部署套件。

在這個案例中,若要成功觸發逐步部署,您必須提供的唯一值AutoPublishCodeSha256

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

CodeSigningConfigArn

AWS::Lambda::CodeSigningConfig資源的 ARN,用於啟用此功能的代碼簽名。如需程式碼簽章的詳細資訊,請參閱為您的應用程式設定 AWS SAM 程式碼簽章

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的CodeSigningConfigArn屬性。

CodeUri

函數的程式碼。接受的值包括:

  • 該函數的 Amazon S3 URI。例如 s3://bucket-123456789/sam-app/1234567890abcdefg

  • 函數的本機路徑。例如 hello_world/

  • FunctionCode 物件。

注意

如果您提供函數的 Amazon S3 URI 或FunctionCode物件,則必須參考有效的 Lambda 部署套件。

如果您提供本機檔案路徑,請使 AWS SAMCLI用在部署時上傳本機檔案。如需進一步了解,請參閱如何在部署時上傳本地文件 AWS SAMCLI

如果在CodeUri屬性中使用內置函數, AWS SAM 將無法正確解析值。請考慮改用AWS::Language擴充功能轉換

類型:[字串 |FunctionCode]

必要:有條件限制。當設定PackageType為時Zip,需要其中一InlineCodeCodeUri或。

AWS CloudFormation 兼容性:此屬性類似於AWS::Lambda::Function資源的 Code屬性。巢狀 Amazon S3 屬性的命名方式不同。

DeadLetterQueue

設定亞馬遜簡單通知服務 (Amazon SNS) 主題或亞 Amazon Simple Queue Service (Amazon SQS) 佇列,Lambda 會在其中傳送無法處理的事件。如需有關無效字母佇列功能的詳細資訊,請參閱開發人員指南中的無效字母佇列。AWS Lambda

注意

如果 Lambda 函數的事件來源是 Amazon SQS 佇列,請為來源佇列設定無效字母佇列,而不是 Lambda 函數。您為函數設定的無效字母佇列會用於函數的非同步叫用佇列,而不是用於事件來源佇列

類型:地圖 | DeadLetterQueue

必要:否

AWS CloudFormation 兼容性:此屬性類似於AWS::Lambda::Function資源的DeadLetterConfig屬性。 AWS CloudFormation 在類型是從衍生而來的TargetArn,而在中, AWS SAM 您必須將類型與TargetArn.

DeploymentPreference

啟用漸進式 Lambda 部署的設定。

如果指定了DeploymentPreference對象,則 AWS SAM 創建一個AWS::CodeDeploy::Application被調用ServerlessDeploymentApplication(每個堆棧一個),一個AWS::CodeDeploy::DeploymentGroup被調<function-logical-id>DeploymentGroup用和一個AWS::IAM::Role調用CodeDeployServiceRole

類型:DeploymentPreference

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

另請參閱:如需此性質的詳細資訊,請參閱逐步部署無伺服器應用程式 AWS SAM

Description

函數的敘述。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的Description屬性。

Environment

執行階段環境的組態。

類型Environment

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的Environment屬性。

EphemeralStorage

一個物件,指定您的 Lambda 函數可用的磁碟空間 (以 MB 為單位) /tmp

如需有關此屬性的詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 執行環境

類型:EphemeralStorage

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的EphemeralStorage屬性。

EventInvokeConfig

描述事件的物件叫用 Lambda 函數上的組態。

類型:EventInvokeConfiguration

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

Events

指定觸發此函數的事件。事件包含一個類型和一組依賴於類型的屬性。

類型:EventSource

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

FileSystemConfigs

指定 Amazon 彈性檔案系統 (Amazon EFS) 檔案系統連線設定的FileSystemConfig物件清單。

如果您的範本包含AWS::EFS::MountTarget資源,您還必須指定DependsOn資源屬性,以確保在函數之前建立或更新掛載目標。

類型:清單

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的FileSystemConfigs屬性。

FunctionName

函數名稱。如果您未指定名稱,則會為您產生唯一的名稱。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的FunctionName屬性。

FunctionUrlConfig

描述函數 URL 的物件。函數 URL 是一個 HTTPS 端點,您可以使用它來調用您的函數。

如需詳細資訊,請參閱AWS Lambda 開發人員指南中的函式 URL

類型:FunctionUrlConfig

必要:否

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

Handler

程式碼中呼叫以開始執行的函數。只有在屬性設定為時,才需要此PackageType屬性Zip

類型:字串

必要:有條件

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的Handler屬性。

ImageConfig

用來設定 Lambda 容器映像設定的物件。如需詳細資訊,請參閱AWS Lambda 開發人員指南中的搭配 Lambda 使用容器映像

類型:ImageConfig

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的ImageConfig屬性。

ImageUri

用於 Lambda 函數容器映像的 Amazon Elastic Container Registry (Amazon ECR) 存儲庫的 URI。只有在屬性設定為時,此PackageType屬性才適用Image,否則會忽略此屬性。如需詳細資訊,請參閱AWS Lambda 開發人員指南中的搭配 Lambda 使用容器映像

注意

如果內PackageType容設定為Image,則ImageUri為必要項目,或者您必須使用 AWS SAM 範本檔案中的必要Metadata項目來建置應用程式。如需詳細資訊,請參閱 默認構建 AWS SAM

使用必要Metadata條目構建應用程序的優先級高於ImageUri,因此,如果同時指定兩者,則將ImageUri被忽略。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::FunctionCode數據類型的ImageUri屬性。

InlineCode

直接在範本中撰寫的 Lambda 函數程式碼。只有在屬性設定為時,此PackageType屬性才適用Zip,否則會忽略此屬性。

注意

如果將PackageType內容設定為 Zip (預設值),則需要其中一InlineCodeCodeUri或。

類型:字串

必要:有條件

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::FunctionCode數據類型的ZipFile屬性。

KmsKeyArn

Lambda 用來加密和解密函數環境變數的 AWS Key Management Service (AWS KMS) 金鑰的 ARN。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的KmsKeyArn屬性。

Layers

這個函數應該使用的 LayerVersion ARN 的列表。此處指定的順序是執行 Lambda 函數時匯入的順序。

類型:清單

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的Layers屬性。

LoggingConfig

該功能的 Amazon CloudWatch 日誌配置設置。

類型:LoggingConfig

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的LoggingConfig屬性。

MemorySize

每次呼叫函式所配置的記憶體大小 (以 MB 為單位)。

類型:整數

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的MemorySize屬性。

PackageType

Lambda 函數的部署套件類型。如需詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 部署套件

備註

1. 如果將此屬性設定為 Zip (預設值),則會InlineCode套用CodeUri或,並忽ImageUri略。

2. 如果將此屬性設定為Image,則僅ImageUri套用,CodeUriInlineCode都會忽略和。存放函數容器映像所需的 Amazon ECR 儲存庫可由. AWS SAMCLI 如需詳細資訊,請參閱 sam deploy

有效值ZipImage

類型:字串

必要:否

預設Zip

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的PackageType屬性。

PermissionsBoundary

權限界限的 ARN,用於此函數的執行角色。只有在為您產生角色時,此屬性才有效。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::IAM::Role資源的PermissionsBoundary屬性。

Policies

此功能的權限原則。政策會附加至函數的預設 AWS Identity and Access Management (IAM) 執行角色。

此屬性接受單一值或值清單。允許數值包括:

注意

如果您設定Role屬性,則會忽略此屬性。

類型:字串 | 清單 | 地圖

必要:否

AWS CloudFormation 兼容性:此屬性類似於AWS::IAM::Role資源的Policies屬性。

PropagateTags

指出是否要將標籤從Tags屬性傳遞至您AWS::Serverless::Function產生的資源。指True定在產生的資源中傳播標籤。

類型:布林值

必要:否

預設False

AWS CloudFormation 兼容性:此屬性是唯一的, AWS SAM 並且沒有相 AWS CloudFormation 等的屬性。

ProvisionedConcurrencyConfig

函數別名的佈建並行配置。

注意

ProvisionedConcurrencyConfig只有在設定時AutoPublishAlias才能指定。否則,會導致錯誤。

類型:ProvisionedConcurrencyConfig

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Alias資源的ProvisionedConcurrencyConfig屬性。

ReservedConcurrentExecutions

您要為函數保留的並行執行數目上限。

如需有關此屬性的詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 函數調整

類型:整數

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的ReservedConcurrentExecutions屬性。

Role

IAM 角色的 ARN,用作此函數的執行角色。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性類似於AWS::Lambda::Function資源的Role屬性。這在中是必需的 AWS CloudFormation ,但在中不是 AWS SAM。如果未指定角色,則會使用邏輯 ID 為為您建立角色<function-logical-id>Role

RolePath

函數 IAM 執行角色的路徑。

為您產生角色時,請使用此屬性。當角色與Role屬性一起指定時,請勿使用。

類型:字串

必要:有條件

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::IAM::Role資源的Path屬性。

Runtime

函數的執行時間的識別符。只有在屬性設定為時,才需要此PackageType屬性Zip

注意

如果您指定此屬性的provided識別碼,您可以使用 Metadata resource 屬性 AWS SAM 來指示建置此函數所需的自訂執行階段。如需建立自訂執行階段的詳細資訊,請參閱〈〉使用自訂執行階段建置 Lambda 函數 AWS SAM

類型:字串

必要:有條件

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的Runtime屬性。

RuntimeManagementConfig

設定 Lambda 函數的執行階段管理選項,例如執行階段環境更新、復原行為,以及選取特定執行階段版本。若要深入了解,請參閱AWS Lambda 開發人員指南中的 Lambda 執行階段更新

類型:RuntimeManagementConfig

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的 RuntimeManagementConfig屬性。

SnapStart

建立任何新 Lambda 函數版本的快照。快照是初始化函數的緩存狀態,包括其所有依賴項。該函數只被初始化一次,緩存狀態將被重複用於所有 future 的調用,通過減少您的函數必須初始化的次數來提高應用程序性能。若要深入了解,請參閱AWS Lambda 開發人員指南SnapStart的使用 Lambda 改善啟動效能

類型:SnapStart

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的SnapStart屬性。

Tags

映射(字符串到字符串),指定添加到此函數的標籤。如需有關標籤的有效金鑰和值的詳細資訊,請參閱AWS Lambda 開發人員指南中的標籤金鑰和值需求

建立堆疊時, AWS SAM 會自動將lambda:createdBy:SAM標籤新增至此 Lambda 函數,以及為此函數產生的預設角色。

類型:地圖

必要:否

AWS CloudFormation 兼容性:此屬性類似於AWS::Lambda::Function資源的Tags屬性。中的Tags屬性 AWS SAM 由鍵值對組成(而在 AWS CloudFormation 此屬性中由對Tag象列表組成)。此外, AWS SAM 會自動將lambda:createdBy:SAM標籤新增至此 Lambda 函數,以及為此函數產生的預設角色。

Timeout

函數在停止前可執行的時間上限 (以秒為單位)。

類型:整數

必要:否

預設:3

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的Timeout屬性。

Tracing

字串;指定函數的 X-Ray 追蹤模式。

  • Active— 啟動該功能的 X-Ray 追蹤。

  • Disabled— 停用 X-Ray 的功能.

  • PassThrough— 啟動該功能的 X-Ray 追蹤。抽樣決策委託給下游服務。

如果指定為ActivePassThrough且未設定Role內容,則會將arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess原則 AWS SAM 新增至為您建立的 Lambda 執行角色。

如需有關 X-Ray 的詳細資訊,請參閱AWS Lambda 開發人員指南 AWS X-Ray中的AWS Lambda 搭配使用

有效值:[Active| Disabled |PassThrough]

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性類似於AWS::Lambda::Function資源的TracingConfig屬性。

VersionDescription

指定新增至新 Lambda 版本資源的Description欄位。

類型:字串

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Version資源的Description屬性。

VpcConfig

啟用此功能以存取虛擬私有雲 (VPC) 內私有資源的組態。

類型:VpcConfig

必要:否

AWS CloudFormation 兼容性:此屬性直接傳遞給AWS::Lambda::Function資源的VpcConfig屬性。

傳回值

Ref

將此資源的邏輯 ID 提供給Ref內建函數時,會傳回基礎 Lambda 函數的資源名稱。

若要取得有關使用Ref功能的更多資訊,請參閱《使AWS CloudFormation 用指南》Ref中的〈〉

Fn: GetAtt

Fn::GetAtt 會傳回此類型之指定屬性的值。以下為可用屬性及傳回值的範例。

若要取得有關使用的更多資訊Fn::GetAtt,請參閱使AWS CloudFormation 用指南Fn::GetAtt中的〈〉

Arn

基礎 Lambda 函數的 ARN。

範例

簡單的功能

以下是 Amazon S3 儲存貯體中套件類型 Zip (預設) AWS::Serverless::Function 資源和函數程式碼的基本範例。

YAML

Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.9 CodeUri: s3://bucket-name/key-name

函數屬性示例

以下是使用InlineCode、、、LayersApi事件來源AWS::Serverless::Function的封裝類型 Zip (預設) 範例。Tracing Policies Amazon EFS

YAML

Type: AWS::Serverless::Function DependsOn: MyMountTarget # This is needed if an AWS::EFS::MountTarget resource is declared for EFS Properties: Handler: index.handler Runtime: python3.9 InlineCode: | def handler(event, context): print("Hello, world!") ReservedConcurrentExecutions: 30 Layers: - Ref: MyLayer Tracing: Active Timeout: 120 FileSystemConfigs: - Arn: !Ref MyEfsFileSystem LocalMountPath: /mnt/EFS Policies: - AWSLambdaExecute - Version: '2012-10-17' Statement: - Effect: Allow Action: - s3:GetObject - s3:GetObjectACL Resource: 'arn:aws:s3:::my-bucket/*' Events: ApiEvent: Type: Api Properties: Path: /path Method: get

ImageConfig例子

以下是封裝類型之 ImageConfig Lambda 函數的範例Image

YAML

HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageUri: account-id.dkr.ecr.region.amazonaws.com/ecr-repo-name:image-name ImageConfig: Command: - "app.lambda_handler" EntryPoint: - "entrypoint1" WorkingDirectory: "workDir"

RuntimeManagementConfig 例子

設定為根據目前行為更新其執行階段環境的 Lambda 函數:

TestFunction Type: AWS::Serverless::Function Properties: ... Runtime: python3.9 RuntimeManagementConfig: UpdateRuntimeOn: Auto

設定為在函數更新時更新其執行階段環境的 Lambda 函數:

TestFunction Type: AWS::Serverless::Function Properties: ... Runtime: python3.9 RuntimeManagementConfig: UpdateRuntimeOn: FunctionUpdate

設定為手動更新其執行階段環境的 Lambda 函數:

TestFunction Type: AWS::Serverless::Function Properties: ... Runtime: python3.9 RuntimeManagementConfig: RuntimeVersionArn: arn:aws:lambda:us-east-1::runtime:4c459dd0104ee29ec65dcad056c0b3ddbe20d6db76b265ade7eda9a066859b1e UpdateRuntimeOn: Manual

SnapStart例子

針對 future 版本 SnapStart 開啟的 Lambda 函數範例:

TestFunc Type: AWS::Serverless::Function Properties: ... SnapStart: ApplyOn: PublishedVersions