基於源代碼的應用程序運行服務 - AWS App Runner

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

基於源代碼的應用程序運行服務

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

本章討論以原始碼為基礎的服務。如需有關以來源影像為基礎之服務的資訊,請參閱基於源圖像的應用程序運行器服務

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

App Runner 提供方便的特定於平台的託管運行時。這些執行階段中的每一個都會從您的原始程式碼建立容器映像檔,並將語言執行階段相依性新增至映像中。您不需要提供容器配置和構建指令,例如 Dockerfile。

本章的副主題討論 App Runner 支援的各種平台,這些平可為不同的程式設計環境和版本提供受管理的執行階段。

原始碼儲存庫提供者

應用程序 Runner 通過從源代碼存儲庫中讀取源代碼來部署源代碼。應用程序運行器支持兩個源代碼存儲庫提供商:GitHubBitbucket

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

要從源代碼存儲庫將源代碼部署到應用程序運行器服務,應用程序運行器建立到它的連接。當您使用 App Runner 主控台建立服務時,您會提供連線詳細資料和來源目錄供 App Runner 部署您的原始程式碼。

連線

您可以提供連線詳細資訊,做為服務建立程序的一部分。當您使用應用程式執行器 API 或時 AWS CLI,連線是個別的資源。首先,您可以使用 CreateConnectionAPI 動作建立連線。然後,您可以在建立服務期間使用 CreateServiceAPI 動作提供連線的 ARN。

來源目錄

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

如需建立應用程式執行器服務的詳細資訊,請參閱創建應用程序運行器服務。如需應用程式執行器連線的詳細資訊,請參閱管理應用程式執行器

來源目錄

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

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

除了頂層存放庫目錄之外,您還可以選擇提供不同的來源目錄路徑。這支持 monorepo 存儲庫架構,這意味著多個應用程序的源代碼存儲在一個存儲庫中。要從單個 monorepo 創建和支持多個應用程序運行器服務,請在創建每個服務時指定不同的源目錄。

注意

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

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

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

注意

如果您的 App Runner 服務使用 PHP 託管運行時,並且您想要指定默認根存儲庫以外的源目錄,則使用正確的 PHP 運行時版本非常重要。如需詳細資訊,請參閱 使用 PHP 平台

應用程式執行器管理

應用程序運行器託管平台為各種編程環境提供託管運行時。每個託管運行時都可以根據編程語言或運行時環境的版本輕鬆構建和運行容器。當您使用受管理的執行階段時,App Runner 會從受管理的執行階段映像開始。此映像檔是以 Amazon Linux Docker 映像為基礎,並包含語言執行階段套件,以及一些工具和常用的相依性套件。App Runner 使用此託管運行時映像作為基本映像,並添加應用程序代碼以構建 Docker 映像。然後,它將部署此映像以在容器中運行 Web 服務。

當您使用應用程式執行器主控台或 CreateServiceAPI 作業建立服務時,您可以指定應用程式執行器服務的執行階段。您也可以將執行階段指定為原始程式碼的一部分。在您包含在程式碼儲存庫中的 App Runner 設定檔中使用runtime關鍵字。託管運行時的命名約定是 <language-name><major-version>

App Runner 會在每次部署或服務更新時,將服務的執行階段更新為最新版本。如果您的應用程式需要特定版本的受管理執行階段,您可以使用 App Runner 設定檔中的runtime-version關鍵字來指定它。您可以鎖定到任何級別的版本,包括主要或次要版本。應用程序運行器僅對服務的運行時進行較低級別的更新。

託管運行時版本和應用程序運行器構建

應用程式執行器現在為您的應用程式提供更新的建置程序 它目前會呼叫在管理執行階段上執行之服務的新組建 (最後一次於 20 23 年 12 月 29 日發行) Python 3.11 和 Node.js 18 上執行。這個經過修訂的建置程序更快速且更有效率。它還可以創建一個佔用空間較小的最終映像,該映像僅包含運行應用程序所需的源代碼,構建成品和運行時。

我們將較新的建置程序稱為經過修訂的 App Runner 組建,而原始建置程序則稱為原始 App Runner 組建。為了避免對早期版本的運行時平台進行更改,App Runner 僅將修訂後的構建應用於特定的運行時版本,通常是新發布的主要版本。

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

下表說明哪個版本的 App Runner 版本適用於特定的託管運行時版本。我們將繼續更新此文件,讓您瞭解我們目前的執行階段。

平台 原始構建 修訂版組建

Python – 版本資訊

  • Python 3.8

  • Python 3.7

  • Python (!)

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 – 版本資訊

  • 紅寶石

Go – 版本資訊

  • Go 1

重要

Python 3.11 — 對於使用 Python 3.11 託管運行時的服務的構建配置,我們有具體的建議。如需詳細資訊,請參閱 Python 平台主題特定執行階段版本的編號說明中的。

更多有關應用程序運行器構建和遷移

當您將應用程式移轉至使用修訂版本的較新執行階段時,可能需要稍微修改組建組態。

若要提供移轉考量的內容,我們會先說明原始 App Runner 組建和修訂版組建的高階程序。接下來我們將介紹您服務的特定屬性,這些屬性可能需要進行一些配置更新。

原始應用程序運行器構建

原始的應用程序運行應用程序構建過程利用了該 AWS CodeBuild 服務。初始步驟以 CodeBuild 服務策劃的影像為基礎。Docker 構建過程遵循使用適用的應用程序運行時管理運行時映像作為基本映像。

一般步驟如下:

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

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

  2. 使用 CodeBuild 先前步驟中的相同影像執行build指令。

    這些build命令是必需的。它們可以在應用程序運行器控制台,應用程序運行器 API 或apprunner.yaml配置文件中指定。

  3. 運行 Docker 構建以根據特定平台和運行時版本的 App Runner 託管運行時映像生成圖像。

  4. 從我們在步驟 2 中生成的圖像複製/app目錄。目的地是基於我們在步驟 3 中生成的 App Runner 管理運行時映像的圖像。

  5. 在生成的 App Runner 託管運行時映像上再次運行build命令。我們再次執行建置命令,從我們在步驟 4 中複製到它的/app目錄中的原始程式碼產生建置成品。此映像稍後將由應用程序運行器部署在容器中運行您的 Web 服務。

    這些build命令是必需的。它們可以在應用程序運行器控制台,應用程序運行器 API 或apprunner.yaml配置文件中指定。

  6. 步驟 2 執行 CodeBuild 影像中的post-build指令。

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

建置完成之後,App Runner 會部署步驟 5 產生的 App Runner 管理執行階段映像,以便在容器中執行 Web 服務。

修訂後的應用程式執行器

修訂後的建置程序比上一節所述的原始建置程序更快速且更有效率。它消除了在先前版本構建中發生的構建命令的重複。它還可以創建一個佔用空間較小的最終映像,該映像僅包含運行應用程序所需的源代碼,構建成品和運行時。

此構建過程使用 Docker 多階段構建。一般處理步驟如下:

  1. 構建階段-啟動 docker 構建過程,該過程在 App Runner 構建映像上執行pre-buildbuild命令。

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

      注意

      /app目錄被指定為 Docker 構建的每個階段的工作目錄。

    2. 執行 pre-build 命令。

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

    3. 運行build命令。

      這些build命令是必需的。它們可以在應用程序運行器控制台,應用程序運行器 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組態檔案中指定。

構建完成後,應用程序 Runner 然後部署運行映像以在容器中運行 Web 服務。

注意

配置構建過程apprunner.yaml時,請不要誤導到的「運行」部分中的env條目。即使在步驟 2 (b) 中參考的pre-run命令參數位於 [執行] 區段中,但請勿使用 [執行] 區段中的env參數來設定您的組建。這些命pre-run令僅引用配置文件的「構建」部分中定義的env變量。如需詳細資訊,請參閱「應用程式執行器」設定檔一章執行區段中的。

移轉考量的服務需求

如果您的應用程式環境具有這兩項需求中的任何一項,則您需要透過新增pre-run命令來修改您的組建設定。

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

  • 如果您需要運行兩次build命令來創建所需的環境。這是一個非常不尋常的要求。絕大多數構建不會這樣做。

/app目錄外的修改

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

  • 您隨apprunner.yaml檔案、App Runner API 或應用程式執行器主控台提供的命令必須在/app目錄中產生組建成品。

  • 您可以修改pre-build、和post-build指令build,以確保所有組建加工品都位於目/app錄中。

  • 如果您的應用程式需要組建進一步修改服務所產生的映像,則在/app目錄之外,您可以使用中的新pre-run命令apprunner.yaml。如需詳細資訊,請參閱 使用配置文件設置應用程序運行器服務選項

運行兩次build命令

  • 原始的應用程序運行器構建運行build命令兩次,首先在步驟 2 中,然後在步驟 5 中再次運行命令。修訂後的 App Runner 構建可以補救這種冗餘,並且只運行一次build命令。如果您的應用程式對於執行兩次build命令的不尋常需求,則修訂後的 App Runner 組建會提供使用pre-run參數再次指定和執行相同命令的選項。這樣做會保留相同的雙重建置行為。