AWS App Runner 自 2026 年 4 月 30 日起,不再開放給新客戶。如果您想要使用 App Runner,請在該日期之前註冊。現有客戶可以繼續正常使用該服務。如需詳細資訊,請參閱AWS App Runner 可用性變更。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS App Runner 可用性變更
經過仔細的考量,我們決定自 2026 年 4 月 30 日起 AWS App Runner ,即將接近新客戶。現有 AWS App Runner 客戶可以繼續正常使用服務,包括建立新的資源和服務。 AWS 會繼續投資 的安全性和可用性 AWS App Runner,但我們不打算推出新功能。
我們建議客戶在遷移時探索 Amazon Elastic Container Service (Amazon ECS) Express 模式 AWS App Runner。Amazon ECS Express Mode 會保留 App Runner 的操作簡單性,同時提供對更廣泛的 Amazon ECS 功能集的存取。透過單一 API 呼叫,您可以提供容器映像和兩個 IAM 角色,Amazon ECS 會在您的帳戶中佈建完整的應用程式堆疊 AWS ,包括 Fargate 上的 ECS 服務、Application Load Balancer、自動擴展和聯網。使用 Amazon ECS Express 模式無需額外費用。您只需為為了執行應用程式而建立的基礎 AWS 資源付費。
本指南說明如何將現有的 App Runner 服務遷移至 ECS Express 模式,並使用 DNS 路由逐步轉移流量。
遷移概觀
本指南使用藍/綠部署方法搭配 DNS 加權路由,將流量從 App Runner 遷移至 ECS Express 模式。這兩個服務會在遷移期間同時執行。您可以使用 Amazon Route 53 (或您的 DNS 供應商) 逐步將流量從 App Runner 服務轉移到 ECS Express Mode 服務,從小百分比開始,並隨著時間增加。此方法可將停機時間降至最低,並可讓您在發生問題時調整 DNS 權重來復原。
典型的遷移包括以下步驟:
檢閱現有 App Runner 服務的組態
使用相同的容器映像建立 ECS Express Mode 服務
如果您使用自訂網域,請為 ECS Express Mode 服務設定相同的自訂網域
使用 DNS 路由將流量從 App Runner 轉移到 ECS Express 模式
完成遷移,並在不再需要 App Runner 服務時將其刪除
先決條件
開始之前,請確定您有下列項目:
具有適當 AWS Identity and Access Management 許可來建立和管理 Amazon ECS AWS App Runner、Amazon Route 53 和 Application Load Balancer 資源 AWS 的帳戶
AWS CLI 使用您 AWS 帳戶的登入資料安裝和設定
存放在 Amazon Elastic Container Registry (或其他容器登錄檔) 中的容器映像,以部署至 ECS Express 模式
ECS Express Mode 所需的 IAM 角色:
ecsTaskExecutionRole適用於 Amazon ECS 任務執行和ecsInfrastructureRoleForExpressServicesECS Express Mode 基礎設施佈建
如果您想要在遷移期間保留現有的自訂網域,您也需要:
您使用 Amazon Route 53 或第三方網域註冊商控制的註冊網域名稱
app.example.com,例如AWS Certificate Manager (ACM) 中符合您自訂網域的 SSL/TLS 憑證。在您部署資源的相同 AWS 區域 中請求公有 ACM 憑證。App Runner 和 Amazon ECS Express 模式都需要 ACM 憑證,才能使用自訂網域來啟用 HTTPS 存取。
開始之前
-
容器映像需求 — ECS Express Mode 部署容器映像。如果您的 App Runner 服務是從原始程式碼部署,請先新增建立容器映像的建置步驟,並將其推送至登錄檔,例如 Amazon Elastic Container Registry。然後將該映像部署到 ECS Express 模式。如需遷移來源型部署的詳細資訊遷移以來源為基礎的部署,請參閱 。
-
網域行為 — 如果您的 App Runner 服務已使用自訂網域,例如
app.example.com,您可以在遷移期間重複使用相同的主機名稱,並透過更新 DNS 在 App Runner 和 ECS Express 模式之間逐步轉移流量。如果您的 App Runner 服務僅使用預設 App Runner 服務 URL,則 ECS Express Mode 服務會有不同的端點。在此情況下,沒有可用於逐步流量轉移的共用主機名稱。您應該建立並驗證 ECS Express Mode 服務,然後更新用戶端或 DNS 以使用新的端點。
遷移演練
下圖顯示遷移如何使用 Route 53 在 App Runner 服務和 ECS Express Mode 服務之間轉移 DNS 記錄。
步驟 1:檢閱現有的 App Runner 組態
在 App Runner 主控台中,檢閱現有的服務,並記下您要繼續執行的值。至少請注意下列事項:
容器映像
應用程式連接埠
環境變數
自訂網域名稱,如果已設定
與自訂網域相關聯的 ACM 憑證,如果已設定
您也可以檢閱要轉送到新服務的任何其他執行時間設定。
如需自訂網域詳細資訊,請參閱 管理 App Runner 服務的自訂網域名稱。
步驟 2:建立 ECS Express Mode 服務
使用 App Runner 服務所使用的相同容器映像建立 ECS Express Mode 服務。您可以使用 AWS 管理主控台或 建立服務AWS CLI。
CLI 命令範例:
aws ecs create-express-gateway-service \ --execution-role-arn arn:aws:iam::123456789012:role/ecsTaskExecutionRole \ --infrastructure-role-arn arn:aws:iam::123456789012:role/ecsInfrastructureRoleForExpressServices \ --primary-container '{ "image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/my-app:latest", "containerPort": 8080, "environment": [{ "name": "ENV_VAR_NAME", "value": "value" }] }' \ --service-name "my-application" \ --health-check-path "/" \ --scaling-target '{"minTaskCount":1,"maxTaskCount":4}' \ --monitor-resources
將映像、連接埠、環境變數和擴展值取代為 App Runner 服務中的值。
此命令會在您的帳戶中佈建完整的應用程式堆疊 AWS ,包括 Fargate 上的 ECS 服務、具有目標群組和運作狀態檢查的 Application Load Balancer、自動擴展政策、安全群組和聯網組態,以及預設 URL。
佈建通常需要 3-5 分鐘。您可以在 資源索引標籤下的 Amazon ECS 主控台中追蹤進度。
完成後,請使用主控台中顯示的預設 URL 測試 ECS Express Mode 服務。在繼續流量轉移之前,請確認您的應用程式正常運作。
步驟 3:設定 ECS Express 模式的自訂網域
如果您的 App Runner 服務使用自訂網域,請在轉移流量之前為 ECS Express Mode 服務設定相同的自訂網域。此步驟會設定為 ECS Express Mode 服務建立的 Application Load Balancer,以便接受您網域的流量,並使用 HTTPS 的 ACM 憑證。
在 Application Load Balancer 接聽程式規則中,將自訂網域新增為主機標頭條件。使用與 App Runner 服務相關聯的相同網域名稱 (例如
app.example.com)。這會通知 Application Load Balancer 將流量從您的網域路由到 ECS Express Mode 目標群組。將 SSL 憑證新增至 Application Load Balancer HTTPS 接聽程式。將步驟 1 中記下的 ACM 憑證新增至 HTTPS 接聽程式。
如需詳細說明,請參閱《Amazon ECS 開發人員指南》中的將自訂網域新增至您的服務。
下圖顯示 Application Load Balancer 接聽程式規則中設定主機標頭條件的範例。
步驟 4:使用 Route 53 加權路由轉移流量
如果您的 App Runner 服務已使用自訂網域,您可以使用 Route 53 加權路由逐步將流量轉移到 ECS Express Mode 服務。加權路由可讓您將相同主機名稱的流量路由到多個端點。每個端點都定義為具有自己的權重的個別 DNS 記錄,Route 53 會根據這些權重分配請求。
注意
本指南使用 Route 53 作為範例。如果您使用其他 DNS 提供者,請使用提供者的流量管理功能進行同等 DNS 變更。
將現有的 App Runner 記錄轉換為加權記錄:
開啟 Route 53 主控台。
選擇託管區域,然後選取網域的託管區域。
找出目前指向 App Runner 的主機名稱現有記錄 (例如
app.example.com)。編輯記錄,並將其路由政策變更為加權。
將權重設定為
100(這會將所有初始流量導向 App Runner)。在記錄 ID 下,輸入描述性識別符,例如
app-runner-service。選擇儲存變更。
建立 ECS Express 模式的加權記錄:
在相同的託管區域中建立新的記錄。
使用相同的記錄名稱 (例如
app.example.com)。使用相同的記錄類型。
將路由政策設定為加權。
在路由流量目的地下,選擇 Application 和 Classic Load Balancer 的別名。
從下拉式清單中選擇您的 ECS Express Mode Application Load Balancer。
將權重設定為
0(在您明確增加權重之前,不會有流量流向 ECS Express 模式)。在記錄 ID 下,輸入描述性識別符,例如
ecs-express-service。選擇建立記錄。
逐漸轉移流量:
設定 DNS 記錄後,請增加 ECS Express 模式權重,同時按比例減少 App Runner 權重,以開始轉移流量。建議的方法:
將 ECS Express 模式設定為 10 / App Runner 設定為 90
成功監控和驗證服務處理請求
增加至 25 / 75
增加至 50 / 50
增加至 75 / 25
在 100 / 0 完成
在每個步驟中,先測試應用程式,再轉移其他流量。如果在任何時候發生問題,請透過將權重調整回其先前的值來復原。
重要
讓 App Runner 服務持續執行驗證期間 (例如 24-48 小時),以確認 DNS 變更已全域傳播,並視需要提供轉返選項。如果您遇到問題,可以快速將 Route 53 權重還原回 App Runner。
步驟 5:完成遷移
驗證 ECS Express Mode 服務是否正確處理生產流量且驗證期間已過之後,請完成遷移:
在 Route 53 中,移除指向 App Runner 的加權記錄 (或將其權重設定為 0)。
從 App Runner 服務中移除自訂網域關聯。
刪除 App Runner 服務:
aws apprunner delete-service --service-arnyour-app-runner-service-arn
另請考慮移除不再需要的任何資源:
App Runner 的 Route 53 加權路由記錄
來自 Amazon Elastic Container Registry 的未使用容器映像
如果不再需要,則專門為 App Runner 建立的 IAM 角色
注意
如果服務是在生產環境中執行,請勿刪除 ECS Express Mode 服務、其 Application Load Balancer 或相關聯的資源。
遷移以來源為基礎的部署
如果您現有的 App Runner 服務是從原始程式碼而非容器映像部署,您需要先新增容器化步驟,才能部署至 ECS Express 模式。與 App Runner 不同,ECS Express 模式需要容器映像。不過,您可以使用 CI/CD 工具複寫 App Runner 的自動化部署體驗,例如 GitHub Actions 搭配 Amazon ECS Deploy Express Service GitHub Action
遷移工作流程有三個階段:
使用 Dockerfile 建置容器映像
將映像推送至容器登錄檔,例如 Amazon Elastic Container Registry
將映像部署至 ECS Express 模式
下圖顯示此工作流程如何使用 GitHub 動作運作:
容器化您的應用程式
如果您的應用程式還沒有 Dockerfile,請在儲存庫根目錄中建立一個。Dockerfile 做為建置原始碼並將原始碼封裝至容器映像的藍圖。
您的儲存庫結構應該包含:
your-app/ ├── src/ # Application source code ├── Dockerfile # Container build instructions ├── package.json # Dependencies and scripts └── .github/ # GitHub configuration └── workflows/ # GitHub Actions workflows └── deploy.yml # ECS Express Mode deployment workflow
設定自動部署的 GitHub 動作
若要在程式碼推送時複寫 App Runner 的自動部署,請使用下列項目設定 GitHub 動作:
建立 OpenID Connect (OIDC) 提供者
,以允許 GitHub 動作擔任 IAM 角色 使用 ECS Express 模式和 Amazon Elastic Container Registry 許可建立 IAM 角色
https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html 建立 ECS Express 模式所需的兩個 IAM 角色
為您的 ECS 資源建立 GitHub 環境變數:
ECS_SERVICE、ECS_CLUSTER、AWS_REGION、AWS_ACCOUNT_ID和ECR_REPOSITORY
GitHub 動作工作流程範例
在 建立工作流程檔案.github/workflows/deploy.yml:
name: Build and Deploy to ECS on: push: branches: [ main ] env: AWS_REGION: ${{ vars.AWS_REGION }} AWS_ACCOUNT_ID: ${{ vars.AWS_ACCOUNT_ID }} ECR_REPOSITORY: ${{ vars.ECR_REPOSITORY }} ECS_SERVICE: ${{ vars.ECS_SERVICE }} ECS_CLUSTER: ${{ vars.ECS_CLUSTER }} jobs: deploy: name: Deploy runs-on: ubuntu-latest environment: production permissions: id-token: write contents: read steps: - name: Checkout uses: actions/checkout@v6 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v5 with: aws-region: ${{ env.AWS_REGION }} role-to-assume: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/github-actions-ecs-role role-session-name: GitHubActionsECSDeployment - name: Login to Amazon ECR id: login-ecr uses: aws-actions/amazon-ecr-login@v2 - name: Get short commit hash run: echo "IMAGE_TAG=${GITHUB_SHA:0:7}" >> $GITHUB_ENV - name: Build, tag, and push image to Amazon ECR id: build-image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} uses: docker/build-push-action@v6 with: context: . push: true tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:latest,${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} - name: Deploy to ECS Express Mode uses: aws-actions/amazon-ecs-deploy-express-service@v1 env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} with: service-name: ${{ env.ECS_SERVICE }} image: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} execution-role-arn: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/ecsTaskExecutionRole infrastructure-role-arn: arn:aws:iam::${{ env.AWS_ACCOUNT_ID }}:role/ecsInfrastructureRoleForExpressServices cluster: ${{ env.ECS_CLUSTER }} container-port: 8080 environment-variables: | [ {"name": "ENV", "value": "Prod"} ] cpu: '1024' memory: '2048' health-check-path: /health min-task-count: 1 max-task-count: 4 auto-scaling-metric: AVERAGE_CPU auto-scaling-target-value: 70
當您將程式碼變更推送至主要分支時,GitHub Actions 會自動建立新的容器映像、將其推送至 Amazon Elastic Container Registry,並將其部署至 ECS Express Mode 服務。這會複寫您使用 App Runner 的自動化部署體驗。
一旦 ECS Express Mode 服務執行,請依照遷移演練中的步驟 3-5 來設定自訂網域、使用 DNS 路由轉移流量,並完成遷移。