Initialising the Application
In this lesson, you will learn how to initialize the web service project using AWS SAM.
This chapter introduces the basic workflow of serverless deployments. You’ll learn how to manage infrastructure with the AWS Serverless Application Model (SAM) and CloudFormation, and how to use API Gateway to send HTTP requests to Lambda functions.
The SAM command-line tool #
SAM command-line tools can generate sample projects and events so that you can get started easily.
The sam init
command #
Let’s dive right in and create a sample web service backed by a Lambda function. You will use the code
directory to execute the commands. To create a simple SAM project in a new subdirectory, run the following command:
sam init --runtime nodejs12.x --name app --app-template hello-world
You will be asked for the following permission:
Allow SAM CLI to download AWS-provided quick start templates from Github [Y/n]:
Enter y
as a response. You should get a quick confirmation about the initialisation of a new project:
Cloning app templates from https://github.com/awslabs/aws-sam-cli-app-templates.git
-----------------------
Generating application:
-----------------------
Name: app
Runtime: nodejs12.x
Dependency Manager: npm
Application Template: hello-world
Output Directory: .
If this command printed an error on your local machine, there is some issue with the setup. You should look at the chapter where we have the information on how to set up SAM command-line tools and other prerequisites.
The --runtime
argument
The --runtime
argument tells SAM which programming language you’ll use to write the Lambda function, or more precisely which execution environment it is intended to run in. The --runtime
argument is important for generating the sample project. You will learn how to add more functions to the same project later, and you can even mix functions that are executed in different languages.
To speed upscaling and operations, Lambda has pre-packaged execution environments, called runtimes, for many popular languages. The nodejs12.x
runtime tells Lambda to run your function under Node.js 12, an execution engine for JavaScript. SAM can also create example projects in other languages. For example, use java8
for a Java function. Check out the AWS Lambda runtimes page for a complete list.
The --name
argument
The --name
argument tells SAM how to call the application, or more precisely the name for the subdirectory where the application files are stored. In the previous example case, app
was used, so SAM will create a new subdirectory called app
and copy the sample files there.
Here are the key ones:
-
hello-world
is a directory containing the JavaScript (Node) source code for your Lambda function. -
hello-world/package.json
is the standard Node.js package manifest, describing dependencies required by the function. -
hello-world/app.js
is the actual service request handler. -
template.yaml
describes the operational infrastructure required by the function.
The --app-template
argument
The --app-template
argument tells SAM which template to apply when initialising the application. You can see the list of standard templates in the aws-sam-cli-app-templates
project on GitHub. SAM can also use your templates, which might be useful for teams that often create similar Lambda functions. For example, you could create a template for message queue handling, and then quickly apply it when creating a new payment processor that connects to your payments queue. Companies can also use templates to standardise project directory layouts. To specify your own template location, use the --location
parameter and point to a GIT repository or a local directory.
Now let’s proceed to the next lesson where you will learn about the CloudFormation Template and the CloudFormation Stack.