

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在中创建您的应用程序 AWS SAM
<a name="using-sam-cli-init"></a>

完成[入门](serverless-getting-started.md)和阅读[如何使用 AWS Serverless Application Model (AWS SAM)](chapter-using-sam.md)后，您就可以准备好在开发人员环境中创建 AWS SAM 项目了。您的 AWS SAM 项目将作为编写无服务器应用程序的起点。有关 AWS SAMCLI`sam init`命令选项的列表，请参见[sam init](sam-cli-command-reference-sam-init.md)。

 AWS Serverless Application Model 命令行接口 (AWS SAMCLI) `sam init` 命令提供了用于初始化新的无服务器应用程序的选项，该应用程序包括：
+ 用于定义基础架构代码的 AWS SAM 模板。
+ 用于组织应用程序的文件夹结构。
+ 为您的 AWS Lambda 函数进行配置。

要创建 AWS SAM 项目，请参阅本节中的主题。

**注意**  
`sam init`包括支持运行时（Python TypeScript、Java）中持久函数的项目模板。这些模板为构建有状态的无服务器应用程序提供了入门代码和配置。

**Topics**
+ [初始化新的无服务器应用程序](#using-sam-cli-init-new)
+ [sam init 的选项](#using-sam-cli-init-options)
+ [问题排查](#using-sam-cli-init-troubleshooting)
+ [示例](#using-sam-cli-init-examples)
+ [了解详情](#using-sam-cli-init-learn)
+ [后续步骤](#w2aac18c11c39)

## 初始化新的无服务器应用程序
<a name="using-sam-cli-init-new"></a>

**使用 AWS SAM CLI 初始化新的无服务器应用程序**

1. 指向起始目录的 `cd`。

1. 在命令行中执行以下命令：

   ```
   $ sam init
   ```

1.  AWS SAM CLI 会指导您完成交互式流程，以创建新的无服务器应用程序。
**注意**  
如[教程：使用以下命令部署 Hello World 应用程序 AWS SAM](serverless-getting-started-hello-world.md)中所述，此命令会初始化您的无服务器应用程序，从而创建您的项目目录。此目录将包含多个文件和文件夹。最重要的文件是 `template.yaml`。这是你的 AWS SAM 模板。您的 python 版本必须与 **sam init** 命令创建的 `template.yaml` 文件中列出的 python 版本匹配。

### 选择起始模板
<a name="using-sam-cli-init-new-template"></a>

*模板*由以下部分组成：

1. 基础架构代码的 AWS SAM 模板。

1. 用于组织项目文件的项目起始目录。例如，这可能包括：

   1. Lambda 函数代码及其依赖项的结构。

   1. 包含用于本地测试的测试事件的 `events` 文件夹。

   1. 支持单元测试的 `tests` 文件夹。

   1. 用于配置项目设置的 `samconfig.toml` 文件。

   1. `ReadMe` 文件和其他基本的项目起始文件。

   以下是项目起始目录的示例：

   ```
   sam-app
   ├── README.md
   ├── __init__.py
   ├── events
   │   └── event.json
   ├── hello_world
   │   ├── __init__.py
   │   ├── app.py
   │   └── requirements.txt
   ├── samconfig.toml
   ├── template.yaml
   └── tests
       ├── __init__.py
       ├── integration
       │   ├── __init__.py
       │   └── test_api_gateway.py
       ├── requirements.txt
       └── unit
           ├── __init__.py
           └── test_handler.py
   ```

您可以从可用的 *AWS 快速入门模板*列表中进行选择，也可以自行提供*自定义模板位置*。

**选择 AWS 快速入门模板**

1. 当系统提示时，选择 **AWS 快速入门模板**。

1. 首先选择一个 AWS 快速入门模板。以下是示例：

   ```
   Which template source would you like to use?
       1 - AWS Quick Start Templates
       2 - Custom Template Location
   Choice: 1
   
   Choose an AWS Quick Start application template
       1 - Hello World Example
       2 - Multi-step workflow
       3 - Serverless API
       4 - Scheduled task
       5 - Standalone function
       6 - Data processing
       7 - Hello World Example With Powertools
       8 - Infrastructure event management
       9 - Serverless Connector Hello World Example
       10 - Multi-step workflow with Connectors
       11 - Lambda EFS example
       12 - DynamoDB Example
       13 - Machine Learning
   Template: 4
   ```

**选择自定义模板位置**

1. 当系统提示时，选择**自定义模板位置**。

   ```
   Which template source would you like to use?
       1 - AWS Quick Start Templates
       2 - Custom Template Location
   Choice: 2
   ```

1.  AWS SAM CLI 会提示您提供模板位置。

   ```
   Template location (git, mercurial, http(s), zip, path):
   ```

   为模板 .zip 文件存档提供以下任意位置：
   + **GitHub 存储库** - .zip 文件在 GitHub 存储库中的路径。文件必须位于存储库的根目录中。
   + **Mercurial 存储库** - .zip 文件在 Mercurial 存储库中的路径。文件必须位于存储库的根目录中。
   + **.zip 路径** - .zip 文件的 HTTPS 或本地路径。

1.  AWS SAM CLI 会使用您的自定义模板初始化无服务器应用程序。

### 选择运行时系统
<a name="using-sam-cli-init-new-runtime"></a>

当您选择 *AWS 快速入门模板*时， AWS SAM CLI 会提示您为 Lambda 函数选择运行时系统。 AWS SAM CLI 列出的选项是本身受 Lambda 支持的运行时系统。
+ [运行时](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-runtime)提供在执行环境中运行的语言特定环境。
+ [部署到后 AWS 云，Lambda 服务将在执行环境中调用您的函数。](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtime-environment.html)

您可以将任何其他编程语言与自定义运行时配合使用。若要这样做，您需要手动创建应用程序起始结构。然后，您可以配置自定义模板位置，使用 `sam init` 来快速初始化应用程序。

根据您的选择， AWS SAM CLI 会为 Lambda 函数代码和依赖项创建起始目录。

如果 Lambda 对于运行时支持多个依赖项管理器，则系统会提示您选择首选的依赖项管理器。

### 选择包类型
<a name="using-sam-cli-init-new-package"></a>

当您选择 *AWS 快速入门模板*和*运行时*时， AWS SAM CLI 会提示您选择*包类型*。包类型决定了如何部署 Lambda 函数以与 Lambda 服务配合使用。受支持的两种包类型是：

1. **容器印象** – 包括基本操作系统、运行时系统、Lambda 扩展、应用程序代码及其依赖项。

1. **.zip 文件归档** – 包括您的应用程序代码及其依赖项。

要了解有关部署包类型的更多信息，请参阅*《AWS Lambda 开发人员指南》*中的 [Lambda 部署包](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html)。

以下示例显示了将 Lambda 函数打包为容器映像的应用程序的目录结构。 AWS SAMCLI下载图像并在函数的目录`Dockerfile`中创建一个来指定图像。

```
sam-app
├── README.md
├── __init__.py
├── events
│   └── event.json
├── hello_world
│   ├── Dockerfile
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── samconfig.toml
├── template.yaml
└── tests
    ├── __init__.py
    └── unit
        ├── __init__.py
        └── test_handler.py
```

以下示例显示了将函数打包为 .zip 文件存档的应用程序的目录结构。

```
sam-app
├── README.md
├── __init__.py
├── events
│   └── event.json
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── requirements.txt
├── samconfig.toml
├── template.yaml
└── tests
    ├── __init__.py
    ├── integration
    │   ├── __init__.py
    │   └── test_api_gateway.py
    ├── requirements.txt
    └── unit
        ├── __init__.py
        └── test_handler.py
```

### 配置 AWS X-Ray 跟踪
<a name="using-sam-cli-init-new-tracing"></a>

您可以选择激活跟 AWS X-Ray 踪。要了解更多信息，请参阅[什么是 AWS X-Ray？](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 在《*AWS X-Ray 开发人员指南》*中。

如果您激活，则 AWS SAMCLI会配置您的 AWS SAM 模板。以下是示例：

```
Globals:
  Function:
    ...
    Tracing: Active
  Api:
    TracingEnabled: True
```

### 使用 Amazon CloudWatch 应用程序见解配置监控
<a name="using-sam-cli-init-new-insights"></a>

您可以选择使用 Amazon App CloudWatch lication Insights 激活监控。要了解更多信息，请参阅《[亚马逊* CloudWatch 用户指南》中的 “亚马逊 CloudWatch *应用程序见解](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html)”。

如果您激活，则 AWS SAMCLI会配置您的 AWS SAM 模板。以下是示例：

```
Resources:
  ApplicationResourceGroup:
    Type: AWS::ResourceGroups::Group
    Properties:
      Name:
        Fn::Join:
        - ''
        - - ApplicationInsights-SAM-
          - Ref: AWS::StackName
      ResourceQuery:
        Type: CLOUDFORMATION_STACK_1_0
  ApplicationInsightsMonitoring:
    Type: AWS::ApplicationInsights::Application
    Properties:
      ResourceGroupName:
        Fn::Join:
        - ''
        - - ApplicationInsights-SAM-
          - Ref: AWS::StackName
      AutoConfigurationEnabled: 'true'
    DependsOn: ApplicationResourceGroup
```

### 命名您的应用程序
<a name="using-sam-cli-init-new-name"></a>

提供应用程序的名称。 AWS SAM CLI 会使用此名称为应用程序创建顶级文件夹。

## sam init 的选项
<a name="using-sam-cli-init-options"></a>

以下是可与 `sam init` 命令配合使用的一些主要选项。有关全部选项的列表，请参阅 [sam init](sam-cli-command-reference-sam-init.md)。

### 使用自定义模板位置初始化应用程序
<a name="using-sam-cli-init-options-location"></a>

使用 `--location` 选项并提供受支持的自定义模板位置。以下是示例：

```
$ sam init --location https://github.com/aws-samples/sessions-with-aws-sam/raw/master/starter-templates/web-app.zip
```

### 在不使用交互式流程的情况下初始化应用程序
<a name="using-sam-cli-init-options-no-interactive"></a>

使用 `--no-interactive` 选项并在命令行中提供您的配置选择，以跳过交互式流程。以下是示例：

```
$ sam init --no-interactive --runtime go1.x --name go-demo --dependency-manager mod --app-template hello-world
```

## 问题排查
<a name="using-sam-cli-init-troubleshooting"></a>

要排除故障 AWS SAMCLI，请参阅[AWS SAM CLI 故障排除](sam-cli-troubleshooting.md)。

## 示例
<a name="using-sam-cli-init-examples"></a>

### 使用 Hello World AWS 入门模板初始化新的无服务器应用程序
<a name="using-sam-cli-init-examples-helloworld"></a>

有关此示例的更多信息，请参阅*教程：部署 Hello World 应用程序*中的[第 1 步：初始化示例 Hello World 应用程序](serverless-getting-started-hello-world.md#serverless-getting-started-hello-world-init)。

### 使用自定义模板位置初始化新的无服务器应用程序
<a name="using-sam-cli-init-examples-custom"></a>

以下几个示例说明了如何为自定义模板提供 GitHub 位置：

```
$ sam init --location gh:aws-samples/cookiecutter-aws-sam-python
$ sam init --location git+sh://git@github.com/aws-samples/cookiecutter-aws-sam-python.git
$ sam init --location hg+ssh://hg@bitbucket.org/repo/template-name
```

以下是本地文件路径的示例：

```
$ sam init --location /path/to/template.zip
```

以下是 HTTPS 可访问路径的示例：

```
$ sam init --location https://github.com/aws-samples/sessions-with-aws-sam/raw/master/starter-templates/web-app.zip
```

## 了解详情
<a name="using-sam-cli-init-learn"></a>

要了解有关使用 `sam init` 命令的更多信息，请参阅以下内容：
+ **[学习 AWS SAM：sam init](https://www.youtube.com/watch?v=9m3R-leD5Xo)** — Serverless Land “学习 AWS SAM” 系列开启。YouTube
+ **[构建可与 AWS SAM CLI 配合使用的无服务器应用程序（使用 SAM S2E7 的会话）](https://www.youtube.com/watch?v=k9IRdgze9fQ)** - YouTube 上的“使用 AWS SAM 的会话”系列。

## 后续步骤
<a name="w2aac18c11c39"></a>

既然您已经创建了 AWS SAM 项目，就可以开始创作应用程序了。有关执行此操作所需完成的任务的详细说明，请参阅[使用以下方式定义您的基础架构 AWS SAM](serverless-authoring.md)。