本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
以原始碼為基礎的 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 支援兩個原始程式碼儲存庫提供者:GitHub
從原始碼儲存庫提供者部署
若要從原始碼儲存庫將原始碼部署至 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 來建立或更新服務時,您會在 CreateService 和 UpdateService 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 主控台或 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 3.11 – 對於使用 Python 3.11 受管執行時間的服務建置組態,我們提供特定建議。如需詳細資訊,請參閱 Python 平台主題特定執行時間版本的呼叫中的 。
App Runner 建置和遷移的詳細資訊
當您將應用程式遷移至使用修訂建置的較新執行期時,您可能需要稍微修改建置組態。
為了提供遷移考量的內容,我們會先說明原始 App Runner 建置和修訂建置的高階程序。接下來,我們將有一個章節,說明可能需要一些組態更新之服務的特定屬性。
原始 App Runner 建置
原始 App Runner 應用程式建置程序會利用 AWS CodeBuild 服務。初始步驟是以 CodeBuild 服務所策劃的影像為基礎。Docker 建置程序遵循以下程序,使用適用的 App Runner 受管執行期映像作為基礎映像。
一般步驟如下:
-
在 CodeBuild 策劃的映像中執行
pre-build
命令。這些
pre-build
命令是選用的。它們只能在apprunner.yaml
組態檔案中指定。 -
在上一個步驟的相同映像上使用 CodeBuild 執行
build
命令。build
命令是必要的。它們可以在 App Runner 主控台、App Runner API 或apprunner.yaml
組態檔案中指定。 -
執行 Docker 建置,以根據特定平台和執行期版本的 App Runner 受管執行期映像產生映像。
-
從我們在步驟 2 中產生的映像複製
/app
目錄。目的地是根據我們在步驟 3 中產生的 App Runner 受管執行期映像的映像。 -
在產生的 App Runner 受管執行期映像上再次執行
build
命令。我們會再次執行組建命令,從我們在步驟 4 中複製的/app
目錄中的原始程式碼產生組建成品。App Runner 稍後會部署此映像,以在容器中執行您的 Web 服務。build
命令是必要的。它們可以在 App Runner 主控台、App Runner API 或apprunner.yaml
組態檔案中指定。 -
從步驟 2 在 CodeBuild 映像中執行
post-build
命令。這些
post-build
命令是選用的。它們只能在apprunner.yaml
組態檔案中指定。
建置完成後,App Runner 會從步驟 5 部署產生的 App Runner 受管執行期映像,以在容器中執行您的 Web 服務。
修訂後的 App Runner 組建
修訂後的建置程序比上一節所述的原始建置程序更快且更有效率。它消除了先前版本建置中發生的建置命令的重複。它也會建立佔用空間較小的最終映像,只包含您的原始程式碼、建置成品,以及執行應用程式所需的執行時間。
此建置程序使用 Docker 多階段建置。一般程序步驟如下:
-
建置階段 — 啟動在 App Runner 組建映像之上執行
pre-build
和build
命令的 Docker 組建程序。-
將應用程式原始碼複製到
/app
目錄。注意
此
/app
目錄在 Docker 建置的每個階段中指定為工作目錄。 -
執行
pre-build
命令。這些
pre-build
命令是選用的。它們只能在apprunner.yaml
組態檔案中指定。 -
執行
build
命令。build
命令是必要的。它們可以在 App Runner 主控台、App Runner API 或apprunner.yaml
組態檔案中指定。
-
-
封裝階段 — 產生最終客戶容器映像,這也以 App Runner 執行映像為基礎。
-
將
/app
目錄從先前的建置階段複製到新的執行映像。這包括您的應用程式原始程式碼和上一個階段的建置成品。 -
執行
pre-run
命令。如果您需要使用build
命令修改/app
目錄外部的執行期映像,請將相同或必要的命令新增至apprunner.yaml
組態檔案的此區段。這是為支援修訂後的 App Runner 建置而引進的新參數。
這些
pre-run
命令是選用的。它們只能在apprunner.yaml
組態檔案中指定。備註
-
pre-run
命令僅受修訂的組建支援。如果您的服務使用使用原始建置的執行期版本,請勿將其新增至組態檔案。 -
如果您不需要使用
build
命令修改/app
目錄外的任何內容,則不需要指定pre-run
命令。
-
-
-
建置後階段 — 此階段會從建置階段繼續並執行
post-build
命令。-
在
/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-build
、build
和post-build
命令,以確保所有建置成品都位於/app
目錄中。 -
如果您的應用程式需要 建置來進一步修改服務產生的映像,您可以在
/app
目錄中使用新pre-run
命令apprunner.yaml
。如需詳細資訊,請參閱使用組態檔案設定 App Runner 服務選項。
執行build
命令兩次
-
原始 App Runner 組建會執行
build
命令兩次,首先在步驟 2 中執行,然後再次在步驟 5 中執行。修訂後的 App Runner 組建可補救此備援,且只會執行build
命令一次。如果您的應用程式應該對build
命令執行兩次有不尋常的要求,修訂後的 App Runner 組建會提供使用pre-run
參數再次指定和執行相同命令的選項。這樣做會保留相同的雙組建行為。