

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

# AWS App Runner 搭配 使用 AWS Toolkit for Visual Studio Code
<a name="using-apprunner"></a>

[AWS App Runner](https://docs.aws.amazon.com/apprunner/latest/dg/what-is-apprunner.html) 提供快速、簡單且符合成本效益的方式，從原始碼或容器映像直接部署到 AWS 雲端中可擴展且安全的 Web 應用程式。使用它，您不需要學習新技術、決定要使用的運算服務，或知道如何佈建和設定 AWS 資源。

您可以使用 根據*來源映像*或*來源碼* AWS App Runner 來建立和管理服務。如果您使用來源映像，則可以選擇存放在映像儲存庫中的公有或私有容器映像。App Runner 支援下列映像儲存庫提供者：
+ Amazon Elastic Container Registry (Amazon ECR)：將私有映像儲存在您的帳戶中 AWS 。
+ Amazon Elastic Container Registry Public (Amazon ECR Public)：存放公有的可讀取映像。

 如果您選擇原始碼選項，則可以從由支援的儲存庫提供者所維護的原始碼儲存庫進行部署。目前，App Runner 支援 [GitHub](https://github.com/) 作為原始碼儲存庫提供者。

## 先決條件
<a name="apprunner-prereqs"></a>

若要使用 與 App Runner 互動， AWS Toolkit for Visual Studio Code 需要下列項目：
+  AWS 帳戶
+  AWS Toolkit for Visual Studio Code 該功能的版本 AWS App Runner

 除了這些核心需求之外，請確定所有相關的 IAM 使用者都具有與 App Runner 服務互動的許可。此外，您還需要獲取有關服務來源的特定資訊，例如：容器映像 URI 或與 GitHub 儲存庫的連線。當您建立 App Runner 服務時需要此資訊。

### 設定 App Runner 的 IAM 許可
<a name="app-runner-permissions"></a>

授予 App Runner 所需許可的最簡單方法是將現有的 AWS 受管政策連接到相關 AWS Identity and Access Management (IAM) 實體，特別是使用者或群組。App Runner 提供兩個您可以連接至 IAM 使用者的受管政策：
+ `AWSAppRunnerFullAccess`：允許使用者執行所有 App Runner 動作。
+ `AWSAppRunnerReadOnlyAccess`：允許使用者列出和檢視 App Runner 資源的詳細資訊。

此外，如果您從 Amazon Elastic Container Registry (Amazon ECR) 選擇私有儲存庫做為服務來源，則必須為 App Runner 服務建立下列存取角色：
+ `AWSAppRunnerServicePolicyForECRAccess`：允許 App Runner 存取您帳戶中的 Amazon Elastic Container Registry (Amazon ECR) 映像。

您可以在使用 VS Code 的**命令面板**設定服務執行個體時自動建立此角色。

**注意**  
**AWSServiceRoleForAppRunner** 服務連結角色允許 AWS App Runner 完成下列任務：  
將日誌推送至 Amazon CloudWatch Logs 日誌群組。
建立 Amazon CloudWatch Events 規則，以訂閱 Amazon Elastic Container Registry (Amazon ECR) 映像推送。
您不需要手動建立 服務連結角色。當您 AWS App Runner 在 AWS 管理主控台 中或使用 呼叫的 API 操作建立 時 AWS Toolkit for Visual Studio Code， 會為您 AWS App Runner 建立此服務連結角色。

如需詳細資訊，請參閱 *AWS App Runner 開發人員指南*》、中的「[App Runner 的 Identity and Access Management](https://docs.aws.amazon.com/apprunner/latest/dg/security-iam.html)」。

### 取得 App Runner 的服務來源
<a name="app-runner-sources"></a>

您可以使用 AWS App Runner 從來源映像或來源碼部署服務。

------
#### [ Source image ]

如果您是從來源映像部署，您可以從私有或公有映像登錄檔取得該 AWS 映像儲存庫的連結。
+ Amazon ECR 私有登錄：複製使用 Amazon ECR 主控台之私有儲存庫的 URI，網址為 [https://console.aws.amazon.com/ecr/repositories](https://console.aws.amazon.com/ecr/repositories)。
+ Amazon ECR 公有登錄：複製使用 Amazon ECR Public Gallery (Amazon ECR 公有映像庫) 的公有儲存庫的 URI，網址為 [https://gallery.ecr.aws/](https://gallery.ecr.aws)。

**注意**  
您也可以直接從 Toolkit for VS 程式碼中的 **AWS Explorer** 取得私有 Amazon ECR 儲存庫的 URI：  
開啟 **AWS Explorer** 並展開 **ECR** 節點，以檢視該 AWS 區域的儲存庫清單。
在儲存庫上按一下滑鼠右鍵，然後選擇 **Copy Repository URI** (複製儲存庫 URI) 將連結複製到剪貼簿。

使用 VS Code 的**命令面板**設定服務執行個體時，您可以指定映像儲存庫的 URI

如需詳細資訊，請參閱 *AWS App Runner 開發人員指南*中的「[以來源映像為基礎的 App Runner 服務](https://docs.aws.amazon.com/apprunner/latest/dg/service-source-image.html)」。

------
#### [ Source code ]

若要將原始碼部署到 AWS App Runner 服務，該程式碼必須存放在由支援的儲存庫提供者維護的 Git 儲存庫中。App Runner 支援 [GitHub](https://github.com/) 作為原始碼儲存庫提供者。

如需設定 GitHub 儲存庫的相關資訊，請參閱 GitHub 上的[入門文件](https://docs.github.com/en/github/getting-started-with-github)。

若要從 GitHub 儲存庫將原始碼部署至 App Runner 服務，App Runner 會建立至 GitHub 的連線。如果您的儲存庫是私有的 (也就是說，它不能在 GitHub 上公開存取)，則您必須提供連線的詳細資訊給 App Runner。

**重要**  
若要建立 GitHub 連線，您必須使用 App Runner 主控台 ([https://console.aws.amazon.com/apprunner](https://console.aws.amazon.com/apprunner)) 來建立一個將 GitHub 連結到 AWS的連線。使用 VS Code 的**命令面板**設定服務執行個體時，您可以選擇 **GitHub 連線**頁面上可用的連線。  
如需詳細資訊，請參閱 *AWS App Runner 開發人員指南*中的「[管理 App Runner 連線](https://docs.aws.amazon.com/apprunner/latest/dg/manage-connections.html)」。

App Runner 服務執行個體提供受管執行期，可讓您的程式碼建置和執行。 AWS App Runner 目前支援下列執行期：
+ Python 受管的執行時間 
+ Node.js 受管的執行時間

做為服務設定的一部分，您會提供 App Runner 服務如何建置和開始服務的相關資訊。您可以使用 **Command Palette** (命令選擇區) 或指定一個 YAML 格式化的 [App Runner 組態檔案](https://docs.aws.amazon.com/apprunner/latest/dg/config-file.html)來輸入此資訊。此檔案中的值會指示 App Runner 如何建置和開始您的服務，並提供執行時間內容。這包括相關的網路設定和環境變數。組態檔案命名為 `apprunner.yaml`。它會自動新增到您應用程式儲存庫的根目錄中。

 

------

## 定價
<a name="app-runner-pricing"></a>

您需支付應用程式使用的運算和記憶體資源的費用。此外，如果您將部署自動化，您也要針對每個涵蓋當月所有自動化部署的應用程式來支付固定月費。如果您選擇從原始碼進行部署，您還需要根據 App Runner 從原始碼建置容器所需的時間來支付建置費用。

如需詳細資訊，請參閱[AWS App Runner 定價](https://aws.amazon.com/apprunner/pricing/)。

**Topics**
+ [先決條件](#apprunner-prereqs)
+ [定價](#app-runner-pricing)
+ [建立 App Runner 服務](creating-service-apprunner.md)
+ [管理 App Runner 服務](managing-service-apprunner.md)

# 建立 App Runner 服務
<a name="creating-service-apprunner"></a>

您可以使用 **AWS Explorer** 和 VS Code 的**命令面板**，在 Toolkit for VS Code 中建立 App Runner 服務。在您選擇在特定 AWS 區域中建立服務之後， **Command Palette** 提供的編號步驟會引導您完成設定應用程式執行之服務執行個體的程序。

在建立 App Runner 服務之前，請務必先完成[先決條件](using-apprunner.md#apprunner-prereqs)。這包括提供相關的 IAM 許可，以及確認您要部署的特定來源儲存庫。<a name="create-service"></a>

# 建立 App Runner 服務
<a name="create-service"></a>

1. Open AWS Explorer，如果尚未開啟。

1. 在 **App Runner** 節點上按一下滑鼠右鍵並選擇 **Create Service** (建立服務)。

   **命令面板**隨即顯示。

1. 對於 **Select a source code location type** (選取原始碼位置類型)，請選擇 **ECR** 或 **Repository** (儲存庫)。

   如果選擇 **ECR**，您可以在由 Amazon Elastic Container Registry (Amazon ECR) 維護的儲存庫中指定容器映像。如果選擇 **Repository** (儲存庫)，您可以指定由支援的儲存庫提供者維護的原始碼儲存庫。目前，App Runner 支援 [GitHub](https://github.com/) 作為原始碼儲存庫提供者。

## 從 ECR 部署
<a name="deploying-from-ECR"></a>

1. 若為 **Select or enter an image repository** (選取或輸入映像儲存庫)，請選擇或輸入由您的 Amazon ECR 私有登錄或 Amazon ECR 公有映像庫維護的映像儲存庫 URL。
**注意**  
如果您從 Amazon ECR 公有映像庫指定儲存庫，請確定自動部署已關閉，因為 App Runner 不支援 ECR 公有儲存庫中映像的自動部署。  
根據預設，自動部署會關閉，當 **Command Palette** 標頭上的 圖示具有穿過它的對角線時，就會顯示此選項。如果您選擇開啟自動部署，則會顯示一則訊息，通知您此選項可能產生額外費用。

1. 如果 **Command Palette** 步驟報告**找不到標籤**，您需要返回步驟以選取包含已標記容器映像的儲存庫。

1. 如果您使用的是 Amazon ECR 私有登錄，則需要 ECR 存取角色 **AppRunnerECRAccessRole**，允許 App Runner 在您帳戶中存取 Amazon Elastic Container Registry (Amazon ECR) 映像。選擇 **Command Palette** 標頭上的「＋」圖示，以自動建立此角色。(如果您的映像存放在 Amazon ECR 公有 (其映像可公開存取) 中，則不需要存取角色。) 

1. 對於 **Port** (連接埠)，請輸入服務所使用的 IP 連接埠 (例如：連接埠 `8000`）。

1. 對於 **Configure environment variables** (設定環境變數)，您可以指定包含用來自訂服務執行個體中行為的環境變數的檔案。或者，您可以略過此步驟。

1. 對於 **Name your service** (為您的服務命名)，請輸入唯一的名稱 (不含空格)，然後按下 **Enter 鍵**。

1. 對於 **Select instance configuration** (選取執行個體組態)，請為您的服務執行個體選擇 CPU 單位和以 GB 為單位的記憶體的組合。

   建立您的服務時，其狀態會從**建立中**變更至**執行中**。

1.  服務開始執行後，在該服務上按一下滑鼠右鍵，然後選擇 **Copy Service URL** (複製服務 URL)。

1. 若要存取您部署的應用程式，請將複製的 URL 貼上至您 Web 瀏覽器的網址列中。

## 從遠端儲存庫部署
<a name="deploying-from-repository"></a>

1.  針對**選取連線**，選擇連結 GitHub 的連線 AWS。可供選取的連線清單列於 App Runner 主控台上的 **GitHub connections** (GitHub 連線) 頁面。

1.  對於 **Select a remote GitHub repository** (選取遠端 GitHub 儲存庫)，請選擇或輸入遠端儲存庫的 URL。

    已使用 Visual Studio Code 的來源控制管理 (SCM) 設定的遠端儲存庫可供選取。如果沒有列出儲存庫的連結，您也可以貼上該儲存庫的連結。

1. 對於 **Select a branch** (選取分支)，請選擇您要部署之原始碼中的 Git 分支。

1. 對於 **Choose configuration source** (選擇組態來源)，請指定您要如何定義執行時間組態。

   如果選擇 **Use configuration file** (使用組態檔案)，則您的服務執行個體是由 `apprunner.yaml` 組態檔案所定義之設定來設定。此檔案位於應用程式儲存庫的根目錄中。

   如果您選擇**在此處設定所有設定**，請使用**命令面板**來指定下列項目：
   + **Runtime** (執行時間)：選擇 **Python 3** 或 **Nodejs 12**。
   + **Build command** (建置命令)：輸入命令以在服務執行個體的執行階段環境中建置應用程式。
   + **Start command** (開始命令)：輸入命令以在服務執行個體的執行階段環境中啟動應用程式。

1. 若為 **Port** (連接埠)，請輸入服務所使用的 IP 連接埠 (例如：連接埠 `8000`）。

1. 對於 **Configure environment variables** (設定環境變數)，您可以指定包含用來自訂服務執行個體中行為的環境變數的檔案。或者，您可以略過此步驟。

1. 對於 **Name your service** (為您的服務命名)，請輸入唯一的名稱 (不含空格)，然後按下 **Enter 鍵**。

1. 對於 **Select instance configuration** (選取執行個體組態)，請為您的服務執行個體選擇 CPU 單位和以 GB 為單位的記憶體的組合。

   建立您的服務時，其狀態會從**建立中**變更至**執行中**。

1. 服務開始執行後，在該服務上按一下滑鼠右鍵，然後選擇 **Copy Service URL** (複製服務 URL)。

1. 若要存取您部署的應用程式，請將複製的 URL 貼上至您 Web 瀏覽器的網址列中。

**注意**  
如果您嘗試建立 App Runner 服務失敗，服務會在 **AWS Explorer** 中顯示**建立失敗**狀態。如需疑難排解祕訣，請參閱 *App Runner 開發人員指南*中的「[建立服務失敗時](https://docs.aws.amazon.com/apprunner/latest/dg/manage-create.html#manage-create.failure)」。

# 管理 App Runner 服務
<a name="managing-service-apprunner"></a>

建立 App Runner 服務之後，您可以使用 AWS Explorer 窗格來執行下列活動來管理它：
+ [暫停和繼續 App Runner 服務](#pause-resume-apprunner)
+ [部署 App Runner 服務](#deploying-apprunner)
+ [檢視 App Runner 的日誌串流](#viewing-logs-apprunner)
+ [刪除 App Runner 服務](#deleting-apprunner)

## 暫停和繼續 App Runner 服務
<a name="pause-resume-apprunner"></a>

如果您需要暫時停用 Web 應用程式並停止程式碼執行，您可以暫停 AWS App Runner 服務。App Runner 會將服務的運算容量縮減為零。當您準備好再次執行應用程式時，請繼續您的 App Runner 服務。App Runner 會佈建新的運算容量、將您的應用程式部署到該容量，並執行應用程式。

**重要**  
只有在執行 App Runner 時，才會向您收取費用。因此，您可以視需要暫停及繼續應用程式以管理成本。這對開發和測試情境特別有幫助。<a name="pause-app-runner"></a>

## 暫停您的 App Runner 服務
<a name="pause-app-runner"></a>

1. Open AWS Explorer，如果尚未開啟。

1. 展開 **App Runner** 以檢視服務清單。

1. 在服務上按一下滑鼠右鍵並選擇 **Pause** (暫停)。

1. 在顯示的對話方塊中，選擇 **Confirm** (確認)。

   服務暫停時，服務狀態會從 **Running** (執行中) 變更至 **Pausing** (暫停中)，然後到 **Paused** (已暫停)。<a name="pause-app-runner"></a>

## 繼續您的 App Runner 服務
<a name="pause-app-runner"></a>

1. Open AWS Explorer，如果尚未開啟。

1. 展開 **App Runner** 以檢視服務清單。

1. 在服務上按一下滑鼠右鍵並選擇 **Resume** (繼續)。

   服務繼續時，服務狀態會從 **Resuming** (繼續中) 變更為 **Running** (執行中)。

## 部署 App Runner 服務
<a name="deploying-apprunner"></a>

如果您為服務選擇手動部署選項，則需要明確起始每個服務的部署。<a name="deploy-app-runner"></a>

1. Open AWS Explorer，如果尚未開啟。

1. 展開 **App Runner** 以檢視服務清單。

1. 在服務上按一下滑鼠右鍵並選擇 **Start Deployment** (開始部署)。

1. 部署應用程式時，服務狀態會從 **Deploying** (部署中) 變更為 **Running** (執行中)。

1. 若要確認您的應用程式已成功部署，請在相同的服務上按一下滑鼠右鍵並選擇 **Copy Service URL** (複製服務 URL)。

1. 若要存取您部署的 Web 應用程式，請將複製的 URL 貼上至您 Web 瀏覽器的網址列中。

## 檢視 App Runner 的日誌串流
<a name="viewing-logs-apprunner"></a>

使用 CloudWatch Logs 來監控、存放和存取您 App Runner 等服務的日誌串流。日誌串流是共享相同來源的一系列日誌事件。<a name="view-logs-apprunner"></a>

1. 展開 **App Runner** 以檢視服務執行個體清單。

1. 展開特定服務執行個體以檢視日誌群組清單。(日誌群組是共享相同保留、監控和存取控制設定的日誌串流群組。) 

1. 在日誌群組上按一下滑鼠右鍵並選擇 **View Log Streams** (檢視日誌串流)。

1. 從**命令調色盤**中，從群組中選擇日誌串流。

   VS 程式碼編輯器會顯示組成串流的日誌事件清單。您可以選擇將較舊或較新的事件載入編輯器中。

## 刪除 App Runner 服務
<a name="deleting-apprunner"></a>

**重要**  
如果您刪除 App Runner 服務，系統會永久移除該服務，並刪除存放的資料。當您需要重新建立服務時，若來源為程式碼儲存庫，則 App Runner 需要再次擷取您的來源並建置它。您的 Web 應用程式 取得一個新的 App Runner 網域。<a name="delete-app-runner"></a>

1. Open AWS Explorer，如果尚未開啟。

1. 展開 **App Runner** 以檢視服務清單。

1. 在服務上按一下滑鼠右鍵並選擇 **Delete Service** (刪除服務)。

1. 在**命令面板**中，輸入 *delete*，然後按 **Enter** 確認。

   刪除的服務會顯示 **Deleting** (刪除中) 狀態，然後服務就會從清單中消失。