AWS::Serverless::Function
Creates a Lambda function, IAM execution role, and event source mappings that trigger the function.
The AWS::Serverless::Function resource also supports the Metadata resource attribute, so you can instruct AWS SAM to build custom runtimes required
by your application. For more information about building custom runtimes, see Building custom runtimes.
Syntax
To declare this entity in your AWS Serverless Application Model (AWS SAM) template, use the following syntax.
YAML
Type: AWS::Serverless::Function Properties: AssumeRolePolicyDocument:JSONAutoPublishAlias:StringAutoPublishCodeSha256:StringCodeUri:String | FunctionCodeDeadLetterQueue:Map | DeadLetterQueueDeploymentPreference:DeploymentPreferenceDescription:StringEnvironment:EnvironmentEventInvokeConfig:EventInvokeConfigurationEvents:EventSourceFileSystemConfigs:ListFunctionName:StringHandler:StringInlineCode:StringKmsKeyArn:StringLayers:ListMemorySize:IntegerPermissionsBoundary:StringPolicies:String | List | MapProvisionedConcurrencyConfig:ProvisionedConcurrencyConfigReservedConcurrentExecutions:IntegerRole:StringRuntime:StringTags:MapTimeout:IntegerTracing:StringVersionDescription:StringVpcConfig:VpcConfig
Properties
-
AssumeRolePolicyDocument -
Adds an AssumeRolePolicyDocument for the default created
Rolefor this function. If this property isn't specified, AWS SAM adds a default assume role for this function.Type: JSON
Required: No
AWS CloudFormation compatibility: This property is similar to the
AssumeRolePolicyDocumentproperty of anAWS::IAM::Roleresource. AWS SAM adds this property to the generated IAM role for this function. If a role ARN is provided for this function, this property does nothing. -
AutoPublishAlias -
Name of the Lambda alias. For more information about Lambda aliases, see AWS Lambda Function Aliases. For examples that use this property, see Deploying serverless applications gradually.
AWS SAM generates AWS::Lambda::Version and AWS::Lambda::Alias resources when this property is set. For information about this scenario, see AutoPublishAlias property is specified. For general information about generated AWS CloudFormation resources, see Generated AWS CloudFormation resources.
Type: String
Required: No
AWS CloudFormation compatibility: This property is unique to AWS SAM and doesn't have an AWS CloudFormation equivalent.
-
AutoPublishCodeSha256 -
The string value that is used (along with the value in CodeUri) to determine if a new Lambda version should be published.
This property addresses a problem that occurs when an AWS SAM template has the following characteristics: the
DeploymentPreferenceobject is configured for gradual deployments (as described in Deploying Serverless Applications Gradually), theAutoPublishAliasproperty is set and doesn't change between deployments, and theCodeUriproperty is set and doesn't change between deployments.This scenario might occur when the deployment package stored in an Amazon S3 location is replaced by a new deployment package that contains updated Lambda function code, but the
CodeUriproperty remains unchanged (as opposed to the new deployment package being uploaded to a new Amazon S3 location and theCodeUribeing changed to the new location).In this scenario, you must provide a unique value for
AutoPublishCodeSha256to trigger the gradual deployment successfully.Type: String
Required: No
AWS CloudFormation compatibility: This property is unique to AWS SAM and doesn't have an AWS CloudFormation equivalent.
-
CodeUri -
The Amazon S3 URI, local file path, or FunctionCode object of the function code.
If an Amazon S3 URI or FunctionCode object is provided, the Amazon S3 object referenced must be a valid Lambda deployment package.
If a local file path is provided, the template must go through the workflow that includes the
sam deployorsam packagecommand, in order for the code to be transformed properly.Note: Either
CodeUriorInlineCodeis required.Type: String | FunctionCode
Required: Conditional
AWS CloudFormation compatibility: This property is similar to the
Codeproperty of anAWS::Lambda::Functionresource. The nested Amazon S3 properties are named differently. -
DeadLetterQueue -
Configures SNS topic or SQS queue where Lambda sends events that it can't process. For more information about dead-letter queue functionality, see AWS Lambda Function Dead Letter Queues.
Type: Map | DeadLetterQueue
Required: No
AWS CloudFormation compatibility: This property is similar to the
DeadLetterConfigproperty of anAWS::Lambda::Functionresource. In AWS CloudFormation the type is derived from the TargetArn, whereas in AWS SAM you must pass the type along with the TargetArn. -
DeploymentPreference -
The settings to enable gradual Lambda deployments.
If a
DeploymentPreferenceobject is specified, AWS SAM creates an AWS::CodeDeploy::Application calledServerlessDeploymentApplication(one per stack), an AWS::CodeDeploy::DeploymentGroup called, and an AWS::IAM::Role called<function-logical-id>DeploymentGroupCodeDeployServiceRole.Type: DeploymentPreference
Required: No
AWS CloudFormation compatibility: This property is unique to AWS SAM and doesn't have an AWS CloudFormation equivalent.
See also: See the Deploying serverless applications gradually documentation for more information about this property.
-
Description -
A description of the function.
Type: String
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
Descriptionproperty of anAWS::Lambda::Functionresource. -
Environment -
The configuration for the runtime environment.
Type: Environment
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
Environmentproperty of anAWS::Lambda::Functionresource. -
EventInvokeConfig -
The object that describes event invoke configuration on a Lambda function.
Type: EventInvokeConfiguration
Required: No
AWS CloudFormation compatibility: This property is unique to AWS SAM and doesn't have an AWS CloudFormation equivalent.
-
Events -
Specifies the events that trigger this function. Events consist of a type and a set of properties that depend on the type.
Type: EventSource
Required: No
AWS CloudFormation compatibility: This property is unique to AWS SAM and doesn't have an AWS CloudFormation equivalent.
-
FileSystemConfigs -
List of FileSystemConfig objects that specify the connection settings for an Amazon EFS file system.
If your template contains an AWS::EFS::MountTarget resource, you must also specify a
DependsOnresource attribute to ensure that the mount target is created or updated before the function.Type: List
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
FileSystemConfigsproperty of anAWS::Lambda::Functionresource. -
FunctionName -
A name for the function. If you don't specify a name, a unique name is generated for you.
Type: String
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
FunctionNameproperty of anAWS::Lambda::Functionresource. -
Handler -
The function within your code that is called to begin execution.
Type: String
Required: Yes
AWS CloudFormation compatibility: This property is passed directly to the
Handlerproperty of anAWS::Lambda::Functionresource. -
InlineCode -
The Lambda function code that is written directly in the template.
Note: Either
CodeUriorInlineCodeis required.Type: String
Required: Conditional
AWS CloudFormation compatibility: This property is passed directly to the
ZipFileproperty of theAWS::Lambda::FunctionCodedata type. -
KmsKeyArn -
The Amazon Resource Name (ARN) of an AWS Key Management Service (AWS KMS) key that Lambda uses to encrypt and decrypt your function's environment variables.
Type: String
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
KmsKeyArnproperty of anAWS::Lambda::Functionresource. -
Layers -
The list of LayerVersion ARNs that should be used by this function. The order specified here is the order that they will be imported when running the Lambda function.
Type: List
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
Layersproperty of anAWS::Lambda::Functionresource. -
MemorySize -
The size of the memory allocated per invocation of the function in MB.
Type: Integer
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
MemorySizeproperty of anAWS::Lambda::Functionresource. -
PermissionsBoundary -
The ARN of a permissions boundary to use for this function's execution role. This property only works if the role is generated for you.
Type: String
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
PermissionsBoundaryproperty of anAWS::IAM::Roleresource. -
Policies -
One or more policies that this function needs. They will be appended to the default role for this function.
This property accepts a single string or a list of strings. The property can be the name of AWS managed AWS Identity and Access Management (IAM) policies, AWS SAM policy templates, or one or more inline policy documents formatted as a map.
For more information about AWS managed IAM policies, see AWS Managed Policies. For more information about AWS SAM policy templates, see AWS SAM policy templates. For more information about inline policies, see Inline Policies.
NOTE: If the
Roleproperty is set, this property is ignored.Type: String | List | Map
Required: No
AWS CloudFormation compatibility: This property is similar to the
Policiesproperty of anAWS::IAM::Roleresource. AWS SAM supports AWS managed policy names and AWS SAM policy templates, in addition to JSON policy documents. AWS CloudFormation only accepts JSON policy documents. -
ProvisionedConcurrencyConfig -
The provisioned concurrency configuration of a function's alias.
Note:
ProvisionedConcurrencyConfigcan only be specified if theAutoPublishAliasis set. Otherwise, an error results.Type: ProvisionedConcurrencyConfig
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
ProvisionedConcurrencyConfigproperty of anAWS::Lambda::Aliasresource. -
ReservedConcurrentExecutions -
The maximum number of concurrent executions that you want to reserve for the function.
For more information about this property, see AWS Lambda Function Scaling in the AWS Lambda Developer Guide.
Type: Integer
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
ReservedConcurrentExecutionsproperty of anAWS::Lambda::Functionresource. -
Role -
The ARN of an IAM role to use as this function's execution role.
Type: String
Required: No
AWS CloudFormation compatibility: This property is similar to the
Roleproperty of anAWS::Lambda::Functionresource. This is required in AWS CloudFormation but not in AWS SAM. If a role isn't specified, one is created for you with a logical ID of.<function-logical-id>Role -
Runtime -
The identifier of the function's runtime.
Note: If you specify the
providedidentifier for this property, you can use theMetadataresource attribute to instruct AWS SAM to build the custom runtime required by this function. For more information about building custom runtimes, see Building custom runtimes.Type: String
Required: Yes
AWS CloudFormation compatibility: This property is passed directly to the
Runtimeproperty of anAWS::Lambda::Functionresource. -
Tags -
A map (string to string) that specifies the tags added to the Lambda function and the corresponding IAM execution role. Keys and values are limited to alphanumeric characters. Keys can be 1 to 127 Unicode characters in length and cannot be prefixed with aws:. Values can be 1 to 255 Unicode characters in length.
Type: Map
Required: No
AWS CloudFormation compatibility: This property is similar to the
Tagsproperty of anAWS::Lambda::Functionresource. The Tags property in AWS SAM consists of Key:Value pairs. In AWS CloudFormation it consists of a list of Tag objects. When the stack is created, AWS SAM automatically adds alambda:createdBy:SAMtag to this Lambda function and the corresponding IAM execution role. -
Timeout -
The maximum time that the function can run before it is killed, in seconds.
Type: Integer
Required: No
Default: 3
AWS CloudFormation compatibility: This property is passed directly to the
Timeoutproperty of anAWS::Lambda::Functionresource. -
Tracing -
The string that specifies the function's X-Ray tracing mode. For more information about X-Ray, see Using AWS Lambda with AWS X-Ray in the AWS Lambda Developer Guide.
Supported values:
ActiveandPassThrough.Type: String
Required: No
AWS CloudFormation compatibility: This property is similar to the
TracingConfigproperty of anAWS::Lambda::Functionresource. IfTracingis set toActive, then AWS SAM adds thearn:aws:iam::aws:policy/AWSXrayWriteOnlyAccesspolicy to the Lambda role. -
VersionDescription -
Specifies the Description field that is added on the new Lambda version resource.
Type: String
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
Descriptionproperty of anAWS::Lambda::Versionresource. -
VpcConfig -
The configuration that enables this function to access private resources within your VPC.
Type: VpcConfig
Required: No
AWS CloudFormation compatibility: This property is passed directly to the
VpcConfigproperty of anAWS::Lambda::Functionresource.
Return Values
Ref
When the logical ID of this resource is provided to the Ref intrinsic function, it returns the resource name of the underlying Lambda function.
For more information about using the Ref function, see Ref in the AWS CloudFormation User Guide.
Fn::GetAtt
Fn::GetAtt returns a value for a specified attribute of this type. The following are
the available attributes and sample return values.
For more information about using Fn::GetAtt, see Fn::GetAtt in the AWS CloudFormation User Guide.
Examples
Simple Function
The following is a base case example of an AWS::Serverless::Function resource.
YAML
Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: python3.6 CodeUri: s3://bucket/key
Function Properties Example
The following is an example of an AWS::Serverless::Function that uses InlineCode, Tracing, Policies, Layers, EFS, and an Api event source.
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.6 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

