以原始碼為基礎的 App Runner 服務 - AWS App Runner

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

以原始碼為基礎的 App Runner 服務

您可以使用 根據兩種基本不同的服務來源類型 AWS App Runner 來建立和管理服務:原始碼原始碼映像。無論來源類型為何,App Runner 都會負責啟動、執行、擴展和負載平衡服務。您可以使用 App Runner 的 CI/CD 功能來追蹤來源映像或程式碼的變更。當 App Runner 發現變更時,它會自動建置 (適用於原始程式碼) 並將新版本部署到您的 App Runner 服務。

本章討論以原始程式碼為基礎的 服務。如需以來源映像為基礎的服務資訊,請參閱以來源映像為基礎的 App Runner 服務

原始程式碼是 App Runner 為您建置和部署的應用程式程式碼。您可以將 App Runner 指向程式碼儲存庫中的來源目錄,然後選擇對應至程式設計平台版本的合適執行時間。App Runner 會根據執行時間的基本映像和您的應用程式程式碼來建置映像。然後,它會啟動根據此映像執行容器的服務。

App Runner 提供便利的平台特定受管執行期。這些執行時間中的每一個都會從您的原始程式碼建置容器映像,並將語言執行時間相依性新增至映像。您不需要提供容器組態和建置指示,例如 Dockerfile。

本章的子主題討論 App Runner 支援的各種平台:為不同的程式設計環境和版本提供受管執行期的受管平台

原始程式碼儲存庫提供者

App Runner 透過從原始碼儲存庫讀取原始碼來部署原始碼。App Runner 支援兩個原始程式碼儲存庫提供者:GitHubBitbucket

從原始碼儲存庫提供者部署

若要從原始碼儲存庫將原始碼部署至 App Runner 服務,App Runner 會建立與其的連線。當您使用 App Runner 主控台建立服務時,您會提供連線詳細資訊和來源目錄,讓 App Runner 部署您的原始程式碼。

連線

您可以在服務建立程序中提供連線詳細資訊。當您使用 App Runner API 或 時 AWS CLI,連線是個別的資源。首先,您可以使用 CreateConnection API 動作建立連線。然後,您可以使用 CreateService API 動作在建立服務期間提供連線的 ARN。

來源目錄

當您建立服務時,您也會提供來源目錄。根據預設,App Runner 會使用儲存庫的根目錄做為來源目錄。來源目錄是原始碼儲存庫中存放應用程式原始碼和組態檔案的位置。建置和啟動命令也會從來源目錄執行。當您使用 App Runner API 或 AWS CLI 來建立或更新服務時,您會在 CreateServiceUpdateService API 動作中提供來源目錄。如需詳細資訊,請參閱下面的來源目錄章節。

如需建立 App Runner 服務的詳細資訊,請參閱建立 App Runner 服務。如需 App Runner 連線的詳細資訊,請參閱管理 App Runner 連線

來源目錄

當您建立 App Runner 服務時,您可以提供來源目錄,以及儲存庫和分支。將來源目錄欄位的值設定為儲存應用程式的原始碼和組態檔案的儲存庫目錄路徑。App Runner 會從您提供的來源目錄路徑執行建置和啟動命令。

輸入來源目錄路徑的值做為根儲存庫目錄的絕對值。如果您未指定值,則會預設為儲存庫頂層目錄,也稱為儲存庫根目錄。

除了頂層儲存庫目錄之外,您也可以選擇提供不同的來源目錄路徑。這支援單一儲存庫架構,這表示多個應用程式的原始碼存放在一個儲存庫中。若要從單一單一儲存庫建立和支援多個 App Runner 服務,請在建立每個服務時指定不同的來源目錄。

注意

如果您為多個 App Runner 服務指定相同的來源目錄,這兩個服務都會個別部署和操作。

如果您選擇使用apprunner.yaml組態檔案來定義您的服務參數,請將其放在儲存庫的來源目錄資料夾中。

如果部署觸發選項設定為自動,您在來源目錄中遞交的變更將觸發自動部署。只有來源目錄路徑中的變更才會觸發自動部署。請務必了解來源目錄的位置如何影響自動部署的範圍。如需詳細資訊,請參閱 中的自動化部署部署方法

注意

如果您的 App Runner 服務使用 PHP 受管執行期,而且您想要指定預設根儲存庫以外的來源目錄,請務必使用正確的 PHP 執行期版本。如需詳細資訊,請參閱使用 PHP 平台

App Runner 受管平台

App Runner 受管平台為各種程式設計環境提供受管執行期。每個受管執行時間都可讓您根據程式設計語言或執行時間環境的版本輕鬆建置和執行容器。當您使用受管執行期時,App Runner 會從受管執行期映像開始。此映像是以 Amazon Linux Docker 映像為基礎,並包含語言執行期套件,以及一些工具和熱門相依性套件。App Runner 使用此受管執行期映像做為基礎映像,並新增您的應用程式程式碼來建置 Docker 映像。然後,它會部署此映像,在容器中執行您的 Web 服務。

當您使用 App Runner 主控台或 CreateService API 操作建立服務時,您可以指定 App Runner 服務的執行時間。您也可以指定執行時間做為原始程式碼的一部分。使用您包含在程式碼儲存庫中的 App Runner 組態檔案中runtime關鍵字。受管執行時間的命名慣例為 <language-name><major-version>

App Runner 會在每次部署或服務更新時,將服務的執行時間更新至最新版本。如果您的應用程式需要特定版本的受管執行時間,您可以使用 App Runner 組態檔案中runtime-version關鍵字來指定它。您可以鎖定任何層級的版本,包括主要或次要版本。App Runner 只會對服務的執行時間進行較低層級的更新。

受管執行期版本和 App Runner 組建

App Runner 現在為您的應用程式提供更新的建置程序。它目前針對在受管執行時間 Python 3.11 和 Node.js 18 上執行的服務叫用新建置,上次發行日期為 2023 年 12 月 29 日。此修訂後的建置程序更快速且更有效率。它也會建立佔用空間較小的最終映像,只包含您的原始程式碼、建置成品,以及執行應用程式所需的執行時間。

我們將較新的建置程序稱為修訂後的 App Runner 建置,並將原始建置程序稱為原始 App Runner 建置。為了避免中斷舊版執行時間平台的變更,App Runner 只會將修訂後的建置套用至特定執行時間版本,通常是新發行的主要版本。

我們已將新元件引入apprunner.yaml組態檔案,讓修訂後的建置回溯相容於非常特定的使用案例,並提供更大的彈性來設定應用程式的建置。這是選用pre-run參數。我們會說明何時使用此參數,以及以下各節中有關建置的其他實用資訊。

下表說明哪些版本的 App Runner 組建適用於特定的受管執行期版本。我們會繼續更新本文件,讓您隨時了解我們目前的執行時間。

平台 原始建置 修訂後的建置

Python – 版本資訊

  • Python 3.8

  • Python 3.7

  • Python 3.11 (!)

Node.js – 版本資訊

  • Node.js 16

  • Node.js 14

  • Node.js 12

  • Node.js 18

Corretto – 版本資訊

  • Corretto 11

  • Corretto 8

.NET – 版本資訊

  • .NET 6

PHP – 版本資訊

  • PHP 8.1

Ruby – 版本資訊

  • Ruby 3.1

Go – 版本資訊

  • Go 1

重要

Python 3.11 – 對於使用 Python 3.11 受管執行時間的服務建置組態,我們提供特定建議。如需詳細資訊,請參閱 Python 平台主題特定執行時間版本的呼叫中的 。

App Runner 建置和遷移的詳細資訊

當您將應用程式遷移至使用修訂建置的較新執行期時,您可能需要稍微修改建置組態。

為了提供遷移考量的內容,我們會先說明原始 App Runner 建置和修訂建置的高階程序。接下來,我們將有一個章節,說明可能需要一些組態更新之服務的特定屬性。

原始 App Runner 建置

原始 App Runner 應用程式建置程序會利用 AWS CodeBuild 服務。初始步驟是以 CodeBuild 服務所策劃的影像為基礎。Docker 建置程序遵循以下程序,使用適用的 App Runner 受管執行期映像作為基礎映像。

一般步驟如下:

  1. 在 CodeBuild 策劃的映像中執行pre-build命令。

    這些pre-build命令是選用的。它們只能在apprunner.yaml組態檔案中指定。

  2. 在上一個步驟的相同映像上使用 CodeBuild 執行build命令。

    build 命令是必要的。它們可以在 App Runner 主控台、App Runner API 或apprunner.yaml組態檔案中指定。

  3. 執行 Docker 建置,以根據特定平台和執行期版本的 App Runner 受管執行期映像產生映像。

  4. 從我們在步驟 2 中產生的映像複製/app目錄。目的地是根據我們在步驟 3 中產生的 App Runner 受管執行期映像的映像。

  5. 在產生的 App Runner 受管執行期映像上再次執行build命令。我們會再次執行組建命令,從我們在步驟 4 中複製的/app目錄中的原始程式碼產生組建成品。App Runner 稍後會部署此映像,以在容器中執行您的 Web 服務。

    build 命令是必要的。它們可以在 App Runner 主控台、App Runner API 或apprunner.yaml組態檔案中指定。

  6. 步驟 2 在 CodeBuild 映像中執行post-build命令。

    這些post-build命令是選用的。它們只能在apprunner.yaml組態檔案中指定。

建置完成後,App Runner 會從步驟 5 部署產生的 App Runner 受管執行期映像,以在容器中執行您的 Web 服務。

修訂後的 App Runner 組建

修訂後的建置程序比上一節所述的原始建置程序更快且更有效率。它消除了先前版本建置中發生的建置命令的重複。它也會建立佔用空間較小的最終映像,只包含您的原始程式碼、建置成品,以及執行應用程式所需的執行時間。

此建置程序使用 Docker 多階段建置。一般程序步驟如下:

  1. 建置階段 — 啟動在 App Runner 組建映像之上執行 pre-buildbuild命令的 Docker 組建程序。

    1. 將應用程式原始碼複製到 /app 目錄。

      注意

      /app目錄在 Docker 建置的每個階段中指定為工作目錄。

    2. 執行 pre-build 命令。

      這些pre-build命令是選用的。它們只能在apprunner.yaml組態檔案中指定。

    3. 執行build命令。

      build 命令是必要的。它們可以在 App Runner 主控台、App Runner API 或apprunner.yaml組態檔案中指定。

  2. 封裝階段 — 產生最終客戶容器映像,這也以 App Runner 執行映像為基礎。

    1. /app目錄從先前的建置階段複製到新的執行映像。這包括您的應用程式原始程式碼和上一個階段的建置成品。

    2. 執行pre-run命令。如果您需要使用build命令修改/app目錄外部的執行期映像,請將相同或必要的命令新增至apprunner.yaml組態檔案的此區段。

      這是為支援修訂後的 App Runner 建置而引進的新參數。

      這些pre-run命令是選用的。它們只能在apprunner.yaml組態檔案中指定。

      備註
      • pre-run 命令僅受修訂的組建支援。如果您的服務使用使用原始建置的執行期版本,請勿將其新增至組態檔案。

      • 如果您不需要使用build命令修改/app目錄外的任何內容,則不需要指定pre-run命令。

  3. 建置後階段 — 此階段會從建置階段繼續並執行post-build命令。

    1. /app目錄中執行post-build命令。

      這些post-build命令是選用的。它們只能在apprunner.yaml組態檔案中指定。

建置完成後,App Runner 接著會部署執行映像,以在容器中執行您的 Web 服務。

注意

設定建置程序apprunner.yaml時,請勿誤導至 執行區段中的env項目。即使步驟 2(b) 中參考的pre-run命令參數位於執行區段中,請不要使用執行區段中的 env 參數來設定您的建置。pre-run 命令只會參考組態檔案建置區段中定義的env變數。如需詳細資訊,請參閱 App Runner 組態檔案章節執行區段中的 。

遷移考量的服務需求

如果您的應用程式環境有這兩種需求,則需要新增pre-run命令來修改建置組態。

  • 如果您需要使用 build命令修改/app目錄外的任何內容。

  • 如果您需要執行build命令兩次,以建立所需的環境。這是非常不尋常的要求。絕大多數的組建都不會這樣做。

/app目錄外的修改

  • 修訂後的 App Runner 組建假設您的應用程式在/app目錄外沒有相依性。

  • 您隨apprunner.yaml檔案、App Runner API 或 App Runner 主控台提供的命令必須在 /app目錄中產生建置成品。

  • 您可以修改 pre-buildbuildpost-build命令,以確保所有建置成品都位於 /app目錄中。

  • 如果您的應用程式需要 建置來進一步修改服務產生的映像,您可以在 /app目錄中使用新pre-run命令apprunner.yaml。如需詳細資訊,請參閱使用組態檔案設定 App Runner 服務選項

執行build命令兩次

  • 原始 App Runner 組建會執行build命令兩次,首先在步驟 2 中執行,然後再次在步驟 5 中執行。修訂後的 App Runner 組建可補救此備援,且只會執行build命令一次。如果您的應用程式應該對build命令執行兩次有不尋常的要求,修訂後的 App Runner 組建會提供使用 pre-run 參數再次指定和執行相同命令的選項。這樣做會保留相同的雙組建行為。