

# 通过 AWS Toolkit for JetBrains 使用 AWS 无服务器应用程序
<a name="sam"></a>

以下主题介绍如何通过 AWS Toolkit for JetBrains 使用 AWS 账户中的 AWS 无服务器应用程序。

**Topics**
+ [创建应用程序](deploy-serverless-app.md)
+ [同步应用程序](sam-sync.md)
+ [更改（更新）应用程序设置](sam-update.md)
+ [删除应用程序](sam-delete.md)

# 使用 AWS Toolkit for JetBrains 创建 AWS 无服务器应用程序
<a name="deploy-serverless-app"></a>

要完成此过程，您必须先安装 AWS Toolkit，如果您尚未安装，请首次连接到 AWS 账户。然后在 IntelliJ IDEA、PyCharm、WebStorm 或 JetBrains Rider 已在运行的情况下，执行以下操作：

1. 在 IntelliJ IDEA、PyCharm、WebStorm 或 JetBrains Rider 已在运行的情况下，执行下列操作之一：
   + 对于 IntelliJ IDEA 或 WebStorm，依次选择**文件**、**新建**、**项目**。
   + 对于 PyCharm，依次选择**文件**和**新建项目**。
   + 对于 JetBrains Rider，为新解决方案依次选择**文件**、**新建**。或者，右键单击 **Explorer** 工具窗口中的现有解决方案，然后选择 **Add (添加)** 和 **New Project (新建项目)**。

1. 对于 IntelliJ IDEA，依次选择 **AWS**、**AWS无服务器应用程序**，然后选择**下一步**。  
![\[选择在 IntelliJ IDEA 中创建 AWS 无服务器应用程序\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/sam-create-intellij.png)

   对于 PyCharm，请选择 **AWS 无服务器应用程序**。  
![\[选择在 PyCharm 中创建 AWS 无服务器应用程序\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/sam-create-pycharm.png)

   对于 WebStorm，请选择 **AWS 无服务器应用程序**。  
![\[选择在 WebStorm 中创建 AWS 无服务器应用程序\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/sam-create-webstorm.png)

   对于 JetBrains Rider，请选择 **AWS 无服务器应用程序**。  
![\[选择在 JetBrains Rider 中创建 AWS 无服务器应用程序\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/sam-create-rider.png)

1. 完成[“新建项目”对话框（对于 JetBrains Rider，此步骤为“新建解决方案”对话框）](new-project-dialog.md)，然后选择**完成**（对于 IntelliJ IDEA）或**创建**（对于 PyCharm、WebStorm 或 JetBrains Rider）。AWS Toolkit for JetBrains 会创建项目并将无服务器应用程序的代码文件添加到新项目中。

1. 如果使用的是 IntelliJ IDEA，则在**项目**工具窗口已打开并显示包含无服务器应用程序文件的项目的情况下，执行下列操作之一：
   + 对于基于 Maven 的项目，右键单击项目的 `pom.xml` 文件，然后选择 **Add as Maven Project (添加为 Maven 项目)**。  
![\[选择将 POM 文件添加为 Maven 项目\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/add-as-maven-project.png)
   + 对于基于 Gradle 的项目，右键单击项目的 `build.gradle` 文件，然后选择 **Import Gradle project (导入 Gradle 项目)**。  
![\[选择导入 Gradle 项目\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/import-gradle-project.png)

     完成 **Import Module from Gradle (从 Gradle 导入模块)** 对话框中的操作，然后选择 **OK (确定)**。

创建无服务器应用程序后，您可以运行（调用）或调试 AWS Lambda 函数的本地版本（包含在该应用程序中）。

您还可以部署无服务器应用程序。部署该应用程序后，可以调用 Lambda 函数的远程版本（包含在部署的应用程序中）。

# 从 AWS Toolkit for JetBrains 同步 AWS SAM 应用程序
<a name="sam-sync"></a>

AWS Serverless Application Model（AWS SAM）`sam sync` 是一个 AWS SAM-CLI 命令部署过程，可自动识别对无服务器应用程序所做的更改，然后选择构建这些更改并将其部署到 AWS 云 的最佳方式。如果您只对应用程序代码进行了更改，而没有更改基础架构，AWS SAM Sync 会更新您的应用程序，而不会重新部署 CloudFormation 堆栈。

有关 `sam sync` 和 AWS SAM CLI 命令的更多信息，请参阅《AWS Serverless Application Model 用户指南》**中的 [AWS SAM CLI command reference](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html) 主题。

以下各节介绍如何开始使用 AWS SAM Sync。

## 先决条件
<a name="w7aac13c40c11b9"></a>

在使用 AWS SAM Sync 之前，必须满足以下先决条件：
+ 拥有正常运行的 AWS SAM 应用程序。有关创建 AWS SAM 应用程序的更多信息，请参阅本用户指南中的 [Working with AWS SAM](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/key-tasks.html#key-tasks-sam-create) 主题。
+ 已安装 AWS SAM CLI 的版本 1.78.0 或更高版本。有关安装 AWS SAM CLI 的更多信息，请参阅《AWS Serverless Application Model 用户指南》**中的 [Installing the AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) 主题。
+ 应用程序正在开发环境中运行。

**注意**  
要同步和部署包含具有任何非默认属性的 AWS Lambda 函数的无服务器应用程序，必须在部署之前在与 AWS Lambda 函数关联的 AWS SAM 模板文件中设置可选属性。  
有关 AWS Lambda 属性的更多信息，请参阅 GitHub 上《AWS Serverless Application Model 用户指南》**中的 [AWS::Serverless::Function](https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction) 部分。

## 入门
<a name="w7aac13c40c11c11"></a>

要开始使用 AWS SAM Sync，请完成以下过程。

**注意**  
确保 AWS 区域设置为与无服务器应用程序关联的位置。  
要了解有关从 AWS Toolkit for JetBrains 更改 AWS 区域的更多信息，请参阅本用户指南中的 [Switch between AWS Regions](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/key-tasks.html#key-tasks-switch-region) 主题。

1. 在**项目**工具窗口的无服务器应用程序项目中，打开（右键单击）`template.yaml` 文件的上下文菜单。

1. 在 `template.yaml` 上下文菜单中，选择**同步无服务器应用程序（以前称为“部署”）**，以打开**确认开发堆栈**对话框。

1. 确认您正在使用开发堆栈打开**同步无服务器应用程序**对话框。  
![\[“确认开发堆栈”对话框\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/sam-sync-dev-stack.png)

1. 完成**同步无服务器应用程序**对话框中的步骤，然后选择**同步**以开始 AWS SAM Sync 过程。要了解有关**同步无服务器应用程序**对话框的更多信息，请参阅位于下方的 [“同步无服务器应用程序”对话框](#sam-sync-serverless-app-dialog) 部分。

1. 在同步过程中，已使用部署状态更新 AWS Toolkit for JetBrains **运行窗口**。

1. 成功同步后，CloudFormation 堆栈的名称已添加到 **AWS Explorer**。

   如果同步失败，可以在 JetBrains **运行窗口**或 CloudFormation **事件日志**中找到故障排除详细信息。要了解有关查看 CloudFormation 事件日志的更多信息，请参阅本用户指南中的 [Viewing event logs for a stack](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/key-tasks.html#key-tasks-cloudformation-logs) 主题。

## “同步无服务器应用程序”对话框
<a name="sam-sync-serverless-app-dialog"></a>

**“同步无服务器应用程序”对话框**可帮助您完成 AWS SAM 同步过程。以下各节是每个不同对话框组件的描述和详细信息。

### 创建堆栈或更新堆栈
<a name="w7aac13c40c11c13b5"></a>

**必需：**要创建新的部署堆栈，请在提供的字段中输入名称，以便为无服务器应用程序部署创建和设置 CloudFormation 堆栈。

或者，要部署到现有的 CloudFormation 堆栈，请从与 AWS 账户关联的堆栈自动填充列表中选择堆栈名称。

### 模板参数
<a name="w7aac13c40c11c13b7"></a>

**可选：**填充从项目 `template.yaml` 文件中检测到的参数列表。要指定参数值，请在**值**列中提供的文本字段中输入新的参数值。

### S3Bucket
<a name="w7aac13c40c11c13b9"></a>

**必需：**要选择现有 Amazon Simple Storage Service（Amazon S3）存储桶来存储 CloudFormation 模板，请从列表中选择。

要创建并使用新的 Amazon S3 存储桶进行存储，请选择**创建**并按照提示操作。

### ECR 存储库
<a name="w7aac13c40c11c13c11"></a>

**必需：仅在使用映像包类型时可见：**选择现有 Amazon Elastic Container Registry（Amazon ECR）存储库 URI，用于部署无服务器应用程序。

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

### CloudFormation 功能
<a name="w7aac13c40c11c13c13"></a>

**必需：**选择创建堆栈时允许 CloudFormation 使用的功能。

### 标签
<a name="w7aac13c40c11c13c15"></a>

**可选：**在提供的文本字段中输入首选标签以标记参数。

### 在容器内构建函数
<a name="w7aac13c40c11c13c17"></a>

**可选，Docker 为必需：**选择此选项可在部署之前在本地 Docker 容器内构建无服务器应用程序函数。如果函数依赖于具有本地编译的依赖项或程序的包，此选项会很有用。

有关更多信息，请参阅《AWS Serverless Application Model 开发人员指南》**中的 [Building applications](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-using-build.html) 主题。

# 使用 AWS Toolkit for JetBrains 更改（更新）AWS 无服务器应用程序设置
<a name="sam-update"></a>

您必须先部署要更改的 AWS 无服务器应用程序（如果尚未部署）。
**注意**  
要部署包含 AWS Lambda 函数的无服务器应用程序，并将该函数与任何非默认或可选属性一起部署，您必须先在函数的相应 AWS SAM 模板文件中（例如，在项目中名为 `template.yaml` 的文件中）设置这些属性。有关可用属性的列表，请参阅 GitHub 上 [awslabs/serverless-application-model](https://github.com/awslabs/serverless-application-model/) 存储库中的 [AWS::Serverless::Function](https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction)。

1. 在 **Project (项目)** 工具窗口已打开并显示包含无服务器应用程序文件的项目的情况下，请打开项目的 `template.yaml` 文件。更改文件的内容以反映新设置，然后保存并关闭文件。

1. 如果您需要切换到其他 AWS 区域（无服务器应用程序将部署到该区域），请立即执行此操作。

1. 右键单击项目的 `template.yaml` 文件，然后选择 **Deploy Serverless Application (部署无服务器应用程序)**。  
![\[选择“Deploy Serverless Application (部署无服务器应用程序)”命令\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/deploy-serverless-application.png)

1. 完成 [Deploy Serverless Application (部署无服务器应用程序)](deploy-serverless-application-dialog.md) 对话框中的操作，然后选择 **Deploy (部署)**。AWS Toolkit for JetBrains 更新部署的相应 AWS CloudFormation 堆栈。

   如果部署失败，您可以通过查看堆栈的事件日志来尝试确定原因。

# 使用 AWS Toolkit for JetBrains 删除 AWS 无服务器应用程序
<a name="sam-delete"></a>

在删除 AWS 无服务器应用程序之前，您必须先部署它。

1. 打开 AWS Explorer（如果尚未打开）。如果您需要切换到其他 AWS 区域（该区域包含无服务器应用程序），请立即执行此操作。

1. 展开 **CloudFormation**。

1. 右键单击 AWS CloudFormation 堆栈（包含要删除的无服务器应用程序）的名称，然后选择 **Delete CloudFormation Stack (删除 CloudFormation 堆栈)**。  
![\[选择删除从 AWS Explorer 启动的 AWS 无服务器应用程序的 AWS CloudFormation 堆栈\]](http://docs.aws.amazon.com/zh_cn/toolkit-for-jetbrains/latest/userguide/images/sam-delete.png)

1. 输入堆栈的名称来确认删除，然后选择 **OK (确定)**。如果堆栈删除成功，AWS Toolkit for JetBrains 将从 **AWS Explorer** 中的 **CloudFormation** 列表中删除堆栈名称。如果堆栈删除失败，您可以通过查看堆栈的事件日志来尝试确定原因。