Which resources can be specified in the AWS serverless application model template?

When AWS Serverless Application Model (AWS SAM) processes your AWS SAM template file, it generates one or more AWS CloudFormation resources. The set of AWS CloudFormation resources that AWS SAM generates differs depending on the scenarios that you specify. A scenario is the combination of AWS SAM resources and properties specified in your template file. You can reference the generated AWS CloudFormation resources elsewhere within your template file, similar to how you reference resources that you declare explicitly in your template file.

For example, if you specify an AWS::Serverless::Function resource in your AWS SAM template file, AWS SAM always generates an AWS::Lambda::Function base resource. If you also specify the optional AutoPublishAlias property, AWS SAM additionally generates AWS::Lambda::Alias and AWS::Lambda::Version resources.

This section lists the scenarios and the AWS CloudFormation resources that they generate, and shows how to reference the generated AWS CloudFormation resources in your AWS SAM template file.

Referencing generated AWS CloudFormation resources

You have two options for referencing generated AWS CloudFormation resources within your AWS SAM template file, by LogicalId or by referenceable property.

Referencing generated AWS CloudFormation resources by LogicalId

The AWS CloudFormation resources that AWS SAM generates each have a LogicalId, which is an alphanumeric (A-Z, a-z, 0-9) identifier that is unique within a template file. AWS SAM uses the LogicalIds of the AWS SAM resources in your template file to construct the LogicalIds of the AWS CloudFormation resources it generates. You can use the LogicalId of a generated AWS CloudFormation resource to access properties of that resource within your template file, just like you would for an AWS CloudFormation resource that you have explicitly declared. For more information about LogicalIds in AWS CloudFormation and AWS SAM templates, see Resources in the AWS CloudFormation User Guide.

The LogicalIds of some generated resources include a unique hash value to avoid namespace clashes. The LogicalIds of these resources are derived when the stack is created. You can retrieve them only after the stack has been created using the AWS Management Console, AWS CLI, or one of the AWS SDKs. We don't recommend referencing these resources by LogicalId because the hash values might change.

Referencing generated AWS CloudFormation resources by referenceable property

For some generated resources, AWS SAM provides a referenceable property of the AWS SAM resource. You can use this property to reference a generated AWS CloudFormation resource and its properties within your AWS SAM template file.

Not all generated AWS CloudFormation resources have referenceable properties. For those resources, you must use the LogicalId.

Generated AWS CloudFormation resource scenarios

The following table summarizes the AWS SAM resources and properties that make up the scenarios that generate AWS CloudFormation resources. The topics in the Scenarios column provide details about the additional AWS CloudFormation resources that AWS SAM generates for that scenario.

Topics

  • AWS CloudFormation resources generated when AWS::Serverless::Api is specified
  • AWS CloudFormation resources generated when AWS::Serverless::Application is specified
  • AWS CloudFormation resources generated when you specify AWS::Serverless::Connector
  • AWS CloudFormation resources generated when AWS::Serverless::Function is specified
  • AWS CloudFormation resources generated when AWS::Serverless::HttpApi is specified
  • AWS CloudFormation resources generated when AWS::Serverless::LayerVersion is specified
  • AWS CloudFormation resources generated when AWS::Serverless::SimpleTable is specified
  • AWS CloudFormation resources generated when AWS::Serverless::StateMachine is specified

When you specify an AWS::Serverless::Connector resource in an AWS SAM template, AWS SAM generates the following AWS CloudFormation resources as needed.

AWS::IAM::ManagedPolicy

LogicalId:<connector‑LogicalId>Policy

Referenceable property: N/A (To reference this AWS CloudFormation resource, you must use the LogicalId.)

AWS::SNS::TopicPolicy

LogicalId:<connector‑LogicalId>TopicPolicy

Referenceable property: N/A (To reference this AWS CloudFormation resource, you must use the LogicalId.)

AWS::SQS::QueuePolicy

LogicalId:<connector‑LogicalId>QueuePolicy

Referenceable property: N/A (To reference this AWS CloudFormation resource, you must use the LogicalId.)

AWS::Lambda::Permission

LogicalId:<connector‑LogicalId>LambdaPermission

Referenceable property: N/A (To reference this AWS CloudFormation resource, you must use the LogicalId.)

What does the AWS serverless application model template specification provide to help deploy your serverless application on AWS?

The AWS Serverless Application Model (SAM) is an open-source framework for building serverless applications. It provides shorthand syntax to express functions, APIs, databases, and event source mappings. With just a few lines per resource, you can define the application you want and model it using YAML.

Which resource does AWS serverless application model syntax expand and transform into?

The AWS::Serverless transform, which is a macro hosted by CloudFormation, takes an entire template written in the AWS Serverless Application Model (AWS SAM) syntax and transforms and expands it into a compliant CloudFormation template.

Which AWS service or resource is serverless?

AWS Lambda is an event-driven, pay-as-you-go compute service that lets you run code without provisioning or managing servers.

What are serverless applications in AWS?

A serverless architecture is a way to build and run applications and services without having to manage infrastructure. Your application still runs on servers, but all the server management is done by AWS.