

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

# 管理 Amplify 應用程式的建置組態
<a name="build-settings-configuration"></a>

您可以自訂 Amplify 部署的建置設定和組態。部署應用程式時，Amplify 會自動偵測前端架構和相關聯的建置設定。您可以在應用程式的建置規格 (buildspec) 中自訂建置設定，以新增環境變數、執行建置命令，以及指定建置相依性。

Amplify 的預設建置映像隨附預先安裝的數個套件和相依性，但您也可以使用即時套件更新功能來指定特定版本，或確保一律安裝最新版本。如果您有特定的相依性，在使用 Amplify 預設容器的建置期間需要很長時間才能安裝 ，您可以建立自己的自訂建置映像。您也可以自訂建置執行個體大小，以提供應用程式部署所需的 CPU、記憶體和磁碟空間資源。

組建會在每次遞交至 Git 儲存庫以及每次新部署時自動啟動。您可以設定傳入的 Webhook 功能來啟動組建，而無需遞交您的 Git 儲存庫。

建置通知功能可讓您與團隊成員分享建置成功和失敗的相關資訊。

**Topics**
+ [設定 Amplify 應用程式的建置設定](build-settings.md)
+ [自訂建置映像](custom-build-image.md)
+ [設定 Amplify 應用程式的建置執行個體](custom-build-instance.md)
+ [建立傳入 Webhook 以啟動組建](create-incoming-webhook.md)
+ [設定組建的電子郵件通知](notifications.md)

# 設定 Amplify 應用程式的建置設定
<a name="build-settings"></a>

部署應用程式時，Amplify 會透過檢查 Git 儲存庫中的應用程式`package.json`檔案，自動偵測前端架構和相關聯的建置設定。您可以使用下列選項來儲存應用程式的建置設定：
+ 在 Amplify 主控台中儲存建置設定 - Amplify 主控台會自動偵測建置設定並儲存，以便 Amplify 主控台存取這些設定。Amplify 會將這些設定套用至所有分支，除非您的儲存庫中存放了 `amplify.yml` 檔案。
+ 將建置設定儲存在儲存庫中 - 下載 `amplify.yml` 檔案，並將其新增至儲存庫的根目錄。

**注意**  
只有當應用程式設定為持續部署並連接到 git 儲存庫時，**建置設定**才會顯示在 Amplify 主控台的**託管**選單中。如需此部署類型的說明，請參閱 [入門](getting-started.md)。

# 組建規格參考
<a name="yml-specification-syntax"></a>

Amplify 應用程式的建置規格 (buildspec) 是一組 YAML 設定和建置命令，供 Amplify 用來執行您的建置。下列清單說明這些設定及其使用方式。

**version**  
Amplify YAML 版本編號。

**appRoot**  
此應用程式所在儲存庫內的路徑。*除非定義多個應用程式，否則會忽略。*

**env**  
將環境變數新增至本節。您也可以使用主控台新增環境變數。

**後端**  
執行 Amplify CLI 命令來佈建後端、更新 Lambda 函數或 GraphQL 結構描述，作為持續部署的一部分。

**前端**  
執行前端建置命令。

**test**  
在測試階段期間執行命令。了解如何[將測試新增至您的應用程式](running-tests.md)。

**建置階段**  
前端、後端和測試有三個*階段*，代表建置的每個序列期間執行的命令。  
+  **preBuild** - preBuild 指令碼會在實際建置開始之前執行，但在 Amplify 安裝相依性之後執行。
+  **build** - 您的建置命令。
+  **postBuild** - 建置完成後執行建置後指令碼，且 Amplify 已將所有必要成品複製到輸出目錄。

**buildpath**  
用來執行建置的路徑。Amplify 使用此路徑來尋找您的建置成品。如果您未指定路徑，Amplify 會使用 monorepo 應用程式根，例如 `apps/app`。

**artifacts>base-directory**  
您建置成品所在的目錄。

**artifacts>files**  
從您要部署的成品中指定檔案。輸入 `**/*` 以包含所有檔案。

**快取**  
指定建置時間相依性，例如 *node\$1modules* 資料夾。在第一次建置期間，會快取此處提供的路徑。在後續建置中，Amplify 會在執行命令之前，將快取還原至相同的路徑。  
Amplify 會將所有提供的快取路徑視為與您的專案根目錄相對。不過，Amplify 不允許在專案根目錄之外周遊。例如，如果您指定絕對路徑，組建將會成功而沒有錯誤，但路徑不會快取。

## 組建規格 YAML 語法參考
<a name="build-yaml-syntax"></a>

下列組建規格範例示範基本 YAML 語法。

```
version: 1
env:
  variables:
    key: value
backend:
  phases:
    preBuild:
      commands:
        - *enter command*
    build:
      commands:
        - *enter command*
    postBuild:
        commands:
        - *enter command*
frontend:
  buildpath:
  phases:
    preBuild:
      commands:
        - cd react-app
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    files:
        - location
        - location
    discard-paths: yes
    baseDirectory: location
  cache:
    paths:
        - path # A cache path relative to the project root
        - path # Traversing outside of the project root is not allowed
test:
  phases:
    preTest:
      commands:
        - *enter command*
    test:
      commands:
        - *enter command*
    postTest:
      commands:
        - *enter command*
  artifacts:
    files:
        - location
        - location
    configFilePath: *location*
    baseDirectory: *location*
```

# 編輯建置規格
<a name="edit-build-settings"></a>

您可以在 Amplify 主控台中編輯建置規格 (buildspec)，以自訂應用程式的建置設定。建置設定會套用至您應用程式中的所有分支，但 Git 儲存庫中儲存了 `amplify.yml` 檔案的分支除外。

**在 Amplify 主控台中編輯建置設定**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要編輯建置設定的應用程式。

1. 在導覽窗格中，選擇**託管**，然後選擇**建置設定**。

1. 在**建置設定**頁面**的應用程式建置規格**區段中，選擇**編輯**。

1. 在**編輯建置規格**視窗中，輸入您的更新。

1. 選擇**儲存**。

您可以使用下列主題中所述的範例來更新特定案例的建置設定。

**Topics**
+ [使用指令碼設定分支特定的建置設定](#branch-specific-build-settings)
+ [設定命令以導覽至子資料夾](#navigating-to-a-subfolder)
+ [使用 Gen 1 應用程式的前端部署後端](#frontend-with-backend)
+ [設定輸出資料夾](#setting-the-output-folder)
+ [在組建中安裝套件](#installing-packages-as-part-of-your-build)
+ [使用私有 npm 登錄檔](#using-a-private-npm-registry)
+ [安裝 OS 套件](#installing-os-packages)
+ [為每個組建設定鍵值儲存](#key-value-storage-for-every-build)
+ [略過遞交的建置](#skip-build-for-a-commit)
+ [關閉每個遞交上的自動建置](#disable-automatic-builds)
+ [設定以差異為基礎的前端建置和部署](#enable-diff-deploy)
+ [為 Gen 1 應用程式設定差異型後端建置](#enable-diff-backend)

## 使用指令碼設定分支特定的建置設定
<a name="branch-specific-build-settings"></a>

您可以使用 bash shell 指令碼來配置分支特定的建置設定。例如，下列指令碼使用系統環境變數 *\$1AWS\$1BRANCH*，在分支名稱為*主要*時執行一組命令，而在分支名稱為*開發*時執行另一組命令。

```
frontend:
  phases:
    build:
      commands:
        - if [ "${AWS_BRANCH}" = "main" ]; then echo "main branch"; fi
        - if [ "${AWS_BRANCH}" = "dev" ]; then echo "dev branch"; fi
```

## 設定命令以導覽至子資料夾
<a name="navigating-to-a-subfolder"></a>

對於 monorepos，使用者希望能夠在`cd`資料夾中執行建置。執行 `cd`命令後，它會套用至建置的所有階段，因此您不需要分階段重複執行命令。

```
version: 1
env:
  variables:
    key: value
frontend:
  phases:
    preBuild:
      commands:
        - cd react-app
        - npm ci
    build:
      commands:
        - npm run build
```

## 使用 Gen 1 應用程式的前端部署後端
<a name="frontend-with-backend"></a>

**注意**  
本節僅適用於 Amplify Gen 1 應用程式。第 1 代後端是使用 Amplify Studio 和 Amplify 命令列界面 (CLI) 建立。

`amplifyPush` 命令是一種協助程式指令碼，可協助您進行後端部署。下面的建置設定會自動判斷要為目前分支部署的正確後端環境。

```
version: 1
env:
  variables:
    key: value
backend:
  phases:
    build:
      commands:
        - amplifyPush --simple
```

## 設定輸出資料夾
<a name="setting-the-output-folder"></a>

以下建置設定會將輸出目錄設定為公有資料夾。

```
frontend:
  phases:
    commands:
      build:
        - yarn run build
  artifacts:
    baseDirectory: public
```

## 在組建中安裝套件
<a name="installing-packages-as-part-of-your-build"></a>

您可以使用 `npm`或 `yarn`命令在建置期間安裝套件。

```
frontend:
  phases:
    build:
      commands:
        - npm install -g <package>
        - <package> deploy
        - yarn run build
  artifacts:
    baseDirectory: public
```

## 使用私有 npm 登錄檔
<a name="using-a-private-npm-registry"></a>

您可以新增對您的建置設定中私有登錄的參考，或將它新增為環境變數。

```
build:
  phases:
    preBuild:
      commands:
        - npm config set <key> <value>
        - npm config set registry https://registry.npmjs.org
        - npm config set always-auth true
        - npm config set email hello@amplifyapp.com
        - yarn install
```

## 安裝 OS 套件
<a name="installing-os-packages"></a>

Amplify 的 AL2023 映像會使用名為 的非特殊權限使用者來執行您的程式碼`amplify`。Amplify 授予此使用者使用 Linux 命令執行作業系統`sudo`命令的權限。如果您想要為缺少的相依性安裝作業系統套件，您可以使用 和 等命令`yum``rpm`搭配 `sudo`。

下列範例建置區段示範使用 `sudo`命令安裝作業系統套件的語法。

```
build:
  phases:
    preBuild:
      commands:
        - sudo yum install -y <package>
```

## 為每個組建設定鍵值儲存
<a name="key-value-storage-for-every-build"></a>

會在建置時`envCache`提供鍵值儲存。儲存在 中的值`envCache`只能在建置期間修改，並可在下一次建置時重複使用。使用 `envCache`，我們可以將資訊存放在已部署的環境上，並連續提供建置容器使用。與存放在 中的值不同`envCache`，在建置期間的環境變數變更不會保留到未來的建置。

使用範例：

```
envCache --set <key> <value>
envCache --get <key>
```

## 略過遞交的建置
<a name="skip-build-for-a-commit"></a>

若要略過特定遞交的自動建置，請在遞交訊息結尾加入文字 **【skip-cd】**。

## 關閉每個遞交上的自動建置
<a name="disable-automatic-builds"></a>

您可以設定 Amplify 來關閉每個程式碼遞交的自動建置。若要設定，請選擇**應用程式設定**、**分支設定**，然後尋找列出已連接分支的**分支**區段。選取分支，然後選擇**動作**、**停用自動建置**。對該分支的新遞交將不再啟動新的組建。

## 設定以差異為基礎的前端建置和部署
<a name="enable-diff-deploy"></a>

您可以設定 Amplify 使用 diff 型前端建置。如果啟用，在每個組建開始時，Amplify 會嘗試在您的 `appRoot`或 `/src/` 資料夾上執行 diff。如果 Amplify 找不到任何差異，它會略過前端建置、測試 （如果已設定） 和部署步驟，而且不會更新您的託管應用程式。

**設定以 diff 為基礎的前端建置和部署**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要設定 diff 型前端建置和部署的應用程式。

1. 在導覽窗格中，選擇**託管**、**環境變數**。

1. 在**環境變數**區段中，選擇**管理變數**。

1. 設定環境變數的程序會根據您是否啟用或停用以差異為基礎的前端建置和部署而有所不同。
   + 啟用 diff 型前端建置和部署

     1. 在**管理變數**區段的**變數**下，輸入 `AMPLIFY_DIFF_DEPLOY`。

     1. 針對**數值**，輸入 `true`。
   + 停用以 diff 為基礎的前端建置和部署

     1. 執行以下任意一項：
       + 在**管理變數**區段中，找到 `AMPLIFY_DIFF_DEPLOY`。針對**數值**，輸入 `false`。
       + 移除`AMPLIFY_DIFF_DEPLOY`環境變數。

1. 選擇**儲存**。

或者，您可以設定`AMPLIFY_DIFF_DEPLOY_ROOT`環境變數，以相對於儲存庫根目錄的路徑覆寫預設路徑，例如 `dist`。

## 為 Gen 1 應用程式設定差異型後端建置
<a name="enable-diff-backend"></a>

**注意**  
本節僅適用於 Amplify Gen 1 應用程式。第 1 代後端是使用 Amplify Studio 和 Amplify 命令列界面 (CLI) 建立。

您可以使用 `AMPLIFY_DIFF_BACKEND`環境變數，將 Amplify 託管設定為使用 diff 型後端建置。當您啟用 diff 型後端建置時，在每個建置開始時，Amplify 會嘗試在儲存庫中的`amplify`資料夾上執行 diff。如果 Amplify 找不到任何差異，它會略過後端建置步驟，而不會更新您的後端資源。如果您的專案在儲存庫中沒有 `amplify` 資料夾，Amplify 會忽略`AMPLIFY_DIFF_BACKEND`環境變數的值。

如果您目前在後端階段的建置設定中指定了自訂命令，則條件式後端建置將無法運作。如果您希望這些自訂命令執行，則必須將其移至您應用程式`amplify.yml`檔案中建置設定的前端階段。

**設定 diff 型後端建置**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要設定 diff 型後端建置的應用程式。

1. 在導覽窗格中，選擇**託管**、**環境變數**。

1. 在**環境變數**區段中，選擇**管理變數**。

1. 環境變數的設定程序會因您是否啟用或停用 diff 型後端建置而有所不同。
   + 啟用 diff 型後端建置

     1. 在**管理變數**區段的**變數**下，輸入 `AMPLIFY_DIFF_BACKEND`。

     1. 針對**數值**，輸入 `true`。
   + 停用 diff 型後端建置

     1. 執行以下任意一項：
       + 在**管理變數**區段中，找到 `AMPLIFY_DIFF_BACKEND`。針對**數值**，輸入 `false`。
       + 移除`AMPLIFY_DIFF_BACKEND`環境變數。

1. 選擇**儲存**。

# 設定 monorepo 組建設定
<a name="monorepo-configuration"></a>

當您在單一儲存庫中存放多個專案或微服務時，稱為單一儲存庫。您可以使用 Amplify Hosting 在單一儲存庫中部署應用程式，而無需建立多個建置組態或分支組態。

Amplify 支援通用 monorepos 中的應用程式，以及使用 npm 工作區、pnpm 工作區、Yarn 工作區、Nx 和 Turborepo 建立的 monorepo 中的應用程式。部署應用程式時，Amplify 會自動偵測您正在使用的 monorepo 建置工具。Amplify 會自動套用 npm 工作區、Yarn 工作區或 Nx 中應用程式的建置設定。Turborepo 和 pnpm 應用程式需要額外的組態。如需詳細資訊，請參閱[設定 Turborepo 和 pnpm monorepo 應用程式](#turborepo-pnpm-monorepo-configuration)。

您可以在 Amplify 主控台中儲存單一儲存庫的建置設定，也可以下載 `amplify.yml` 檔案並將其新增至儲存庫的根目錄。Amplify 會將主控台中儲存的設定套用至所有分支，除非其在您的儲存庫中找到 `amplify.yml` 檔案。當`amplify.yml`檔案存在時，其設定會覆寫 Amplify 主控台中儲存的任何建置設定。

## Monorepo 建置規格 YAML 語法參考
<a name="monorepo-yml-syntax"></a>

單一儲存庫建置規格的 YAML 語法與包含單一應用程式的儲存庫的 YAML 語法不同。對於單一儲存庫，您可以在應用程式清單中宣告每個專案。您必須為在 monorepo 建置規格中宣告的每個應用程式提供下列額外`appRoot`金鑰：

**appRoot**  
應用程式啟動所在的儲存庫根目錄。此金鑰必須存在，且具有與`AMPLIFY_MONOREPO_APP_ROOT`環境變數相同的值。如需設定此環境變數的說明，請參閱 [設定 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境變數](#setting-monorepo-environment-variable)。

下列單儲存庫建置規格範例示範如何在同一個儲存庫中宣告多個 Amplify 應用程式。這兩個應用程式 `react-app`和 `angular-app`會在`applications`清單中宣告。每個應用程式的`appRoot`金鑰表示應用程式位於儲存庫的`apps`根資料夾中。

`buildpath` 屬性設定為 `/`，以從 monorepo 專案根目錄執行和建置應用程式。`baseDirectory` 屬性是 的相對路徑`buildpath`。

### Monorepo 建置規格 YAML 語法
<a name="monorepo-build-yaml-syntax"></a>

```
version: 1
applications:
  - appRoot: apps/react-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      buildPath: / # Run install and build from the monorepo project root
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
  - appRoot: apps/angular-app
    env:
      variables:
        key: value
    backend:
      phases:
        preBuild:
          commands:
            - *enter command*
        build:
          commands:
            - *enter command*
        postBuild:
            commands:
            - *enter command*
    frontend:
      phases:
        preBuild:
          commands:
            - *enter command*
            - *enter command*
        build:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        discard-paths: yes
        baseDirectory: location
      cache:
        paths:
            - path
            - path
    test:
      phases:
        preTest:
          commands:
            - *enter command*
        test:
          commands:
            - *enter command*
        postTest:
          commands:
            - *enter command*
      artifacts:
        files:
            - location
            - location
        configFilePath: *location*
        baseDirectory: *location*
```

使用下列範例建置規格的應用程式，將建置在專案根目錄下，而建置成品將位於 `/packages/nextjs-app/.next`。

```
applications:
  - frontend:
      buildPath: '/'  # run install and build from monorepo project root
      phases:
        preBuild:
          commands:
            - npm install
        build:
          commands:
            - npm run build --workspace=nextjs-app
      artifacts:
        baseDirectory: packages/nextjs-app/.next
        files:
          - '**/*'
      cache:
        paths:
          - node_modules/**/*
    appRoot: packages/nextjs-app
```

## 設定 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境變數
<a name="setting-monorepo-environment-variable"></a>

當您部署存放在單一儲存庫中的應用程式時，應用程式`AMPLIFY_MONOREPO_APP_ROOT`的環境變數必須具有與應用程式根目錄路徑相同的值，相對於儲存庫根目錄。例如，名為 `ExampleMonorepo`且根資料夾名為 的 monorepo`apps`，其中包含 、 `app1` `app2`和 `app3`的目錄結構如下：

```
ExampleMonorepo
  apps
    app1
    app2
    app3
```

在此範例中， `AMPLIFY_MONOREPO_APP_ROOT`的環境變數值`app1`為 `apps/app1`。

當您使用 Amplify 主控台部署 monorepo 應用程式時，主控台會自動使用您為應用程式根目錄路徑指定的值來設定`AMPLIFY_MONOREPO_APP_ROOT`環境變數。不過，如果您的 monorepo 應用程式已存在於 Amplify 中或使用 部署 AWS CloudFormation，您必須在 Amplify 主控台`AMPLIFY_MONOREPO_APP_ROOT`的環境變數區段中手動設定**環境變數**。

### 在部署期間自動設定 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境變數
<a name="setting-monorepo-environmnet-variable-automatically"></a>

下列指示示範如何使用 Amplify 主控台部署 monorepo 應用程式。Amplify 會使用您在主控台中指定的應用程式根資料夾自動設定`AMPLIFY_MONOREPO_APP_ROOT`環境變數。

**使用 Amplify 主控台部署 monorepo 應用程式**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇右上角**的新建應用程式**。

1. 在**開始使用 Amplify 建置**頁面上，選擇您的 Git 供應商，然後選擇**下一步**。

1. 在**新增儲存庫分支**頁面上，執行下列動作：

   1. 從清單中選擇儲存庫的名稱。

   1. 選擇要使用的分支名稱。

   1. 選取 **我的應用程式是單一儲存庫**

   1. 在 monorepo 中輸入應用程式的路徑，例如 **apps/app1**。

   1. 選擇**下一步**。

1. 在**應用程式設定**頁面上，您可以使用預設設定或自訂應用程式的建置設定。在**環境變數**區段中，Amplify `AMPLIFY_MONOREPO_APP_ROOT`會將 設定為您在步驟 4d 中指定的路徑。

1. 選擇**下一步**。

1. 在**檢閱**頁面上，選擇**儲存並部署**。

### 設定現有應用程式的 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境變數
<a name="setting-monorepo-environment-variable-manually"></a>

使用下列指示，為已部署至 Amplify 或使用 CloudFormation 建立的應用程式手動設定`AMPLIFY_MONOREPO_APP_ROOT`環境變數。

**設定現有應用程式的 AMPLIFY\$1MONOREPO\$1APP\$1ROOT 環境變數**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要為其設定環境變數的應用程式名稱。

1. 在導覽窗格中，選擇**託管**，然後選擇**環境變數**。

1. 在**環境變數**頁面上，選擇**管理變數**。

1. 在**管理變數**區段中，執行下列動作：

   1. 選擇 **Add new (新增)**。

   1. 針對**變數**，輸入金鑰 `AMPLIFY_MONOREPO_APP_ROOT`。

   1. 針對**值**，輸入應用程式的路徑，例如 **apps/app1**。

   1. 對於**分支**，根據預設，Amplify 會將環境變數套用至所有分支。

1. 選擇**儲存**。

## 設定 Turborepo 和 pnpm monorepo 應用程式
<a name="turborepo-pnpm-monorepo-configuration"></a>

Turborepo 和 pnpm 工作區 monorepo 建置工具會從 `.npmrc` 檔案取得組態資訊。當您部署使用其中一個工具建立的 monorepo 應用程式時，您的專案根目錄中必須有 `.npmrc` 檔案。

在 `.npmrc`檔案中，將安裝 Node 套件的連結器設定為 `hoisted`。您可以將以下行複製到您的 檔案。

```
node-linker=hoisted
```

如需`.npmrc`檔案和設定的詳細資訊，請參閱 [pnpm 文件中的 pnpm .](https://pnpm.io/next/npmrc)*npmrc*。

Pnpm 不包含在 Amplify 預設建置容器中。對於 pnpm 工作區和 Turborepo 應用程式，您必須新增命令，才能在應用程式的建置設定`preBuild`階段中安裝 pnpm。

下列範例摘錄自建置規格，顯示具有安裝 pnpm 命令的`preBuild`階段。

```
version: 1
applications:
  - frontend:
      phases:
        preBuild:
          commands:
            - npm install -g pnpm
```

# 自訂建置映像
<a name="custom-build-image"></a>

您可以使用自訂建置映像，為 Amplify 應用程式提供自訂建置環境。如果您有特定的相依性，在使用 Amplify 預設容器的建置期間需要很長時間才能安裝 ，您可以建立自己的 Docker 映像，並在建置期間加以參考。映像可以在 Amazon Elastic Container Registry Public 上託管。

若要讓自訂建置映像做為 Amplify 建置映像，它必須符合下列要求。

**自訂建置映像需求**

1. 支援 GNU C Library (glibc) 的 Linux 發行版本，例如針對 x86-64 架構編譯的 Amazon Linux。

1.  **cURL**：在啟動您的自訂影像時，我們會下載建置執行器至容器，因此需要有 cURL。如果缺少此相依性，則建置會立即失敗而沒有任何輸出，因為我們的建置執行器無法產生任何輸出。

1.  **Git**：該影像上需安裝 Git，才能複製 Git 儲存庫。如果缺少此相依性，**複製儲存庫**步驟將會失敗。

1.  **OpenSSH**：為了安全地複製您的儲存庫，我們需要 OpenSSH 在建置期間暫時設定 SSH 金鑰。OpenSSH 套件提供建置執行器執行此作業所需的命令。

1.  **Bash 和 Bourne Shell**：這兩個公用程式用於在建置時執行命令。如果未安裝，您的組建可能會在開始之前失敗。

1.  **Node.JS\$1NPM**：我們的建置執行器不會安裝 Node。相反地，它依賴於在映像中安裝的節點和 NPM。只有需要 NPM 套件或 Node 特定命令的建置，才要進行此操作。不過，我們強烈建議安裝它們，因為當它們存在時，Amplify 建置執行器可以使用這些工具來改善建置執行。當您為 Hugo 設定覆寫時，Amplify 的套件覆寫功能會使用 NPM 安裝 Hugo 延伸套件。

下列套件並非必要項目，但強烈建議您安裝。

1. **NVM (Node Version Manager)**：如果您需要處理不同版本的 ，建議您安裝此版本管理員Node。當您設定覆寫時，Amplify 的套件覆寫功能會在每次建置之前NVM使用 來變更 Node.js 版本。

1. **Wget**：Amplify 可以使用 Wget公用程式在建置程序期間下載檔案。建議您將其安裝在自訂映像中。

1. **Tar**：Amplify 可以使用 Tar公用程式，在建置過程中解壓縮下載的檔案。建議您將其安裝在自訂映像中。

## 設定應用程式的自訂建置映像
<a name="configuring-a-custom-build-image"></a>

使用下列程序，在 Amplify 主控台中設定應用程式的自訂建置映像。

**設定 Amazon ECR 中託管的自訂建置映像**

1. 請參閱 *Amazon ECR 公有使用者指南*中的[入門](https://docs.aws.amazon.com/AmazonECR/latest/public/public-getting-started.html)，以使用 Docker 映像設定 Amazon ECR 公有儲存庫。

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要為其設定自訂建置映像的應用程式。

1. 在導覽窗格中，選擇**託管**、**建置設定**。

1. 在**建置設定**頁面的**建置映像設定**區段中，選擇**編輯**。

1. 在**編輯建置映像設定**頁面上，展開**建置映像**功能表，然後選擇**自訂建置映像**。

1. 輸入您在步驟一中建立的 Amazon ECR Public 儲存庫名稱。這是您的建置映像託管的位置。例如，如果您的儲存庫名稱是 *ecr-examplerepo*，您會輸入 **public.ecr.aws/xxxxxxxx/ecr-examplerepo**。

1. 選擇**儲存**。

## 在建置映像中使用特定套件和相依性版本
<a name="setup-live-updates"></a>

即時套件更新可讓您指定要在 Amplify 預設建置映像中使用的套件和相依性版本。預設建置映像隨附預先安裝的數個套件和相依性 （例如 Hugo、Amplify CLI、Yarn 等）。透過即時套件更新，您可以覆寫這些相依性的版本，並指定特定版本，或確保一律安裝最新版本。

如果啟用即時套件更新，則在建置執行之前，建置執行器會先更新 （或降級） 指定的相依性。這會根據更新相依性所需的時間來增加建置時間，但優點是您可以確保使用相同版本的相依性來建置應用程式。

**警告**  
將 Node.js 版本設定為**最新**會導致建置失敗。反之，您必須指定確切的 Node.js 版本，例如 `18`、 `21.5`或 `v0.1.2`。

**設定即時套件更新**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要為其設定即時套件更新的應用程式。

1. 在導覽窗格中，選擇**託管**、**建置設定**。

1. 在**建置設定**頁面的**建置映像設定**區段中，選擇**編輯**。

1. 在**編輯建置映像設定**頁面上，**即時套件更新**清單，選擇**新增**。

1. 針對**套件**，選取要覆寫的相依性。

1. 對於**版本**，請保持預設**最新**或輸入特定版本的相依性。如果您使用**最新版本**，相依性將一律升級至可用的最新版本。

1. 選擇**儲存**。

# 設定 Amplify 應用程式的建置執行個體
<a name="custom-build-instance"></a>

Amplify Hosting 提供可設定的建置執行個體大小，可讓您提供應用程式的建置執行個體所需的 CPU、記憶體和磁碟空間資源。在發行此功能之前，Amplify 提供了 8 GiB 記憶體和 4 個 vCPUs的固定大小建置執行個體組態。

Amplify 支援三種建置執行個體類型：Standard、 Large和 XLarge。如果您未指定執行個體類型，Amplify 會使用預設Standard執行個體。您可以使用 Amplify 主控台 AWS CLI、 或 SDKs 來設定應用程式的建置執行個體類型。

每個組建執行個體類型的成本會按組建分鐘計算。如需定價詳細資訊，請參閱 [AWS Amplify 定價](https://aws.amazon.com/amplify/pricing/)。

下表說明每個建置執行個體類型的運算規格：


| 組建執行個體類型 | vCPUs | 記憶體 | 磁碟空間 | 
| --- | --- | --- | --- | 
| Standard | 4 vCPUs | 8 GiB | 128 GB | 
| Large | 8 vCPUs | 16 GiB | 128 GB | 
| XLarge | 36 vCPUs | 72 GiB | 256 GB | 

**Topics**
+ [了解建置執行個體類型](#understanding-build-instance-sizes)
+ [在 Amplify 主控台中設定建置執行個體類型](#configure-build-instance-type)
+ [設定應用程式的堆積記憶體以利用大型執行個體類型](#configuring-heap-memory)

## 了解建置執行個體類型
<a name="understanding-build-instance-sizes"></a>



建置執行個體類型設定是在應用程式層級設定，並延伸至應用程式的所有分支。下列金鑰詳細資訊適用於建置執行個體類型：
+ 您為應用程式設定的建置執行個體類型會自動套用至自動建立的分支和提取請求預覽。
+ *並行任務*服務配額適用於您 中的所有建置執行個體類型 AWS 帳戶。例如，如果您*的並行任務*限制為 5，您最多可以在 中的所有執行個體類型中執行 5 個組建 AWS 帳戶。
+ 每個組建執行個體類型的成本會按組建分鐘計算。建置執行個體配置程序可能需要額外的額外額外負荷時間，才能開始建置。對於較大的執行個體，特別是 XLarge，由於此額外負荷時間，您的建置可能會在建置開始之前遇到延遲。不過，您只需支付實際建置時間的費用，而非額外負荷時間。

您可以在建立新應用程式時設定建置執行個體類型，也可以更新現有應用程式的執行個體類型。如需在 Amplify 主控台中設定此設定的說明，請參閱 [在 Amplify 主控台中設定建置執行個體類型](#configure-build-instance-type)。您也可以使用 SDKs更新此設定。如需詳細資訊，請參閱 Amplify APIs 參考中的 [CreateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_CreateApp.html) 和 [UpdateApp](https://docs.aws.amazon.com/amplify/latest/APIReference/API_UpdateApp.html) API。 **

如果您的帳戶中有在可自訂建置執行個體類型功能發行之前建立的現有應用程式，則會使用預設Standard執行個體類型。當您更新現有應用程式的建置執行個體類型時，任何在更新之前排入佇列或進行中的建置都會使用先前設定的建置執行個體類型。例如，如果您有部署到 Amplify 的`main`分支的現有應用程式，並且將其建置執行個體類型從**標準**更新為**大型**，則從`main`分支啟動的所有新建置將使用**大型**建置執行個體類型。不過，在您更新組建執行個體類型時正在進行的任何組建都會繼續在**標準**執行個體上執行。

## 在 Amplify 主控台中設定建置執行個體類型
<a name="configure-build-instance-type"></a>

當您建立新的 Amplify 應用程式時，請使用下列程序來設定建置執行個體類型。

**設定新應用程式的建置執行個體類型**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. **在所有應用程式**頁面上，選擇**建立新應用程式**。

1. 在**開始使用 Amplify 建置**頁面上，選擇您的 Git 儲存庫提供者，然後選擇**下一步**。

1. 在**新增儲存庫分支**頁面上，執行下列動作：

   1. 在**最近更新的儲存庫**清單中，選取要連線的儲存庫名稱。

   1. 在**分支**清單中，選取要連線的儲存庫分支名稱。

   1. 選擇**下一步**。

1. 在**應用程式設定**頁面上，開啟**進階設定**區段。

1. 針對**建置執行個體類型**，從清單中選擇所需的執行個體類型。

1. 如果您要部署以 Node.js 執行期為基礎的應用程式，請設定堆積記憶體大小，以有效利用大型執行個體類型。您可以透過設定環境變數或更新建置設定，在**應用程式**設定頁面上執行此操作。如需詳細資訊，請參閱[設定應用程式的堆積記憶體以利用大型執行個體類型](#configuring-heap-memory)。
   + 設定環境變數

     1. 在**進階設定****、環境變數**區段中，選擇**新增**。

     1. 針對**金鑰**輸入 **NODE\$1OPTIONS**。

     1. 針對**數值**，輸入 `--max-old-space-size=memory_size_in_mb`。將 *memory\$1size\$1in\$1mb* 取代為所需的堆積記憶體大小，以 MB 為單位。
   + 更新建置設定

     1. 在**建置設定**區段中，選擇**編輯 YML 檔案**。

     1. 將下列命令新增至 `preBuild`階段。將 *memory\$1size\$1in\$1mb* 取代為所需的堆積記憶體大小，以 MB 為單位。

        ```
        export NODE_OPTIONS='--max-old-space-size=memory_size_in_mb'
        ```

     1. 選擇**儲存**。

1. 選擇**下一步**。

1. 在**檢閱**頁面上，選擇**儲存並部署**。

使用下列程序來設定現有 Amplify 應用程式的建置執行個體類型。

**設定現有應用程式的建置執行個體類型**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要為其設定建置執行個體類型的應用程式。

1. 在導覽窗格中，選擇**託管**，選擇**建置設定**。

1. 在**建置設定**頁面的**進階設定**區段中，選擇**編輯**。

1. 在**編輯設定**頁面上，針對**建置執行個體類型**，從清單中選擇所需的執行個體類型。

1. 選擇**儲存**。此變更將在您下次部署應用程式時生效。

1. （選用） 若要立即部署更新的應用程式，請執行下列動作：

   1. 在導覽窗格中，選擇**概觀**。

   1. 在應用程式的概觀頁面上，選擇要重新部署的分支。

   1. 在**部署**頁面上，選擇部署，例如最新的部署。然後，選擇**重新部署此版本**。新的部署將會開始。

   1. 部署完成時，應用程式的建置設定會顯示分支正在使用更新的建置執行個體類型。

## 設定應用程式的堆積記憶體以利用大型執行個體類型
<a name="configuring-heap-memory"></a>

如果您要建置記憶體密集型應用程式，請使用本節了解如何設定應用程式以利用大型執行個體類型。在執行時間期間，程式設計語言和架構通常依賴配置動態記憶體，也稱為堆積記憶體，以管理應用程式記憶體需求。堆積記憶體由執行時間環境請求，並由主機作業系統配置。根據預設，執行時間環境會強制執行應用程式可用的堆積大小上限。這表示即使主機作業系統或容器有較多的記憶體可用，應用程式也無法使用超過堆積大小的額外記憶體。

例如，JavaScript Node.js v8 執行時間環境會強制執行預設堆積大小限制，這取決於多種因素，包括主機記憶體大小。因此， Standard和 Large 組建執行個體的預設 Node.js 堆積大小為 2096 MB，而XLarge執行個體的預設堆積大小為 4144 MB。因此，在任何 Amplify 建置執行個體類型上使用預設 Node.js 堆積大小，以 6000 MB 記憶體需求建置應用程式，將導致因out-of-memory錯誤而導致建置失敗。

若要解決 Node.js 預設堆積大小記憶體限制，您可以執行下列其中一項作業：
+ 將 Amplify 應用程式中`NODE_OPTIONS`的環境變數設定為值 `--max-old-space-size=memory_size_in_mb`。針對 `memory_size_in_mb`，以 MB 為單位指定您想要的堆積記憶體大小。

  如需說明，請參閱[設定環境變數](setting-env-vars.md)。
+ 將下列命令新增至 Amplify 應用程式建置規格中的 `preBuild`階段。

  ```
  export NODE_OPTIONS='--max-old-space-size=memory_size_in_mb'
  ```

  您可以在 Amplify 主控台或專案儲存庫的應用程式`amplify.yml`檔案中更新建置規格。如需說明，請參閱[設定 Amplify 應用程式的建置設定](build-settings.md)。

  下列範例 Amplify 建置規格會將 Node.js 堆積記憶體大小設定為 7000 MB，以建置 React 前端應用程式：

  ```
  version: 1
  frontend:
    phases:
      preBuild:
        commands:
          # Set the heap size to 7000 MB
          - export NODE_OPTIONS='--max-old-space-size=7000'
          # To check the heap size memory limit in MB
          - node -e "console.log('Total available heap size (MB):', v8.getHeapStatistics().heap_size_limit / 1024 / 1024)"
          - npm ci --cache .npm --prefer-offline
      build:
        commands:
          - npm run build
    artifacts:
      baseDirectory: build
      files:
        - '**/*'
    cache:
      paths:
        - .npm/**/*
  ```

若要有效利用大型執行個體類型，請務必設定足夠的堆積記憶體大小。為記憶體密集型應用程式設定小型堆積大小可能會導致建置失敗。應用程式建置日誌可能不會直接指出out-of-memory錯誤，因為應用程式執行時間可能會意外當機。將堆積大小設定為主機記憶體的大小，可能會導致主機作業系統交換或終止其他程序，並可能中斷您的建置程序。作為參考，Node.js 建議在具有大約 2000 MB 記憶體的機器上設定最大堆積大小為 1536 MB，以保留一些記憶體供其他用途使用。

最佳堆積大小取決於應用程式的需求和資源用量。如果您遇到out-of-memory錯誤，請從中等堆積大小開始，然後視需要逐漸增加。作為準則，我們建議從Standard執行個體類型的 6000 MB、Large執行個體類型的 12000 MB 和XLarge執行個體類型的 60000 MB 開始。

# 建立傳入 Webhook 以啟動組建
<a name="create-incoming-webhook"></a>

在 Amplify 主控台中設定傳入 Webhook 以啟動組建，而無需將程式碼遞交至 Git 儲存庫。您可以使用 Webhook 搭配無周邊 CMS 工具 （例如 Contentful 或 GraphCMS)，在內容變更時啟動組建，或使用 Zapier 等服務執行每日組建。

**建立傳入 Webhook**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要為其建立 Webhook 的應用程式。

1. 在導覽窗格中，選擇**託管**，然後選擇**建置設定**。

1. 在**建置設定**頁面上，向下捲動至**傳入 Webhook **區段，然後選擇**建立 Webhook**。

1. 在**建立 Webhook** 對話方塊中，執行下列動作：

   1. 針對 **Webhook 名稱**，輸入 Webhook 的名稱。

   1. 針對**要建置的分支**，選取要在傳入 Webhook 請求上建置的分支。

   1. 選擇**建立 Webhook**。

1. 在**傳入 Webhook **區段中，執行下列其中一項操作：
   + 複製 Webhook URL，並將其提供給無周邊 CMS 工具或其他 服務以啟動組建。
   + 在終端機視窗中執行 curl 命令，以啟動新的組建。

# 設定組建的電子郵件通知
<a name="notifications"></a>

您可以為 AWS Amplify 應用程式設定電子郵件通知，以在建置成功或失敗時提醒利益相關者或團隊成員。Amplify 託管會在您的帳戶中建立 Amazon Simple Notification Service (SNS) 主題，並使用它來設定電子郵件通知。通知可設定為套用至 Amplify 應用程式的所有分支或特定分支。

## 設定電子郵件通知
<a name="email-notifications"></a>

使用下列程序來設定 Amplify 應用程式的所有分支或特定分支的電子郵件通知。

**設定 Amplify 應用程式的電子郵件通知**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要為其設定電子郵件通知的應用程式。

1. 在導覽窗格中，選擇**託管**、**建置通知**。在**建置通知**頁面上，選擇**管理通知**。

1. 在**管理通知**頁面上，選擇**新增**。

1. 執行以下任意一項：
   + 若要傳送單一分支的通知，請在**電子郵件**中輸入要傳送通知的電子郵件地址。針對**分支**，選取要傳送通知的分支名稱。
   + 若要傳送所有連線分支的通知，請在**電子郵件**中輸入要傳送通知的電子郵件地址。針對**分支**，選擇*所有分支*。

1. 選擇**儲存**。