

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 入門 AWS SAM
<a name="serverless-getting-started"></a>

透過檢閱並完成本節中的主題 AWS SAM 來開始使用 。 [AWS SAM 先決條件](prerequisites.md)提供設定 AWS 帳戶、建立 IAM 使用者、建立金鑰存取，以及安裝和設定 的詳細說明 AWS SAM CLI。完成先決條件後，您可以選擇開發方法：
+ [安裝 AWS SAM CLI](install-sam-cli.md)，您可以在 Linux、Windows 和 macOS 作業系統上執行此操作。
+ [使用 VS Code Toolkit 開始使用 AWS SAM](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/sam-get-started.html)，透過整合偵錯和測試功能獲得視覺化開發體驗。

安裝完成後，您可以選擇逐步解說 AWS SAM Hello World 教學課程。遵循本教學課程將引導您完成使用 建立基本無伺服器應用程式的程序 AWS SAM。完成教學課程後，您將準備好檢閱 中詳述的概念[如何使用 AWS Serverless Application Model (AWS SAM)](chapter-using-sam.md)。

**Topics**
+ [AWS SAM 先決條件](prerequisites.md)
+ [安裝 AWS SAM CLI](install-sam-cli.md)
+ [教學課程：使用 部署 Hello World 應用程式 AWS SAM](serverless-getting-started-hello-world.md)
+ [將 Lambda 函數轉換為 AWS SAM 應用程式](convert-lambda-to-sam.md)

# AWS SAM 先決條件
<a name="prerequisites"></a>

在安裝和使用 AWS Serverless Application Model 命令列界面 () 之前，請先完成下列先決條件AWS SAM CLI。

若要使用 AWS SAM CLI，您需要下列項目：
+  AWS 帳戶、 AWS Identity and Access Management (IAM) 登入資料和 IAM 存取金鑰對。
+ 用來設定 AWS 登入資料的 AWS Command Line Interface (AWS CLI)。

**Topics**
+ [步驟 1：註冊 AWS 帳戶](#prerequisites-sign-up)
+ [步驟 2：建立 IAM 使用者帳戶](#prerequisites-create-user)
+ [步驟 3：建立存取金鑰 ID 和私密存取金鑰](#prerequisites-create-keys)
+ [步驟 4：安裝 AWS CLI](#prerequisites-install-cli)
+ [步驟 5：使用 AWS CLI 設定 AWS 登入資料](#prerequisites-configure-credentials)
+ [步驟 6：（選用） 安裝 AWS Toolkit for VS 程式碼](#prerequisites-install-vscode)
+ [後續步驟](#prerequisites-next-steps)

## 步驟 1：註冊 AWS 帳戶
<a name="prerequisites-sign-up"></a>

如果您沒有 AWS 帳戶，請完成下列步驟來建立一個。

**註冊 AWS 帳戶**

1. 開啟 [https://portal.aws.amazon.com/billing/signup](https://portal.aws.amazon.com/billing/signup)。

1. 請遵循線上指示進行。

   部分註冊程序需接收來電或簡訊，並在電話鍵盤輸入驗證碼。

   當您註冊 時 AWS 帳戶，*AWS 帳戶根使用者*會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務，請將管理存取權指派給使用者，並且僅使用根使用者來執行[需要根使用者存取權的任務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

## 步驟 2：建立 IAM 使用者帳戶
<a name="prerequisites-create-user"></a>

若要建立管理員使用者，請選擇下列其中一個選項。


****  

| 選擇一種管理管理員的方式 | 到 | 根據 | 您也可以 | 
| --- | --- | --- | --- | 
| 在 IAM Identity Center (建議) | 使用短期憑證存取 AWS。這與安全性最佳實務一致。有關最佳實務的資訊，請參閱 *IAM 使用者指南*中的 [IAM 安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。 | 請遵循 AWS IAM Identity Center 使用者指南的[入門](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html)中的說明。 | 在 AWS Command Line Interface 使用者指南中設定 [AWS CLI 以使用 來設定 AWS IAM Identity Center](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-sso.html)程式設計存取。 | 
| 在 IAM 中 (不建議使用) | 使用長期憑證存取 AWS。 | 請遵循《IAM 使用者指南》中[建立 IAM 使用者以進行緊急存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-emergency-iam-user.html) 的指示。 | 請依照《IAM 使用者指南》中的[管理 IAM 使用者的存取金鑰](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html)設定以程式設計方式存取。 | 

## 步驟 3：建立存取金鑰 ID 和私密存取金鑰
<a name="prerequisites-create-keys"></a>

對於 CLI 存取，您需要存取金鑰 ID 和私密存取金鑰。盡可能使用臨時憑證，而不是長期存取金鑰。臨時憑證包含存取金鑰 ID、私密存取金鑰，以及指出憑證何時到期的安全符記。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用。

如果使用者想要與 AWS 外部互動，則需要程式設計存取 AWS 管理主控台。授予程式設計存取權的方式取決於正在存取的使用者類型 AWS。

若要授予使用者程式設計存取權，請選擇下列其中一個選項。


****  

| 哪個使用者需要程式設計存取權？ | 到 | 根據 | 
| --- | --- | --- | 
| IAM | （建議） 使用主控台登入資料做為臨時登入資料，以簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/prerequisites.html)  | 
|  人力資源身分 (IAM Identity Center 中管理的使用者)  | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/prerequisites.html)  | 
| IAM | 使用暫時登入資料簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs | 遵循《IAM 使用者指南》中[將臨時登入資料與 AWS 資源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)搭配使用的指示。 | 
| IAM | (不建議使用)使用長期憑證簽署對 AWS CLI、 AWS SDKs程式設計請求。 AWS APIs |  請依照您要使用的介面所提供的指示操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/prerequisites.html)  | 

## 步驟 4：安裝 AWS CLI
<a name="prerequisites-install-cli"></a>

是一種 AWS CLI 開放原始碼工具，可讓您 AWS 服務 在命令列 Shell 中使用命令與 互動。對於 AWS SAM CLI設定登入資料等活動 AWS CLI ， 需要 。若要進一步了解 AWS CLI，請參閱*AWS Command Line Interface 《 使用者指南*》中的[什麼是 AWS Command Line Interface？](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)。

若要安裝 AWS CLI，請參閱*AWS Command Line Interface 《 使用者指南*》中的[安裝或更新最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

## 步驟 5：使用 AWS CLI 設定 AWS 登入資料
<a name="prerequisites-configure-credentials"></a>

**使用 IAM Identity Center 設定登入資料**
+ 若要使用 IAM Identity Center 設定登入資料，請參閱[使用設定 sso 精靈 AWS 設定您的設定檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html#cli-configure-sso-configure)。

**使用 設定登入資料 AWS CLI**

1. 從`aws configure`命令列執行 命令。

1. 設定下列項目。選取每個連結以進一步了解：

   1. [ 存取金鑰 ID](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds)

   1. [ 私密存取金鑰](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds)

   1. [AWS 區域](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-region)

   1. [ 輸出格式](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-format)

   下列範例顯示範本值。

   ```
   $ aws configure
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-west-2
   Default output format [None]: json
   ```

會將此資訊 AWS CLI 儲存在 `credentials`和 `config`檔案中名為 的*設定檔* （設定集合） `default`中。這些檔案位於主目錄中的 `.aws` 檔案中。根據預設，當您執行未明確指定要使用之設定檔的 AWS CLI 命令時，會使用此設定檔中的資訊。如需 `credentials` 檔案的詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[組態和登入資料檔案設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

如需設定登入資料的詳細資訊，例如使用現有的組態和登入資料檔案，請參閱*AWS Command Line Interface 《 使用者指南*》中的[快速設定](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)。

## 步驟 6：（選用） 安裝 AWS Toolkit for VS 程式碼
<a name="prerequisites-install-vscode"></a>

對於偏好整合式開發環境的開發人員， AWS Toolkit for VS Code 為無伺服器開發提供了強大的功能，包括視覺化偵錯、CodeLens 整合和簡化的部署工作流程。

**VS 程式碼開發的先決條件**
+ 安裝在系統上的 Visual Studio Code (1.73.0 版或更新版本）
+ VS 程式碼的 YAML 語言支援延伸

**安裝 AWS Toolkit for VS 程式碼**

1. 開啟 Visual Studio 程式碼

1. 開啟延伸模組檢視 (Ctrl\$1Shift\$1X 或 Cmd\$1Shift\$1X)

1. 搜尋「AWS Toolkit」

1. Amazon Web Services 安裝「AWS Toolkit」延伸模組

1. Red Hat 安裝「YAML」延伸模組 (SAM 範本 CodeLens 功能需要）

**搭配 SAM 使用 VS AWS 程式碼的優點**
+ 視覺化偵錯：在本機設定中斷點並逐步完成 Lambda 函數
+ CodeLens 整合：直接從 SAM 範本建置、部署和叫用函數
+ 整合式終端機：存取 AWS SAM AWS CLI 命令而不離開編輯器
+ 範本驗證：即時驗證和 IntelliSense for SAM 範本

如需有關在 VS Code 中設定 AWS 登入資料的資訊，請參閱 AWS Toolkit for VS Code 使用者指南中的[設定登入資料](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-credentials.html)。

## 後續步驟
<a name="prerequisites-next-steps"></a>
+ 您現在可以安裝 AWS SAM CLI並開始使用 AWS SAM。若要安裝 AWS SAM CLI，請參閱 [安裝 AWS SAM CLI](install-sam-cli.md)。
+ 若要設定 Visual Studio Code 進行無伺服器開發，請參閱[設定 AWS Toolkit for VS Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setting-up.html)。

# 安裝 AWS SAM CLI
<a name="install-sam-cli"></a>

遵循 中的指示，在支援的作業系統上安裝最新版本的 AWS Serverless Application Model 命令列界面 (AWS SAM CLI)[步驟 4：安裝 AWS CLI](prerequisites.md#prerequisites-install-cli)。

如需管理目前安裝的 版本的資訊 AWS SAM CLI，包括如何升級、解除安裝或管理夜間組建，請參閱 [管理 AWS SAM CLI版本](manage-sam-cli-versions.md)。

**這是您第一次安裝 AWS SAM CLI嗎？**  
在繼續之前，請先完成上一節中的所有[先決條件](prerequisites.md)。其中包含：  
註冊 AWS 帳戶。
設定 的安全存取 AWS。
建立存取金鑰 ID 和私密存取金鑰。
安裝 AWS CLI。
設定 AWS 登入資料。

**Topics**
+ [安裝 AWS SAM CLI](#install-sam-cli-instructions)
+ [對安裝錯誤進行故障診斷](#sam-cli-troubleshoot-install)
+ [後續步驟](#install-sam-cli-next-steps)
+ [選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)

## 安裝 AWS SAM CLI
<a name="install-sam-cli-instructions"></a>

**注意**  
從 2023 年 9 月開始， AWS 將不再維護 AWS SAM CLI() 的 AWS 受管Homebrew安裝程式`aws/tap/aws-sam-cli`。如果您使用 Homebrew 安裝和管理 AWS SAM CLI，請參閱下列選項：  
若要繼續使用 Homebrew，您可以使用 社群受管安裝程式。如需詳細資訊，請參閱[使用 AWS SAM CLI管理 Homebrew](manage-sam-cli-versions.md#manage-sam-cli-versions-homebrew)。
我們建議您使用此頁面中記錄的其中一個第一方安裝方法。使用這些方法之一之前，請參閱 [從 切換 Homebrew](manage-sam-cli-versions.md#manage-sam-cli-versions-switch)。
如需其他詳細資訊，請參閱[發行版本：1.121.0](https://github.com/aws/aws-sam-cli/releases)。

 若要安裝 AWS SAM CLI，請遵循作業系統的指示。

### Linux
<a name="install-sam-cli-instructions-linux"></a>

------
#### [ x86\$164 - command line installer ]

1. 將 [AWS SAM CLI .zip 檔案](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip)下載到您選擇的目錄。

1. **（選用）** 您可以在安裝之前驗證安裝程式的完整性。如需說明，請參閱[選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)。

1. 將安裝檔案解壓縮到您選擇的目錄中。以下是使用 `sam-installation`子目錄的範例。
**注意**  
如果您的作業系統沒有內建 **unzip** 命令，請使用對等的命令。

   ```
   $ unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
   ```

1. 執行 可執行檔來安裝 AWS SAM CLI `install` 。此可執行檔位於上一個步驟中使用的目錄中。以下是使用 `sam-installation`子目錄的範例：

   ```
   $ sudo ./sam-installation/install
   ```

1. 驗證安裝。

   ```
   $ sam --version
   ```

   若要確認安裝成功，您應該會看到輸出，以最新的可用版本取代下列括號文字：

   ```
    SAM CLI, <latest version>
   ```

------
#### [ arm64 - command line installer ]

1. 將 [AWS SAM CLI .zip 檔案](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-arm64.zip)下載到您選擇的目錄。

1. **（選用）** 您可以在安裝之前驗證安裝程式的完整性。如需說明，請參閱[選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)。

1. 將安裝檔案解壓縮到您選擇的目錄中。以下是使用 `sam-installation`子目錄的範例。
**注意**  
如果您的作業系統沒有內建 **unzip** 命令，請使用對等的命令。

   ```
   $ unzip aws-sam-cli-linux-arm64.zip -d sam-installation
   ```

1. 執行 可執行檔來安裝 AWS SAM CLI `install` 。此可執行檔位於上一個步驟中使用的目錄中。以下是使用 `sam-installation`子目錄的範例：

   ```
   $ sudo ./sam-installation/install
   ```

1. 驗證安裝。

   ```
   $ sam --version
   ```

   若要確認安裝成功，您應該會看到如下所示的輸出，但會將括號文字取代為最新的 SAM CLI 版本：

   ```
    SAM CLI, <latest version>
   ```

------

### macOS
<a name="install-sam-cli-instructions-macos"></a>

#### 安裝步驟
<a name="install-sam-cli-instructions-macos-steps"></a>

使用 套件安裝程式來安裝 AWS SAM CLI。此外，套件安裝程式有兩種安裝方法供您選擇：**GUI** 和**命令列**。您可以為**所有使用者**或只為**目前的使用者**安裝 。若要為所有使用者安裝 ，需要超級使用者授權。

**注意**  
AWS SAM CLI 不支援比 MacOS 13.x 更舊的 MacOS 版本。升級至支援的 MacOS AWS SAM 版本，或使用 安裝 CLIHomebrew。

------
#### [ GUI - All users ]

**若要下載套件安裝程式並安裝 AWS SAM CLI**
**注意**  
 如果您之前透過 AWS SAM CLIHomebrew或 安裝 pip，則需要先將其解除安裝。如需說明，請參閱[解除安裝 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  將 macOS 下載`pkg`至您選擇的目錄：
   +  **對於執行 Intel 處理器的 Mac，請選擇 x86\$164** – [ aws-sam-cli-macos-x86\$164.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **對於執行 Apple 晶片的 Mac，請選擇 arm64** – [ aws-sam-cli-macos-arm64.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg) 
**注意**  
您可以選擇在安裝之前驗證安裝程式的完整性。如需說明，請參閱[選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)。

1.  執行您下載的檔案，並依照畫面上的指示繼續進行**簡介**、**讀我**檔案和**授權**步驟。

1.  針對**目的地選取**，選取**此電腦所有使用者的安裝**。

1.  針對**安裝類型**，選擇將要安裝 AWS SAM CLI的位置，然後按**安裝**。建議的預設位置為 `/usr/local/aws-sam-cli`。
**注意**  
 若要使用 **sam**命令叫用 AWS SAM CLI，安裝程式會自動在 `/usr/local/bin/sam`和 之間建立符號連結，`/usr/local/aws-sam-cli/sam`或是您選擇的安裝資料夾。

1.  AWS SAM CLI 將安裝 ，並**顯示安裝成功**訊息。按**關閉**。

**驗證成功安裝**
+  執行下列 AWS SAM CLI動作，確認 已正確安裝，且您的符號連結已設定完成：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------
#### [ GUI - Current user ]

**下載並安裝 AWS SAM CLI**
**注意**  
 如果您之前透過 AWS SAM CLIHomebrew或 安裝 pip，則需要先將其解除安裝。如需說明，請參閱[解除安裝 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  將 macOS 下載`pkg`至您選擇的目錄：
   +  **對於執行 Intel 處理器的 Mac，請選擇 x86\$164** – [ aws-sam-cli-macos-x86\$164.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **對於執行 Apple 晶片的 Mac，請選擇 arm64** – [ aws-sam-cli-macos-arm64.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg) 
**注意**  
您可以選擇在安裝之前驗證安裝程式的完整性。如需說明，請參閱[選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)。

1.  執行您下載的檔案，並依照畫面上的指示繼續進行**簡介**、**讀我**檔案和**授權**步驟。

1.  針對**目的地選取**，選取**僅為我安裝**。如果您沒有看到此選項，請前往下一個步驟。

1.  對於**安裝類型**，請執行下列動作：

   1. 選擇將要安裝 AWS SAM CLI的位置。預設位置為 `/usr/local/aws-sam-cli`。選取您擁有寫入許可的位置。若要變更安裝位置，請選取**本機**並選擇您的位置。完成後按**繼續**。

   1.  如果您未在上一個步驟中取得**僅為我選擇安裝**的選項，請選取**變更安裝位置** > **僅為我安裝**，然後按**繼續**。

   1.  按下**安裝**。

1.  AWS SAM CLI 將安裝 ，並**顯示安裝成功**訊息。按**關閉**。

**建立符號連結**
+  若要使用 AWS SAM CLI**sam**命令叫用 ，您必須在程式與 之間 AWS SAM CLI手動建立符號連結`$PATH`。修改並執行下列命令來建立您的符號連結：

  ```
  $ sudo ln -s /path-to/aws-sam-cli/sam /path-to-symlink-directory/sam
  ```
  +  *sudo* – 如果您的使用者具有 的寫入許可`$PATH`，**sudo**則不需要 。否則，**sudo** 是必要的。
  +  *path-to* – 您安裝 AWS SAM CLI程式的路徑。例如 `/Users/myUser/Desktop`。
  +  *path-to-symlink-directory* – 您的`$PATH`環境變數。預設位置為 `/usr/local/bin`。

**驗證成功安裝**
+  執行下列 AWS SAM CLI動作，確認 已正確安裝，且您的符號連結已設定完成：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------
#### [ Command line - All users ]

**下載並安裝 AWS SAM CLI**
**注意**  
 如果您之前透過 AWS SAM CLIHomebrew或 安裝 pip，則需要先將其解除安裝。如需說明，請參閱[解除安裝 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  將 macOS 下載`pkg`至您選擇的目錄：
   +  **對於執行 Intel 處理器的 Mac，請選擇 x86\$164** – [ aws-sam-cli-macos-x86\$164.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **對於執行 Apple 晶片的 Mac，請選擇 arm64** – [ aws-sam-cli-macos-arm64.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg) 
**注意**  
您可以選擇在安裝之前驗證安裝程式的完整性。如需說明，請參閱[選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)。

1.  修改並執行安裝指令碼：

   ```
   $ sudo installer -pkg path-to-pkg-installer/name-of-pkg-installer -target /
   installer: Package name is AWS SAM CLI
   installer: Upgrading at base path /
   installer: The upgrade was successful.
   ```
**注意**  
 若要使用 AWS SAM CLI**sam**命令叫用 ，安裝程式會自動在 `/usr/local/bin/sam`和 之間建立符號連結`/usr/local/aws-sam-cli/sam`。

**驗證成功安裝**
+  執行下列 AWS SAM CLI動作，確認 已正確安裝，且您的符號連結已設定完成：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------
#### [ Command line - Current user ]

**下載並安裝 AWS SAM CLI**
**注意**  
 如果您之前透過 AWS SAM CLIHomebrew或 安裝 pip，則需要先將其解除安裝。如需說明，請參閱[解除安裝 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  將 macOS 下載`pkg`至您選擇的目錄：
   +  **對於執行 Intel 處理器的 Mac，請選擇 x86\$164** – [ aws-sam-cli-macos-x86\$164.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **對於執行 Apple 晶片的 Mac，請選擇 arm64** – [ aws-sam-cli-macos-arm64.pkg](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg) 
**注意**  
您可以選擇在安裝之前驗證安裝程式的完整性。如需說明，請參閱[選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)。

1.  判斷您有寫入許可的安裝目錄。然後，使用 範本建立 `xml` 檔案並加以修改，以反映您的安裝目錄。目錄必須已存在。

    例如，如果您將 *path-to-my-directory* 取代為 `/Users/myUser/Desktop`，則會在該處安裝`aws-sam-cli`程式資料夾。

   ```
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
     <array>
       <dict>
         <key>choiceAttribute</key>
         <string>customLocation</string>
         <key>attributeSetting</key>
         <string>path-to-my-directory</string>
         <key>choiceIdentifier</key>
         <string>default</string>
       </dict>
     </array>
   </plist>
   ```

1.  執行下列動作來儲存`xml`檔案並確認其有效：

   ```
   $ installer -pkg path-to-pkg-installer \
   -target CurrentUserHomeDirectory \
   -showChoicesAfterApplyingChangesXML path-to-your-xml-file
   ```

    輸出應會顯示將套用至程式的 AWS SAM CLI偏好設定。

1.  執行下列動作來安裝 AWS SAM CLI：

   ```
   $ installer -pkg path-to-pkg-installer \
   -target CurrentUserHomeDirectory \
   -applyChoiceChangesXML path-to-your-xml-file
   
   # Example output
   installer: Package name is AWS SAM CLI
   installer: choices changes file 'path-to-your-xml-file' applied
   installer: Upgrading at base path base-path-of-xml-file
   installer: The upgrade was successful.
   ```

**建立符號連結**
+  若要使用 AWS SAM CLI**sam**命令叫用 ，您必須在程式與 之間 AWS SAM CLI手動建立符號連結`$PATH`。修改並執行下列命令來建立您的符號連結：

  ```
  $ sudo ln -s /path-to/aws-sam-cli/sam /path-to-symlink-directory/sam
  ```
  +  *sudo* – 如果您的使用者具有 的寫入許可`$PATH`，**sudo**則不需要 。否則，**sudo** 是必要的。
  +  *path-to* – 您安裝 AWS SAM CLI程式的路徑。例如 `/Users/myUser/Desktop`。
  +  *path-to-symlink-directory* – 您的`$PATH`環境變數。預設位置為 `/usr/local/bin`。

**驗證成功安裝**
+  執行下列 AWS SAM CLI動作，確認 已正確安裝，且您的符號連結已設定完成：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------

### Windows
<a name="install-sam-cli-instructions-windows"></a>

Windows Installer (MSI) 檔案是 Windows 作業系統的套件安裝程式檔案。

請依照下列步驟，使用 MSI 檔案安裝 AWS SAM CLI。

1. 下載 AWS SAM CLI [64 位元](https://github.com/aws/aws-sam-cli/releases/latest/download/AWS_SAM_CLI_64_PY3.msi)。

1. **（選用）** 您可以在安裝之前驗證安裝程式的完整性。如需說明，請參閱[選用：驗證安裝程式的 AWS SAM CLI完整性](reference-sam-cli-install-verify.md)。

1. 驗證安裝。

   完成安裝後，請開啟新的命令提示或 PowerShell 提示來驗證它。您應該能夠`sam`從命令列叫用 。

   ```
   sam --version
   ```

   成功安裝 後 AWS SAM CLI，您應該會看到如下所示的輸出：

   ```
   SAM CLI, <latest version>
   ```

1. 啟用長路徑 （僅限 Windows 10 和更新版本）。
**重要**  
 AWS SAM CLI 可能會與超過 Windows 路徑上限的檔案路徑互動。由於 Windows 10 **MAX\$1PATH**限制`sam init`，這可能會導致執行時發生錯誤。若要解決此問題，必須設定新的長路徑行為。

   若要啟用長路徑，請參閱 *Microsoft* [Windows 應用程式開發文件中的在 Windows 10 版本 1607 和更新版本中啟用長路徑](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell#enable-long-paths-in-windows-10-version-1607-and-later)。

1. 安裝 Git。

   若要使用 `sam init`命令下載範例應用程式，您還必須安裝 Git。如需說明，請參閱[安裝 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

## 對安裝錯誤進行故障診斷
<a name="sam-cli-troubleshoot-install"></a>

### Linux
<a name="sam-cli-troubleshoot-install-linux"></a>

#### Docker 錯誤：「無法連線至 Docker 協助程式。是否在此主機上執行 docker 協助程式？」
<a name="serverless-sam-cli-install-linux-troubleshooting-docker-deamon"></a>

在某些情況下，若要提供 `ec2-user`存取 Docker 協助程式的許可，您可能需要重新啟動執行個體。如果您收到此錯誤，請嘗試重新啟動執行個體。

#### Shell 錯誤：「找不到命令」
<a name="serverless-sam-cli-install-linux-troubleshooting-sam-cli-not-found"></a>

如果您收到此錯誤，您的 shell 就無法在 AWS SAM CLI 路徑中找到可執行檔。驗證安裝 AWS SAM CLI可執行檔的目錄位置，然後驗證目錄是否位於您的路徑上。

#### AWS SAM CLI 錯誤："/lib64/libc.so.6：找不到版本 `GLIBC\$12.14' （需要 /usr/local/aws-sam-cli/dist/libz.so.1)"
<a name="serverless-sam-cli-install-linux-troubleshooting-sam-cli-missing-lib"></a>

如果您收到此錯誤，表示您使用的是不支援的 Linux 版本，而且內建的 glibc 版本已過期。請嘗試下列其中一項：
+ 將您的 Linux 主機升級至 CentOS、Fedora、Ubuntu 或 Amazon Linux 2 最近發行版本的 64 位元版本。
+ 請遵循 的指示[安裝 AWS SAM CLI](#install-sam-cli)。

### macOS
<a name="sam-cli-troubleshoot-install-macos"></a>

#### 安裝失敗
<a name="sam-cli-troubleshoot-install-macos-install-failed"></a>

![\[安裝程式的影像 AWS SAM CLI，顯示安裝失敗訊息\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/images/sam-cli-troubleshoot-install-macos-install-failed.jpg)


 如果您要為使用者安裝 AWS SAM CLI，並選取您沒有寫入許可的安裝目錄，則可能會發生此錯誤。請嘗試下列其中一項：

1.  選取您具有寫入許可的不同安裝目錄。

1.  刪除安裝程式。然後，下載並再次執行。

## 後續步驟
<a name="install-sam-cli-next-steps"></a>

若要進一步了解 AWS SAM CLI和 以開始建置您自己的無伺服器應用程式，請參閱以下內容：
+ [教學課程：使用 部署 Hello World 應用程式 AWS SAM](serverless-getting-started-hello-world.md) – Step-by-step說明。
+ [完成 AWS SAM 研討會](https://catalog.workshops.aws/complete-aws-sam/en-US) – 旨在教導您許多 AWS SAM 提供的主要功能的研討會。
+ [AWS SAM 範例應用程式和模式](https://serverlessland.com/patterns?framework=AWS+SAM) – 社群作者的應用程式和模式範例，您可以進一步實驗。

# 選用：驗證安裝程式的 AWS SAM CLI完整性
<a name="reference-sam-cli-install-verify"></a>

使用套件安裝程式安裝 AWS Serverless Application Model 命令列界面 (AWS SAM CLI) 時，您可以在安裝之前驗證其完整性。這是選用但強烈建議的步驟。

您可用的兩個驗證選項是：
+ 驗證套件安裝程式簽章檔案。
+ 驗證套件安裝程式雜湊值。

適用於您的平台時，建議您驗證簽章檔案選項。此選項提供額外的安全層，因為金鑰值會在此處發佈，並與儲存GitHub庫分開管理。

**Topics**
+ [驗證安裝程式簽章檔案](#reference-sam-cli-install-verify-signature)
+ [驗證雜湊值](#reference-sam-cli-install-verify-hash)

## 驗證安裝程式簽章檔案
<a name="reference-sam-cli-install-verify-signature"></a>

### Linux
<a name="reference-sam-cli-install-verify-signature-linux"></a>

#### arm64 - 命令列安裝程式
<a name="reference-sam-cli-install-verify-signature-linux-arm64"></a>

AWS SAM 使用 [GnuPG](https://www.gnupg.org/) 簽署 AWS SAM CLI .zip 安裝程式。驗證會在下列步驟中執行：

1. 使用主要公有金鑰來驗證簽署者公有金鑰。

1. 使用簽署者公有金鑰來驗證 AWS SAM CLI套件安裝程式。

**驗證簽署者公有金鑰的完整性**

1. 複製主要公有金鑰，並將其儲存為 `.txt` 檔案到您的本機電腦。例如 *`primary-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   mQINBGRuSzMBEADsqiwOy78w7F4+sshaMFRIwRGNRm94p5Qey2KMZBxekFtoryVD
   D9jEOnvupx4tvhfBHz5EcUHCEOdl4MTqdBy6vVAshozgxVb9RE8JpECn5lw7XC69
   4Y7Gy1TKKQMEWtDXElkGxIFdUWvWjSnPlzfnoXwQYGeE93CUS3h5dImP22Yk1Ct6
   eGGhlcbg1X4L8EpFMj7GvcsU8f7ziVI/PyC1Xwy39Q8/I67ip5eU5ddxO/xHqrbL
   YC7+8pJPbRMej2twT2LrcpWWYAbprMtRoa6WfE0/thoo3xhHpIMHdPfAA86ZNGIN
   kRLjGUg7jnPTRW4Oin3pCc8nT4Tfc1QERkHm641gTC/jUvpmQsM6h/FUVP2i5iE/
   JHpJcMuL2Mg6zDo3x+3gTCf+Wqz3rZzxB+wQT3yryZs6efcQy7nROiRxYBxCSXX0
   2cNYzsYLb/bYaW8yqWIHD5IqKhw269gp2E5Khs60zgS3CorMb5/xHgXjUCVgcu8a
   a8ncdf9fjl3WS5p0ohetPbO2ZjWv+MaqrZOmUIgKbA4RpWZ/fU97P5BW9ylwmIDB
   sWy0cMxg8MlvSdLytPieogaM0qMg3u5qXRGBr6Wmevkty0qgnmpGGc5zPiUbtOE8
   CnFFqyxBpj5IOnG0KZGVihvn+iRxrv6GO7WWO92+Dc6m94U0EEiBR7QiOwARAQAB
   tDRBV1MgU0FNIENMSSBQcmltYXJ5IDxhd3Mtc2FtLWNsaS1wcmltYXJ5QGFtYXpv
   bi5jb20+iQI/BBMBCQApBQJkbkszAhsvBQkHhM4ABwsJCAcDAgEGFQgCCQoLBBYC
   AwECHgECF4AACgkQQv1fenOtiFqTuhAAzi5+ju5UVOWqHKevOJSO08T4QB8HcqAE
   SVO3mY6/j29knkcL8ubZP/DbpV7QpHPI2PB5qSXsiDTP3IYPbeY78zHSDjljaIK3
   njJLMScFeGPyfPpwMsuY4nzrRIgAtXShPA8N/k4ZJcafnpNqKj7QnPxiC1KaIQWm
   pOtvb8msUF3/s0UTa5Ys/lNRhVC0eGg32ogXGdojZA2kHZWdm9udLo4CDrDcrQT7
   NtDcJASapXSQL63XfAS3snEc4e1941YxcjfYZ33rel8K9juyDZfi1slWR/L3AviI
   QFIaqSHzyOtP1oinUkoVwL8ThevKD3Ag9CZflZLzNCV7yqlF8RlhEZ4zcE/3s9El
   WzCFsozb5HfE1AZonmrDh3SyOEIBMcS6vG5dWnvJrAuSYv2rX38++K5Pr/MIAfOX
   DOI1rtA+XDsHNv9lSwSy0lt+iClawZANO9IXCiN1rOYcVQlwzDFwCNWDgkwdOqS0
   gOA2f8NF9lE5nBbeEuYquoOl1Vy8+ICbgOFs9LoWZlnVh7/RyY6ssowiU9vGUnHI
   L8f9jqRspIz/Fm3JD86ntZxLVGkeZUz62FqErdohYfkFIVcv7GONTEyrz5HLlnpv
   FJ0MR0HjrMrZrnOVZnwBKhpbLocTsH+3t5It4ReYEX0f1DIOL/KRwPvjMvBVkXY5
   hblRVDQoOWc=
   =d9oG
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 將主要公有金鑰匯入至 keyring。

   ```
   $ gpg --import primary-public-key.txt
   							
   gpg: directory `/home/.../.gnupg' created
   gpg: new configuration file `/home/.../.gnupg/gpg.conf' created
   gpg: WARNING: options in `/home/.../.gnupg/gpg.conf' are not yet active during this run
   gpg: keyring `/home/.../.gnupg/secring.gpg' created
   gpg: keyring `/home/.../.gnupg/pubring.gpg' created
   gpg: /home/.../.gnupg/trustdb.gpg: trustdb created
   gpg: key 73AD885A: public key "AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```

1. 複製簽署者公有金鑰並將其儲存到本機電腦做為`.txt`檔案。例如 *`signer-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   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
   LtZnq+n4SfeNbZjD2FQWZR4CrA==
   =lHfs
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 將簽署者公有金鑰匯入至 keyring。

   ```
   $ gpg --import signer-public-key.txt
   							
   gpg: key 4094ABB1BEDFDAB4: public key "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   gpg: no ultimately trusted keys found
   ```

   請記下輸出的索引鍵值。例如 *`4094ABB1BEDFDAB4`*。

1. 使用金鑰值來取得和驗證簽署者公有金鑰指紋。

   ```
   $ gpg --fingerprint 4094ABB1BEDFDAB4
   							
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   ```

   指紋應符合下列項目：

   ```
   EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```

   如果指紋字串不相符，請勿使用 AWS SAM CLI安裝程式。在 *aws-sam-cli GitHub 儲存庫*中[建立問題](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)，向 AWS SAM 團隊呈報。

1. 驗證簽署者公有金鑰的簽章：

   ```
   $ gpg --check-sigs 4094ABB1BEDFDAB4
   						  
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF463E86CA31933BB688CC1A4094ABB1BEDFDAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   sig!3        4094ABB1BEDFDAB4 2025-05-19  [self-signature]
   sig!         42FD5F7A73AD885A 2025-05-19 AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>
   ```

   如果您看到 `1 signature not checked due to a missing key`，請重複上述步驟，將主要和簽署者公有金鑰匯入至 keyring。

   您應該會看到列出的主要公有金鑰和簽署者公有金鑰的金鑰值。

現在您已驗證簽署者公有金鑰的完整性，您可以使用簽署者公有金鑰來驗證 AWS SAM CLI套件安裝程式。

**驗證套件安裝程式的 AWS SAM CLI完整性**

1. **取得 AWS SAM CLI套件簽章檔案** – 使用下列命令下載套件安裝程式的 AWS SAM CLI簽章檔案：

   ```
   $ wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-arm64.zip.sig
   ```

1. **驗證簽章檔案** – 將下載的 `.sig`和 `.zip` 檔案做為參數傳遞至 `gpg`命令。以下是範例：

   ```
   $ gpg --verify aws-sam-cli-linux-arm64.zip.sig aws-sam-cli-linux-arm64.zip
   ```

   輸出格式應類似以下內容：

   ```
   gpg: Signature made Mon 19 May 2025 01:21:57 AM UTC using RSA key ID 4094ABB1BEDFDAB4
   gpg: Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```
   + 您可以忽略`WARNING: This key is not certified with a trusted signature!`訊息。這是因為您的個人 PGP 金鑰 （如果有的話） 與 AWS SAM CLI PGP 金鑰之間沒有信任鏈。如需詳細資訊，請參閱[信任 Web](https://en.wikipedia.org/wiki/Web_of_trust)。
   + 如果輸出包含片語 `BAD signature`，請檢查您是否正確執行程序。如果您繼續取得此回應，請在 *aws-sam-cli GitHub 儲存庫*中[建立問題](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)，並避免使用下載的檔案，以向 AWS SAM 團隊呈報。

   `Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"` 訊息表示簽章已經過驗證，您可以繼續進行安裝。

#### x86\$164 - 命令列安裝程式
<a name="reference-sam-cli-install-verify-signature-linux-x8664"></a>

AWS SAM 使用 [GnuPG](https://www.gnupg.org/) 簽署 AWS SAM CLI .zip 安裝程式。驗證會在下列步驟中執行：

1. 使用主要公有金鑰來驗證簽署者公有金鑰。

1. 使用簽署者公有金鑰來驗證 AWS SAM CLI套件安裝程式。

**驗證簽署者公有金鑰的完整性**

1. 複製主要公有金鑰，並將其儲存為 `.txt` 檔案到您的本機電腦。例如 *`primary-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   mQINBGRuSzMBEADsqiwOy78w7F4+sshaMFRIwRGNRm94p5Qey2KMZBxekFtoryVD
   D9jEOnvupx4tvhfBHz5EcUHCEOdl4MTqdBy6vVAshozgxVb9RE8JpECn5lw7XC69
   4Y7Gy1TKKQMEWtDXElkGxIFdUWvWjSnPlzfnoXwQYGeE93CUS3h5dImP22Yk1Ct6
   eGGhlcbg1X4L8EpFMj7GvcsU8f7ziVI/PyC1Xwy39Q8/I67ip5eU5ddxO/xHqrbL
   YC7+8pJPbRMej2twT2LrcpWWYAbprMtRoa6WfE0/thoo3xhHpIMHdPfAA86ZNGIN
   kRLjGUg7jnPTRW4Oin3pCc8nT4Tfc1QERkHm641gTC/jUvpmQsM6h/FUVP2i5iE/
   JHpJcMuL2Mg6zDo3x+3gTCf+Wqz3rZzxB+wQT3yryZs6efcQy7nROiRxYBxCSXX0
   2cNYzsYLb/bYaW8yqWIHD5IqKhw269gp2E5Khs60zgS3CorMb5/xHgXjUCVgcu8a
   a8ncdf9fjl3WS5p0ohetPbO2ZjWv+MaqrZOmUIgKbA4RpWZ/fU97P5BW9ylwmIDB
   sWy0cMxg8MlvSdLytPieogaM0qMg3u5qXRGBr6Wmevkty0qgnmpGGc5zPiUbtOE8
   CnFFqyxBpj5IOnG0KZGVihvn+iRxrv6GO7WWO92+Dc6m94U0EEiBR7QiOwARAQAB
   tDRBV1MgU0FNIENMSSBQcmltYXJ5IDxhd3Mtc2FtLWNsaS1wcmltYXJ5QGFtYXpv
   bi5jb20+iQI/BBMBCQApBQJkbkszAhsvBQkHhM4ABwsJCAcDAgEGFQgCCQoLBBYC
   AwECHgECF4AACgkQQv1fenOtiFqTuhAAzi5+ju5UVOWqHKevOJSO08T4QB8HcqAE
   SVO3mY6/j29knkcL8ubZP/DbpV7QpHPI2PB5qSXsiDTP3IYPbeY78zHSDjljaIK3
   njJLMScFeGPyfPpwMsuY4nzrRIgAtXShPA8N/k4ZJcafnpNqKj7QnPxiC1KaIQWm
   pOtvb8msUF3/s0UTa5Ys/lNRhVC0eGg32ogXGdojZA2kHZWdm9udLo4CDrDcrQT7
   NtDcJASapXSQL63XfAS3snEc4e1941YxcjfYZ33rel8K9juyDZfi1slWR/L3AviI
   QFIaqSHzyOtP1oinUkoVwL8ThevKD3Ag9CZflZLzNCV7yqlF8RlhEZ4zcE/3s9El
   WzCFsozb5HfE1AZonmrDh3SyOEIBMcS6vG5dWnvJrAuSYv2rX38++K5Pr/MIAfOX
   DOI1rtA+XDsHNv9lSwSy0lt+iClawZANO9IXCiN1rOYcVQlwzDFwCNWDgkwdOqS0
   gOA2f8NF9lE5nBbeEuYquoOl1Vy8+ICbgOFs9LoWZlnVh7/RyY6ssowiU9vGUnHI
   L8f9jqRspIz/Fm3JD86ntZxLVGkeZUz62FqErdohYfkFIVcv7GONTEyrz5HLlnpv
   FJ0MR0HjrMrZrnOVZnwBKhpbLocTsH+3t5It4ReYEX0f1DIOL/KRwPvjMvBVkXY5
   hblRVDQoOWc=
   =d9oG
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 將主要公有金鑰匯入至 keyring。

   ```
   $ gpg --import primary-public-key.txt
   							
   gpg: directory `/home/.../.gnupg' created
   gpg: new configuration file `/home/.../.gnupg/gpg.conf' created
   gpg: WARNING: options in `/home/.../.gnupg/gpg.conf' are not yet active during this run
   gpg: keyring `/home/.../.gnupg/secring.gpg' created
   gpg: keyring `/home/.../.gnupg/pubring.gpg' created
   gpg: /home/.../.gnupg/trustdb.gpg: trustdb created
   gpg: key 73AD885A: public key "AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```

1. 複製簽署者公有金鑰並將其儲存到本機電腦做為`.txt`檔案。例如 *`signer-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   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
   LtZnq+n4SfeNbZjD2FQWZR4CrA==
   =lHfs
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 將簽署者公有金鑰匯入至 keyring。

   ```
   $ gpg --import signer-public-key.txt
   							
   gpg: key 4094ABB1BEDFDAB4: public key "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   gpg: no ultimately trusted keys found
   ```

   請記下輸出的索引鍵值。例如 *`4094ABB1BEDFDAB4`*。

1. 使用金鑰值來取得和驗證簽署者公有金鑰指紋。

   ```
   $ gpg --fingerprint 4094ABB1BEDFDAB4
   						  
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   ```

   指紋應符合下列項目：

   ```
   EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```

   如果指紋字串不相符，請勿使用 AWS SAM CLI安裝程式。在 *aws-sam-cli GitHub 儲存庫*中[建立問題](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)，向 AWS SAM 團隊呈報。

1. 驗證簽署者公有金鑰的簽章：

   ```
   $ gpg --check-sigs 4094ABB1BEDFDAB4
   							
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF463E86CA31933BB688CC1A4094ABB1BEDFDAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   sig!3        4094ABB1BEDFDAB4 2025-05-19  [self-signature]
   sig!         42FD5F7A73AD885A 2025-05-19 AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>
   ```

   如果您看到 `1 signature not checked due to a missing key`，請重複上述步驟，將主要和簽署者公有金鑰匯入至 keyring。

   您應該會看到列出的主要公有金鑰和簽署者公有金鑰的金鑰值。

現在您已驗證簽署者公有金鑰的完整性，您可以使用簽署者公有金鑰來驗證 AWS SAM CLI套件安裝程式。

**驗證套件安裝程式的 AWS SAM CLI完整性**

1. **取得 AWS SAM CLI套件簽章檔案** – 使用下列命令下載套件安裝程式的 AWS SAM CLI簽章檔案：

   ```
   $ wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip.sig
   ```

1. **驗證簽章檔案** – 將下載的 `.sig`和 `.zip` 檔案做為參數傳遞至 `gpg`命令。以下是範例：

   ```
   $ gpg --verify aws-sam-cli-linux-x86_64.zip.sig aws-sam-cli-linux-x86_64.zip
   ```

   輸出格式應類似以下內容：

   ```
   gpg: Signature made Mon 19 May 2025 01:21:57 AM UTC using RSA key ID 4094ABB1BEDFDAB4
   gpg: Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```
   + 您可以忽略`WARNING: This key is not certified with a trusted signature!`訊息。這是因為您的個人 PGP 金鑰 （如果有的話） 與 AWS SAM CLI PGP 金鑰之間沒有信任鏈。如需詳細資訊，請參閱[信任 Web](https://en.wikipedia.org/wiki/Web_of_trust)。
   + 如果輸出包含片語 `BAD signature`，請檢查您是否正確執行程序。如果您繼續取得此回應，請在 *aws-sam-cli GitHub 儲存庫*中[建立問題](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)，並避免使用下載的檔案，以向 AWS SAM 團隊呈報。

   `Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"` 訊息表示簽章已經過驗證，您可以繼續進行安裝。

### macOS
<a name="reference-sam-cli-install-verify-signature-macos"></a>

#### GUI 和命令列安裝程式
<a name="reference-sam-cli-install-verify-signature-macos-installer"></a>

您可以使用 `pkgutil`工具或手動驗證套件安裝程式簽章檔案的 AWS SAM CLI完整性。

**使用 pkgutil 驗證**

1. 執行下列命令，提供本機電腦上下載安裝程式的路徑：

   ```
   $ pkgutil --check-signature /path/to/aws-sam-cli-installer.pkg
   ```

   以下是範例：

   ```
   $ pkgutil --check-signature /Users/user/Downloads/aws-sam-cli-macos-arm64.pkg
   ```

1. 從輸出中，找到適用於 **SHA256 fingerprint**的 **Developer ID Installer: AMZN Mobile LLC**。以下是範例：

   ```
   Package "aws-sam-cli-macos-arm64.pkg":
      Status: signed by a developer certificate issued by Apple for distribution
      Notarization: trusted by the Apple notary service
      Signed with a trusted timestamp on: 2026-01-28 07:39:16 +0000
      Certificate Chain:
       1. Developer ID Installer: AMZN Mobile LLC (94KV3E626L)
          Expires: 2030-09-26 00:18:06 +0000
          SHA256 Fingerprint:
              5C 45 BE 63 FD 52 10 07 2D 66 56 77 5C A9 FF 25 91 6D 3F 01 F7 0E
              9A 8A 05 F6 2D 62 B2 88 8D A9
          ------------------------------------------------------------------------
       2. Developer ID Certification Authority
          Expires: 2031-09-17 00:00:00 +0000
          SHA256 Fingerprint:
              F1 6C D3 C5 4C 7F 83 CE A4 BF 1A 3E 6A 08 19 C8 AA A8 E4 A1 52 8F
              D1 44 71 5F 35 06 43 D2 DF 3A
          ------------------------------------------------------------------------
       3. Apple Root CA
          Expires: 2035-02-09 21:40:36 +0000
          SHA256 Fingerprint:
              B0 B1 73 0E CB C7 FF 45 05 14 2C 49 F1 29 5E 6E DA 6B CA ED 7E 2C
              68 C5 BE 91 B5 A1 10 01 F0 24
   ```

1. **Developer ID Installer: AMZN Mobile LLC SHA256 fingerprint** 應該符合下列值：

   ```
   5C 45 BE 63 FD 52 10 07 2D 66 56 77 5C A9 FF 25 91 6D 3F 01 F7 0E 9A 8A 05 F6 2D 62 B2 88 8D A9
   ```

   如果指紋字串不相符，請勿使用 AWS SAM CLI安裝程式。在 *aws-sam-cli GitHub 儲存庫*中[建立問題](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)，向 AWS SAM 團隊呈報。如果指紋字串確實相符，您可以使用套件安裝程式繼續使用 。

**手動驗證套件安裝程式**
+ 請參閱 [Apple 支援網站上的如何驗證手動下載 Apple 軟體更新的真實性](https://support.apple.com/en-us/HT202369)。 **

### Windows
<a name="reference-sam-cli-install-verify-signature-windows"></a>

 AWS SAM CLI 安裝程式會封裝為Windows作業系統MSI的檔案。

**驗證安裝程式的完整性**

1. 在安裝程式上按一下滑鼠右鍵，然後開啟**屬性**視窗。

1. 選擇 **數位簽章** 索引標籤。

1. 從**簽章清單中**，選擇 **Amazon Web Services， Inc.**，然後選擇**詳細資訊**。

1. 選擇 **General (一般)** 索引標籤 (如果尚未選取)，然後選擇 **View Certificate (檢視憑證)**。

1. 選擇**詳細資訊**索引標籤，如果尚未選取，請在**顯示**下拉式清單中選擇**全部**。

1. 向下捲動到看見 **Thumbprint (指紋)** 欄位為止，然後選擇 **Thumbprint (指紋)**。這會在下方的視窗中顯示整個指紋值。

1. 將指紋值與下列值相符。如果值相符，請繼續進行安裝。如果沒有，請在 *aws-sam-cli GitHub 儲存庫*中[建立問題](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)，向 AWS SAM 團隊呈報。

   ```
   cd62479397f09d72a04c7399a254b0a91da53d6c
   ```

## 驗證雜湊值
<a name="reference-sam-cli-install-verify-hash"></a>

### Linux
<a name="reference-sam-cli-install-verify-hash-linux"></a>

#### x86\$164 - 命令列安裝程式
<a name="reference-sam-cli-install-verify-hash-linux-x8664"></a>

使用以下命令產生雜湊值，驗證下載的安裝程式檔案的完整性和真實性：

```
$ sha256sum aws-sam-cli-linux-x86_64.zip
```

輸出應如下所示：

```
<64-character SHA256 hash value> aws-sam-cli-linux-x86_64.zip
```

在 的[AWS SAM CLI版本備註](https://github.com/aws/aws-sam-cli/releases/latest)中，將 64 個字元的 SHA-256 雜湊值與所需 AWS SAM CLI版本的雜湊值進行比較GitHub。

### macOS
<a name="reference-sam-cli-install-verify-hash-macos"></a>

#### GUI 和命令列安裝程式
<a name="reference-sam-cli-install-verify-hash-macos-installer"></a>

 使用以下命令產生雜湊值，驗證下載安裝程式的完整性和真實性：

```
$ shasum -a 256 path-to-pkg-installer/name-of-pkg-installer

# Examples
$ shasum -a 256 ~/Downloads/aws-sam-cli-macos-arm64.pkg
$ shasum -a 256 ~/Downloads/aws-sam-cli-macos-x86_64.pkg
```

 將 64 個字元的 SHA-256 雜湊值與[AWS SAM CLI版本備註](https://github.com/aws/aws-sam-cli/releases/latest)GitHub儲存庫中的對應值進行比較。

# 教學課程：使用 部署 Hello World 應用程式 AWS SAM
<a name="serverless-getting-started-hello-world"></a>

在本教學課程中，您可以使用 AWS Serverless Application Model 命令列界面 (AWS SAM CLI) 來完成下列操作：
+ 初始化、建置和部署範例 **Hello World** 應用程式。
+ 進行本機變更並同步至 AWS CloudFormation。
+ 在開發主機上執行本機測試。
+ 從 刪除範例應用程式 AWS 雲端。

範例 **Hello World** 應用程式實作基本 API 後端。它包含下列資源：
+ **Amazon API Gateway** – 用來叫用函數的 API 端點。
+ **AWS Lambda** – 處理 HTTP API GET 請求並傳回`hello world`訊息的函數。
+ **AWS Identity and Access Management (IAM) 角色** – 為服務佈建安全互動的許可。

下圖顯示此應用程式的組件：

![\[當您將 GET 請求傳送至 API Gateway 端點時調用的 Lambda 函數圖表。\]](http://docs.aws.amazon.com/zh_tw/serverless-application-model/latest/developerguide/images/gs-01.png)


**Topics**
+ [先決條件](#serverless-getting-started-hello-world-prerequisites)
+ [步驟 1：初始化範例 Hello World 應用程式](#serverless-getting-started-hello-world-init)
+ [步驟 2：建置您的應用程式](#serverless-getting-started-hello-world-build)
+ [步驟 3：將您的應用程式部署到 AWS 雲端](#serverless-getting-started-hello-world-deploy)
+ [步驟 4：執行您的應用程式](#serverless-getting-started-hello-world-run)
+ [步驟 5：與 中的函數互動 AWS 雲端](#serverless-getting-started-hello-world-remote-invoke)
+ [步驟 6：修改您的應用程式並將其同步至 AWS 雲端](#serverless-getting-started-hello-world-sync)
+ [步驟 7：（選用） 在本機測試您的應用程式](#serverless-getting-started-hello-world-test)
+ [步驟 8：從 刪除您的應用程式 AWS 雲端](#serverless-getting-started-hello-world-delete)
+ [疑難排解](#serverless-getting-started-hello-world-troubleshoot)
+ [進一步了解](#serverless-getting-started-hello-world-learn)

## 先決條件
<a name="serverless-getting-started-hello-world-prerequisites"></a>

確認您已完成下列操作：
+ [AWS SAM 先決條件](prerequisites.md)
+ [安裝 AWS SAM CLI](install-sam-cli.md)

**注意**  
如果您偏好使用 Visual Studio Code 進行無伺服器開發，請參閱 AWS Toolkit for VS Code 使用者指南中的[建立無伺服器應用程式](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/sam-get-started.html#serverless-apps-create)，以取得使用 VS Code 界面step-by-step說明。

## 步驟 1：初始化範例 Hello World 應用程式
<a name="serverless-getting-started-hello-world-init"></a>

在此步驟中，您將使用 在 AWS SAM CLI本機電腦上建立範例 **Hello World** 應用程式專案。

**初始化範例 Hello World 應用程式**

1. 在命令列中，從您選擇的開始目錄執行下列項目：

   ```
   $ sam init
   ```
**注意**  
此命令會初始化您的無伺服器應用程式並建立專案目錄。目錄包含數個檔案和資料夾，包括 `template.yaml` 檔案，也就是您的 AWS SAM 範本。  
安裝的 Python 版本必須符合 中指定的`Runtime`屬性`template.yaml`。對於生產工作負載，我們建議使用 AWS 環境中完全支援的 Python 3.12 或更舊版本。如果 Python 版本不相符，您將會遇到建置錯誤。  
若要解決版本相容性問題：  
 在初始化期間指定相容的[執行時間](sam-cli-command-reference-sam-init.md#sam-cli-command-reference-sam-init-options-runtime)： `sam init --runtime python3.9`
初始化`template.yaml`後在 中修改 `Runtime` 屬性

1.  AWS SAM CLI 將引導您初始化新的應用程式。設定下列項目：

   1. 選取 **AWS Quick Start 範本**以選擇開始範本。

   1. 選擇 **Hello World 範例**範本並下載。

   1. 使用Python執行期和`zip`套件類型。

   1. 在本教學課程中，選擇退出 AWS X-Ray 追蹤。若要進一步了解，請參閱《 *AWS X-Ray 開發人員指南*》中的[什麼是 AWS X-Ray？](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html)。

   1. 在本教學課程中，選擇不使用 Amazon CloudWatch Application Insights 進行監控。若要進一步了解，請參閱《[Amazon CloudWatch 使用者指南》中的 Amazon CloudWatch Application Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html)。 *Amazon CloudWatch *

   1. 在本教學課程中，選擇不在您的 Lambda 函數上設定 JSON 格式的結構化記錄。

   1. 將您的應用程式命名為 **sam-app**。

   若要使用 AWS SAM CLI互動式流程：
   + 括號 (`[ ]`) 表示預設值。將您的答案保留空白以選取預設值。
   + 輸入 **`y`** 表示**是**，輸入 **`n`** 表示**否**。

   以下是`sam init`互動式流程的範例：

   ```
   $ sam init
   ...
   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 - Data processing
       3 - Hello World Example with Powertools for AWS Lambda
       4 - Multi-step workflow
       5 - Scheduled task
       6 - Standalone function
       7 - Serverless API
       8 - Infrastructure event management 
       9 - Lambda Response Streaming
      10 - GraphQLApi Hello World Example
      11 - Full Stack
      12 - Lambda EFS example
      13 - Serverless Connector Hello World Example
      14 - Multi-step workflow with Connectors
      15 - DynamoDB Example
      16 - Machine Learning
   Template: 1
   
   Use the most popular runtime and package type? (Python and zip) [y/N]: y
   
   Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: ENTER
   
   Would you like to enable monitoring using CloudWatch Application Insights?
   For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER
   					
   Would you like to set Structured Logging in JSON format on your Lambda functions?  [y/N]: ENTER
   
   Project name [sam-app]: ENTER
   ```

1. 會 AWS SAM CLI下載您的啟動範本，並在本機電腦上建立應用程式專案目錄結構。以下是輸出的範例 AWS SAM CLI：

   ```
   Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment)
   
       -----------------------
       Generating application:
       -----------------------
       Name: sam-app
       Runtime: python3.9
       Architectures: x86_64
       Dependency Manager: pip
       Application Template: hello-world
       Output Directory: .
       Configuration file: sam-app/samconfig.toml
   
       Next steps can be found in the README file at sam-app/README.md
   
   
   Commands you can use next
   =========================
   [*] Create pipeline: cd sam-app && sam pipeline init --bootstrap
   [*] Validate SAM template: cd sam-app && sam validate
   [*] Test Function in the Cloud: cd sam-app && sam sync --stack-name {stack-name} --watch
   ```

1. 從您的命令列，移至新建立的`sam-app`目錄。以下是 AWS SAM CLI建立的範例：
**注意**  
如果`tree`命令未自動安裝，請執行此命令： `brew install tree`

   ```
   $ cd sam-app
   
   $ tree
   
   ├── 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
           
   6 directories, 14 files
   ```

   要強調的一些重要檔案：
   + `hello_world/app.py` – 包含您的 Lambda 函數程式碼。
   + `hello_world/requirements.txt` – 包含 Lambda 函數所需的任何Python相依性。
   + `samconfig.toml` – 應用程式的組態檔案，存放 使用的預設參數 AWS SAM CLI。
   + `template.yaml` – 包含應用程式基礎設施程式碼的 AWS SAM 範本。

您現在已在本機電腦上擁有完全撰寫的無伺服器應用程式！

## 步驟 2：建置您的應用程式
<a name="serverless-getting-started-hello-world-build"></a>

在此步驟中，您會使用 AWS SAM CLI來建置應用程式並準備部署。當您建置 時， AWS SAM CLI會建立`.aws-sam`目錄，並在該處組織函數相依性、專案程式碼和專案檔案。

**建置您的應用程式**
+ 在命令列中，從`sam-app`專案目錄執行下列動作：

  ```
  $ sam build
  ```
**注意**  
 如果您的Python本機電腦上沒有 ，請改用 **sam build --use-container **命令。 AWS SAM CLI 會建立Docker容器，其中包含函數的執行時間和相依性。此命令Docker在您的本機電腦上需要 。若要安裝 Docker，請參閱 [安裝 Docker](install-docker.md)。

  以下是輸出的範例 AWS SAM CLI：

  ```
  $ sam build
  Starting Build use cache
  Manifest file is changed (new hash: 3298f1304...d4d421) or dependency folder (.aws-sam/deps/4d3dfad6-a267-47a6-a6cd-e07d6fae318c) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
  Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
  Running PythonPipBuilder:CleanUp
  Running PythonPipBuilder:ResolveDependencies
  Running PythonPipBuilder:CopySource
  Running PythonPipBuilder:CopySource
  
  Build Succeeded
  
  Built Artifacts  : .aws-sam/build
  Built Template   : .aws-sam/build/template.yaml
  
  Commands you can use next
  =========================
  [*] Validate SAM template: sam validate
  [*] Invoke Function: sam local invoke
  [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
  [*] Deploy: sam deploy --guided
  ```

  以下是 CLI 所 AWS SAM 建立`.aws-sam`目錄的縮短範例：

  ```
  .aws-sam
  ├── build
  │   ├── HelloWorldFunction
  │   │   ├── __init__.py
  │   │   ├── app.py
  │   │   └── requirements.txt
  │   └── template.yaml
  └── build.toml
  ```

要強調的一些重要檔案：
+ `build/HelloWorldFunction` – 包含您的 Lambda 函數程式碼和相依性。會為應用程式中的每個函數 AWS SAM CLI建立目錄。
+ `build/template.yaml` – 包含在部署 CloudFormation 時由 參考的 AWS SAM 範本副本。
+ `build.toml` – 組態檔案，存放建置和部署應用程式時 AWS SAM CLI參考的預設參數值。

您現在可以將應用程式部署到 AWS 雲端。

## 步驟 3：將您的應用程式部署到 AWS 雲端
<a name="serverless-getting-started-hello-world-deploy"></a>

**注意**  
此步驟需要 AWS 登入資料組態。如需詳細資訊，請參閱 [AWS SAM 先決條件](prerequisites.md) 中的 [步驟 5：使用 AWS CLI 設定 AWS 登入資料](prerequisites.md#prerequisites-configure-credentials)。

在此步驟中 AWS SAM CLI，您會使用 將應用程式部署到 AWS 雲端。 AWS SAM CLI 將執行下列動作：
+ 引導您設定應用程式設定以進行部署。
+ 將您的應用程式檔案上傳至 Amazon Simple Storage Service (Amazon S3)。
+ 將您的 AWS SAM 範本轉換為 CloudFormation 範本。接著會將您的範本上傳至 CloudFormation 服務，以佈建您的 AWS 資源。

**部署您的 應用程式**

1. 在命令列中，從`sam-app`專案目錄執行下列動作：

   ```
   $ sam deploy --guided
   ```

1. 遵循 AWS SAM CLI互動式流程來設定您的應用程式設定。設定下列項目：

   1. **CloudFormation 堆疊名稱** – 堆疊是您可以單一單位管理的一組 AWS 資源。若要進一步了解，請參閱*AWS CloudFormation 《 使用者指南*》中的[使用堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)。

   1. **AWS 區域** 要部署 CloudFormation 堆疊的 。如需詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[CloudFormation 端點](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-endpoints.html)。

   1. 在本教學課程中，選擇在**部署之前不確認變更**。

   1. 允許**建立 IAM 角色** – 這可讓 AWS SAM 建立 API Gateway 資源和 Lambda 函數資源互動所需的 IAM 角色。

   1. 在本教學課程中，選擇不**停用轉返**。

   1. 允許 **HelloWorldFunction 未定義授權** – 會顯示此訊息，因為您的 API Gateway 端點已設定為可公開存取，無需授權。由於這是 Hello World 應用程式的預期組態，請允許 AWS SAM CLI 繼續。如需設定授權的詳細資訊，請參閱 [使用 AWS SAM 範本控制 API 存取](serverless-controlling-access-to-apis.md)。

   1. **將引數儲存至組態檔案** – 這會使用您的部署偏好設定來更新應用程式的 `samconfig.toml` 檔案。

   1. 選取預設**組態檔案名稱**。

   1. 選取預設**組態環境**。

   以下是`sam deploy --guided`互動式流程的範例輸出：

   ```
   $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
       Looking for config file [samconfig.toml] :  Found
       Reading default arguments  :  Success
   
       Setting default arguments for 'sam deploy'
       =========================================
       Stack Name [sam-app]: ENTER
       AWS Region [us-west-2]: ENTER
       #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
       Confirm changes before deploy [Y/n]: n
       #SAM needs permission to be able to create roles to connect to the resources in your template
       Allow SAM CLI IAM role creation [Y/n]: ENTER
       #Preserves the state of previously provisioned resources when an operation fails
       Disable rollback [y/N]: ENTER
       HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
       Save arguments to configuration file [Y/n]: ENTER
       SAM configuration file [samconfig.toml]: ENTER
       SAM configuration environment [default]: ENTER
   ```

1. 會執行下列動作來 AWS SAM CLI部署您的應用程式：
   + 會建立 Amazon S3 AWS SAM CLI儲存貯體並上傳您的`.aws-sam`目錄。
   + 會將您的 AWS SAM 範本轉換為 AWS SAM CLI， CloudFormation 並將其上傳至 CloudFormation 服務。
   + CloudFormation 會佈建您的 資源。

   在部署期間， AWS SAM CLI會顯示您的進度。以下是輸出範例：

   ```
   Looking for resources needed for deployment:
   
       Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
       A different default S3 bucket can be set in samconfig.toml
   
       Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
       This parameter will be only saved under [default.global.parameters] in /Users/.../Demo/sam-tutorial1/sam-app/samconfig.toml.
   
       Saved arguments to config file
       Running 'sam deploy' for future deployments will use the parameters saved above.
       The above parameters can be changed by modifying samconfig.toml
       Learn more about samconfig.toml syntax at
       https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
   
   File with same data already exists at sam-app/da3c598813f1c2151579b73ad788cac8, skipping upload
   
       Deploying with following values
       ===============================
       Stack name                   : sam-app
       Region                       : us-west-2
       Confirm changeset            : False
       Disable rollback             : False
       Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
       Capabilities                 : ["CAPABILITY_IAM"]
       Parameter overrides          : {}
       Signing Profiles             : {}
   
   Initiating deployment
   =====================
   
   File with same data already exists at sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template, skipping upload
   
   
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   ---------------------------------------------------------------------------------------------------------------------------------------------
   Operation                           LogicalResourceId                   ResourceType                        Replacement
   ---------------------------------------------------------------------------------------------------------------------------------------------
   * Modify                            HelloWorldFunction                  AWS::Lambda::Function               False
   * Modify                            ServerlessRestApi                   AWS::ApiGateway::RestApi            False
   - Delete                            AwsSamAutoDependencyLayerNestedSt   AWS::CloudFormation::Stack          N/A
                                       ack
   ---------------------------------------------------------------------------------------------------------------------------------------------
   
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1678917603/22e05525-08f9-4c52-a2c4-f7f1fd055072
   
   
   2023-03-15 12:00:16 - Waiting for stack create/update to complete
   
   CloudFormation events from stack operations (refresh every 0.5 seconds)
   ---------------------------------------------------------------------------------------------------------------------------------------------
   ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
   ---------------------------------------------------------------------------------------------------------------------------------------------
   UPDATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
   SS
   DELETE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   DELETE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
   ---------------------------------------------------------------------------------------------------------------------------------------------
   
   CloudFormation outputs from deployed stack
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Outputs
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Key                 HelloWorldFunctionIamRole
   Description         Implicit IAM Role created for Hello World function
   Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W
   
   Key                 HelloWorldApi
   Description         API Gateway endpoint URL for Prod stage for Hello World function
   Value               https://<restapiid>.execute-api.us-west-2.amazonaws.com/Prod/hello/
   
   Key                 HelloWorldFunction
   Description         Hello World Lambda Function ARN
   Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-yQDNe17r9maD
   ----------------------------------------------------------------------------------------------------------------------------------------------
   
   
   Successfully created/updated stack - sam-app in us-west-2
   ```

您的應用程式現在已部署並在 中執行 AWS 雲端！

## 步驟 4：執行您的應用程式
<a name="serverless-getting-started-hello-world-run"></a>

在此步驟中，您將傳送 GET 請求到您的 API 端點，並查看您的 Lambda 函數輸出。

**取得您的 API 端點值**

1. 從上一個步驟中 AWS SAM CLI顯示的資訊中，找到 `Outputs`區段。在本節中，找到您的`HelloWorldApi`資源以尋找您的 HTTP 端點值。以下是輸出範例：

   ```
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Outputs
   ----------------------------------------------------------------------------------------------------------------------------------------------
   ...
   Key                 HelloWorldApi
   Description         API Gateway endpoint URL for Prod stage for Hello World function
   Value               https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
   ...
   ----------------------------------------------------------------------------------------------------------------------------------------------
   ```

1. 或者，您可以使用 **sam list endpoints --output json**命令來取得此資訊。以下是輸出範例：

   ```
   $ sam list endpoints --output json
   2023-03-15 12:39:19 Loading policies from IAM...
   2023-03-15 12:39:25 Finished loading policies from IAM.
   [
     {
       "LogicalResourceId": "HelloWorldFunction",
       "PhysicalResourceId": "sam-app-HelloWorldFunction-yQDNe17r9maD",
       "CloudEndpoint": "-",
       "Methods": "-"
     },
     {
       "LogicalResourceId": "ServerlessRestApi",
       "PhysicalResourceId": "ets1gv8lxi",
       "CloudEndpoint": [
         "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod",
         "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Stage"
       ],
       "Methods": [
         "/hello['get']"
       ]
     }
   ]
   ```

**叫用您的 函數**
+ 使用您的瀏覽器或命令列，將 GET 請求傳送至您的 API 端點。以下是使用 curl 命令的範例：

  ```
  $ curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
  {"message": "hello world"}
  ```

## 步驟 5：與 中的函數互動 AWS 雲端
<a name="serverless-getting-started-hello-world-remote-invoke"></a>

在此步驟中，您可以使用 在 AWS SAM CLI 中叫用 Lambda 函數 AWS 雲端。

**在雲端中叫用 Lambda 函數**

1. 請記下上`LogicalResourceId`一個步驟的 函數。它應該為 `HelloWorldFunction`。

1. 在命令列中，從`sam-app`專案目錄執行下列動作：

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app
   ```

1. 會在雲端 AWS SAM CLI中叫用您的函數，並傳回回應。以下是輸出範例：

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app
   
   Invoking Lambda Function HelloWorldFunction                                       
   START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST
   END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9
   REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9  Duration: 6.62 ms       Billed Duration: 7 ms     Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 164.06 ms
   {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
   ```

## 步驟 6：修改您的應用程式並將其同步至 AWS 雲端
<a name="serverless-getting-started-hello-world-sync"></a>

在此步驟中，您可以使用 AWS SAM CLI**sam sync --watch**命令將本機變更同步至 AWS 雲端。

**使用 sam 同步**

1. 在命令列中，從`sam-app`專案目錄執行下列動作：

   ```
   $ sam sync --watch
   ```

1. 會 AWS SAM CLI提示您確認是否同步開發堆疊。由於 **sam sync --watch**命令會自動 AWS 雲端 即時將本機變更部署至 ，因此我們建議僅用於開發環境。

   會在開始監控本機變更之前 AWS SAM CLI執行初始部署。以下是輸出範例：

   ```
   $ sam sync --watch
   The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without
   performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.
   **The sync command should only be used against a development stack**.
   
   Confirm that you are synchronizing a development stack.
   
   Enter Y to proceed with the command, or enter N to cancel:
    [Y/n]: y
   Queued infra sync. Waiting for in progress code syncs to complete...
   Starting infra sync.
   Manifest is not changed for (HelloWorldFunction), running incremental build
   Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
   Running PythonPipBuilder:CopySource
   
   Build Succeeded
   
   Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63.
   Execute the following command to deploy the packaged template
   sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63 --stack-name <YOUR STACK NAME>
   
   
       Deploying with following values
       ===============================
       Stack name                   : sam-app
       Region                       : us-west-2
       Disable rollback             : False
       Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
       Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
       Parameter overrides          : {}
       Signing Profiles             : null
   
   Initiating deployment
   =====================
   
   
   2023-03-15 13:10:05 - Waiting for stack create/update to complete
   
   CloudFormation events from stack operations (refresh every 0.5 seconds)
   ---------------------------------------------------------------------------------------------------------------------------------------------
   ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
   ---------------------------------------------------------------------------------------------------------------------------------------------
   UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
   CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   Resource creation Initiated
                                                                           ack
   CREATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   UPDATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
   SS
   UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
   ---------------------------------------------------------------------------------------------------------------------------------------------
   
   CloudFormation outputs from deployed stack
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Outputs
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Key                 HelloWorldFunctionIamRole
   Description         Implicit IAM Role created for Hello World function
   Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W
   
   Key                 HelloWorldApi
   Description         API Gateway endpoint URL for Prod stage for Hello World function
   Value               https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
   
   Key                 HelloWorldFunction
   Description         Hello World Lambda Function ARN
   Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-yQDNe17r9maD
   ----------------------------------------------------------------------------------------------------------------------------------------------
   
   
   Stack update succeeded. Sync infra completed.
   
   Infra sync completed.
   CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.
   ```

接著，您將修改 Lambda 函數程式碼。 AWS SAM CLI 會自動偵測此變更，並將您的應用程式同步至 AWS 雲端。

**修改和同步您的應用程式**

1. 在您所選的 IDE 中，開啟 `sam-app/hello_world/app.py` 檔案。

1. 變更 `message`並儲存您的 檔案。以下是範例：

   ```
   import json
   ...
   def lambda_handler(event, context):
       ...
       return {
           "statusCode": 200,
           "body": json.dumps({
               "message": "hello everyone!",
               ...
           }),
       }
   ```

1.  AWS SAM CLI 會偵測您的變更，並將您的應用程式同步至 AWS 雲端。以下是輸出範例：

   ```
   Syncing Lambda Function HelloWorldFunction...
   Manifest is not changed for (HelloWorldFunction), running incremental build
   Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
   Running PythonPipBuilder:CopySource
   Finished syncing Lambda Function HelloWorldFunction.
   ```

1. 若要驗證您的變更，請再次傳送 GET 請求到您的 API 端點。

   ```
   $ curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
   {"message": "hello everyone!"}
   ```

## 步驟 7：（選用） 在本機測試您的應用程式
<a name="serverless-getting-started-hello-world-test"></a>

**注意**  
此為選擇性步驟。

**重要**  
此步驟Docker在本機電腦上需要 。您必須Docker安裝 並設定為使用 AWS SAM CLI進行本機測試。如需詳細資訊，請參閱[安裝 Docker](install-docker.md)。

在此步驟中，您可以使用 AWS SAM CLI**sam local**命令在本機測試您的應用程式。為了達成此目的， AWS SAM CLI會使用 建立本機環境Docker。此本機環境模擬 Lambda 函數的雲端型執行環境。

您可執行下列項目：

1. 為您的 Lambda 函數建立本機環境並叫用它。

1. 在本機託管您的 HTTP API 端點，並使用它來叫用 Lambda 函數。

**在本機叫用 Lambda 函數**

1. 在命令列中，從`sam-app`專案目錄執行下列動作：

   ```
   $ sam local invoke
   ```

1.  AWS SAM CLI 會建立本機Docker容器並叫用您的 函數。以下是輸出範例：

   ```
   $ sam local invoke
   Invoking app.lambda_handler (python3.9)
   Local image was not found.
   Removing rapid images for repo public.ecr.aws/sam/emulation-python3.9
   Building image.....................
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
   START RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 Version: $LATEST
   END RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6
   REPORT RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6    Init Duration: 1.01 ms    Duration: 633.45 ms    Billed Duration: 634 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
   {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
   ```

**在本機託管您的 API**

1. 在命令列中，從`sam-app`專案目錄執行下列動作：

   ```
   $ sam local start-api
   ```

1. 會為您的 Lambda AWS SAM CLI函數建立本機Docker容器，並建立本機 HTTP 伺服器來模擬您的 API 端點。以下是輸出範例：

   ```
   $ sam local start-api
   Initializing the lambda functions containers.
   Local image is up-to-date
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
   Containers Initialization is done.
   Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
   You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart AWS SAM CLI if you update your AWS SAM template
   2023-03-15 14:25:21 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3000
   2023-03-15 14:25:21 Press CTRL+C to quit
   ```

1. 使用您的瀏覽器或命令列，將 GET 請求傳送至本機 API 端點。以下是使用 curl 命令的範例：

   ```
   $ curl http://127.0.0.1:3000/hello
   {"message": "hello world"}
   ```

## 步驟 8：從 刪除您的應用程式 AWS 雲端
<a name="serverless-getting-started-hello-world-delete"></a>

在此步驟中，您可以使用 AWS SAM CLI**sam delete**命令從 刪除您的應用程式 AWS 雲端。

**從 刪除您的應用程式 AWS 雲端**

1. 在命令列中，從`sam-app`專案目錄執行下列動作：

   ```
   $ sam delete
   ```

1.  AWS SAM CLI 會要求您確認。然後，它會刪除應用程式的 Amazon S3 儲存貯體和 CloudFormation 堆疊。以下是輸出範例：

   ```
   $ sam delete
       Are you sure you want to delete the stack sam-app in the region us-west-2 ? [y/N]: y
       Are you sure you want to delete the folder sam-app in S3 which contains the artifacts? [y/N]: y
       - Deleting S3 object with key c6ce8fa8b5a97dd022ecd006536eb5a4
       - Deleting S3 object with key 5d513a459d062d644f3b7dd0c8b56a2a.template
       - Deleting S3 object with key sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template
       - Deleting S3 object with key sam-app/6b208d0e42ad15d1cee77d967834784b.template
       - Deleting S3 object with key sam-app/da3c598813f1c2151579b73ad788cac8
       - Deleting S3 object with key sam-app/f798cdd93cee188a71d120f14a035b11
       - Deleting Cloudformation stack sam-app
   
   Deleted successfully
   ```

## 疑難排解
<a name="serverless-getting-started-hello-world-troubleshoot"></a>

若要疑難排解 AWS SAM CLI，請參閱 [AWS SAM CLI 故障診斷](sam-cli-troubleshooting.md)。

## 進一步了解
<a name="serverless-getting-started-hello-world-learn"></a>

若要繼續了解 AWS SAM，請參閱下列資源：
+ **[完整 AWS SAM 研討會](https://s12d.com/sam-ws-en-intro)** – 旨在教導您許多 AWS SAM 提供的主要功能的研討會。
+ **[ 使用 SAM 的工作階段](https://www.youtube.com/playlist?list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd)** – 由我們的 AWS Serverless Developer Advocate 團隊在使用 時建立的影片系列 AWS SAM。
+ **[無伺服器土地](https://serverlessland.com/)** – 網站，匯集無伺服器的最新資訊、部落格、影片、程式碼和學習資源 AWS 。

# 將 Lambda 函數轉換為 AWS SAM 應用程式
<a name="convert-lambda-to-sam"></a>

如果您在 Lambda 主控台中有想要在 VS Code as infrastructure as Code (IaC) 中管理的函數，您可以將其轉移至 VS Code，然後將其轉換為 AWS SAM 範本。將函數轉換為 AWS SAM 範本後，您就可以控制基礎設施的版本控制、自動化部署、遠端偵錯函數，以及在整個開發生命週期中維持一致的環境。使用本機和遠端偵錯功能，您也可以透過逐步完成程式碼、檢查變數，以及在本機和 AWS 雲端中設定中斷點，更有效地疑難排解問題。

如需從主控台移動函數和設定本機開發的指示，請參閱《 *AWS Lambda 開發人員指南*》中的[使用 VS 程式碼在本機開發 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac-local-development.html)。請依照這些指示，將 Lambda 函數從主控台移至 VS 程式碼，然後將其轉換為 AWS SAM 範本。執行此操作後，您可以：
+ **在 AWS 雲端遠端偵錯您的 函數。**如需詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[使用 VS 程式碼遠端偵錯 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/debugging.html)。
+ **將相關聯的資源和許可作為基礎設施管理為程式碼。**如需詳細資訊，請參閱《 *AWS Lambda 開發人員指南*》中的[使用 Lambda 搭配基礎設施做為程式碼 (IaC)](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac.html) 
+ **使用 部署和更新您的應用程式 AWS SAM CLI。**如需詳細資訊，請參閱[AWS SAM CLI](using-sam-cli.md)。
+ **使用 Infrastructure Composer 視覺化設計無伺服器架構。**如需詳細資訊，請參閱 [Infrastructure Composer 開發人員指南](https://docs.aws.amazon.com/application-composer/latest/dg/what-is-composer.html)。

## 進一步了解
<a name="convert-lambda-to-sam-learn"></a>

若要繼續了解 AWS SAM，請參閱下列資源：
+ **[完整 AWS SAM 研討會](https://s12d.com/sam-ws-en-intro)** – 旨在教導您許多 AWS SAM 提供的主要功能的研討會。
+ **[ 使用 SAM 的工作階段](https://www.youtube.com/playlist?list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd)** – 由我們的 AWS Serverless Developer Advocate 團隊在使用 時建立的影片系列 AWS SAM。
+ **[無伺服器土地](https://serverlessland.com/)** - 網站，集合無伺服器的最新資訊、部落格、影片、程式碼和學習資源 AWS 。