

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

# 的 Amazon Elastic File System 範例 AWS CodeBuild
<a name="sample-efs"></a>

 您可能想要在 Amazon Elastic File System 上建立 AWS CodeBuild 組建，Amazon EC2 執行個體是可擴展的共用檔案服務。Amazon EFS 的儲存容量是彈性的，因此它會隨著檔案的新增和移除而成長或縮減。它有簡單的 Web 服務界面，可讓您用來快速輕鬆地建立和設定檔案系統。它還會為您管理所有檔案儲存基礎設施，因此您不需要擔心部署、修補，或維護檔案系統組態。如需詳細資訊，請參閱《[Amazon Elastic File System 使用者指南》中的什麼是 Amazon Elastic File System？](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)。 *Amazon Elastic File System * 

 此範例說明如何設定 CodeBuild 專案，使其掛載並建置 Java 應用程式至 Amazon EFS 檔案系統。開始之前，您必須準備好建置上傳至 S3 輸入儲存貯體或 AWS CodeCommit、GitHub、GitHub Enterprise Server 或 Bitbucket 儲存庫的 Java 應用程式。

檔案系統傳輸中的資料會受到加密。若要使用不同的映像加密傳輸中的資料，請參閱[加密傳輸中的資料](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)。

**Topics**
+ [AWS CodeBuild 搭配 Amazon Elastic File System 使用](#sample-efs-high-level-steps)
+ [Amazon EFS 整合疑難排解](sample-efs-troubleshooting.md)

## AWS CodeBuild 搭配 Amazon Elastic File System 使用
<a name="sample-efs-high-level-steps"></a>

此範例涵蓋搭配使用 Amazon EFS 所需的四個高階步驟 AWS CodeBuild。這些類別為：

1. 在 AWS 帳戶中建立虛擬私有雲端 (VPC)。

1. 建立使用此 VPC 的檔案系統。

1. 建立並建置使用 VPC 的 CodeBuild 專案。CodeBuild 專案使用下列項目來識別檔案系統：
   +  不重複的檔案系統識別碼。當您在組件專案中指定檔案系統時，您可以選擇識別碼。
   + 檔案系統 ID。當您在 Amazon EFS 主控台中檢視檔案系統時，會顯示 ID。
   +  一個掛載點。這是 Docker 容器中的一個目錄，用於掛載檔案系統。
   + 掛載選項。這些包括如何掛載檔案系統的相關詳細資訊。

1. 檢閱建置專案，以確保產生正確的專案檔案和變數。

**注意**  
 僅在 Linux 平台上支援在 Amazon EFS 中建立的檔案系統。

 

**Topics**
+ [步驟 1：使用 建立 VPC CloudFormation](#sample-efs-create-vpc)
+ [步驟 2：使用 VPC 建立 Amazon Elastic File System 檔案系統](#sample-efs-create-efs)
+ [步驟 3：建立 CodeBuild 專案以搭配 Amazon EFS 使用](#sample-efs-create-acb)
+ [步驟 4：檢閱建置專案](#sample-efs-summary)

### 步驟 1：使用 建立 VPC CloudFormation
<a name="sample-efs-create-vpc"></a>

 使用 CloudFormation 範本建立 VPC。

1.  遵循 中的指示[CloudFormation VPC 範本](cloudformation-vpc-template.md)，以使用 CloudFormation 建立 VPC。
**注意**  
 此 CloudFormation 範本建立的 VPC 有兩個私有子網路和兩個公有子網路。只有在使用 AWS CodeBuild 掛載您在 Amazon EFS 中建立的檔案系統時，才能使用私有子網路。如果您使用其中一個公有子網路，則建置會失敗。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)：// 開啟 Amazon VPC 主控台。

1.  選擇您建立的 VPC CloudFormation。

1. 在 **Description (描述)** 標籤上，記下 VPC 的名稱及其 ID。當您稍後在這個範例建立您的 AWS CodeBuild 專案時，會需要這兩個項目。

### 步驟 2：使用 VPC 建立 Amazon Elastic File System 檔案系統
<a name="sample-efs-create-efs"></a>

 使用您先前建立的 VPC，為此範例建立簡單的 Amazon EFS 檔案系統。

1. 登入 AWS 管理主控台 ，並在 https：// 開啟 Amazon EFS 主控台。 [ https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/)

1.  選擇 **Create file system (建立檔案系統)**。

1.  從 **VPC** 中，選擇您在此範例中稍早記下的 VPC 名稱。

1.  將與您的子網路相關聯的可用區域保持選取。

1.  選擇 **Next Step (後續步驟)**。

1.  在**新增標籤**中，針對預設**名稱**索引鍵，在**值**中輸入 Amazon EFS 檔案系統的名稱。

1.  將 **Bursting (爆量)** 與 **General Purpose (一般用途)** 分別選為預設效能及傳輸量模式，然後選擇 **Next Step (下一步)**。

1. 對於 **Configure new client (設定新用戶端)**，請選擇 **Next Step (下一個步驟)**。

1.  選擇 **Create File System (建立檔案系統)**。

1.  （選用） 建議您將政策新增至 Amazon EFS 檔案系統，以強制執行傳輸中資料的加密。在 Amazon EFS 主控台中，選擇**檔案系統政策**，選擇**編輯**，選擇標示**為所有用戶端強制執行傳輸中加密的**方塊，然後選擇**儲存**。

### 步驟 3：建立 CodeBuild 專案以搭配 Amazon EFS 使用
<a name="sample-efs-create-acb"></a>

 建立使用您先前在此範例中建立之 VPC 的 AWS CodeBuild 專案。當組建執行時，它會掛載先前建立的 Amazon EFS 檔案系統。接下來，組件會儲存由您的 Java 應用程式於檔案系統的掛載點目錄中建立的 .jar 檔案。

1. 在 https：//[https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) 開啟 AWS CodeBuild 主控台。

1.  從導覽窗格，選擇 **Build projects (建置專案)**，然後選擇 **Create build project (建立建置專案)**。

1.  在**專案名稱** 中，輸入您的專案名稱。

1.  從 **Source provider (來源供應商)**，選擇包含您希望建置的 Java 應用程式的儲存庫。

1.  輸入 CodeBuild 用來尋找應用程式的資訊，例如儲存庫 URL。每個來源供應商的選項不同。如需詳細資訊，請參閱[Choose source provider](create-project.md#create-project-source-provider)。

1.  從 **Environment image (環境映像)**，選擇 **Managed image (受管映像)**。

1.  從 **Operating system (作業系統)**，選擇 **Amazon Linux 2**。

1. 從 **Runtime(s) (執行時間)**，選擇 **Standard (標準)**。

1.  在**影像**中，選擇 **aws/codebuild/amazonlinux-x86\$164-standard：4.0。**

1.  從 **Environment type** (環境類型) 中選擇 **Linux**。

1.  在 **Service role (服務角色)** 下，選擇 **New service role (新服務角色)**。在**角色名稱**中，輸入 CodeBuild 為您建立的角色名稱。

1. 展開 **Additional configuration (其他組態)**。

1.  選取 **Enable this flag if you want to build Docker images or want your builds to get elevated privileges (若想建置 Docker 影像或讓您的建置提升權限，請啟用此標記)**。
**注意**  
根據預設，非 VPC 建置會啟用 Docker 協助程式。如果您想要使用 Docker 容器進行 VPC 建置，請參閱 Docker 文件網站上的[執行期權限和 Linux 功能](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)，並啟用特權模式。此外，Windows 不支援特殊權限模式。

1.  從 **VPC**，選擇 VPC ID。

1.  從 **Subnets (子網路)**，選擇與您的 VPC 關聯的一或多個私有子網路。您必須在掛載 Amazon EFS 檔案系統的建置中使用私有子網路。如果您使用公有子網路，則建置會失敗。

1.  從 **Security Groups** (安全群組) 中選擇預設的安全群組。

1.  在 **File systems** (檔案系統) 中，輸入下列資訊：
   + 針對 **Identifier (識別碼)**，輸入唯一的檔案系統識別碼。它必須少於 129 個字元，且只包含英數字元和底線。CodeBuild 使用此識別符來建立可識別彈性檔案系統的環境變數。環境變量格式是大寫英文字母的 `CODEBUILD_<file_system_identifier>`。例如，如果您輸入 `my_efs`，環境變數則為 `CODEBUILD_MY_EFS`。
   + 針對 **ID**，請選擇檔案系統 ID。
   + （選用） 在檔案系統中輸入目錄。CodeBuild 掛載此目錄。如果您將**目錄路徑**保留空白，CodeBuild 會掛載整個檔案系統。此路徑相對於檔案系統的根目錄。
   + 針對**掛載點**，在掛載檔案系統的建置容器中，輸入 目錄的絕對路徑。如果此目錄不存在，CodeBuild 會在建置期間建立目錄。
   + (選用) 輸入掛載選項。如果您將**掛載選項**保留空白，CodeBuild 會使用其預設掛載選項：

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     如需詳細資訊，請參閱《*Amazon Elastic File System 使用者指南*》中的[建議的 NFS 掛載選項](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html)。

1.  如為 **Build specification (建置規格)**，選擇 **Insert build commands (插入建置命令)**，然後選擇 **Switch to editor (切換到編輯器)**。

1.  在編輯器中輸入下列建置規格命令。使用您在步驟 17 中輸入的識別碼取代 `<file_system_identifier>`。使用大寫英文字母 (例如：`CODEBUILD_MY_EFS`)。

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  對所有其他設定使用預設值，然後選擇 **Create build project (建立建置專案)**。當建置完成時，您專案的主控台頁面就會顯示。

1.  選擇 **Start build (開始組建)**。

### 步驟 4：檢閱建置專案
<a name="sample-efs-summary"></a>



 建置 AWS CodeBuild 專案之後：
+  您有由 Java 應用程式建立的 .jar 檔案，該檔案建置在掛載點目錄下的 Amazon EFS 檔案系統。
+  可辨識您檔案系統的環境變數，會使用您在建立專案時輸入的檔案系統識別碼建立。

 如需詳細資訊，請參閱《Amazon Elastic [File System 使用者指南》中的掛](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)載檔案系統。 *Amazon Elastic File System * 

# Amazon EFS 整合疑難排解
<a name="sample-efs-troubleshooting"></a>

以下是使用 CodeBuild 設定 Amazon EFS 時可能遇到的錯誤。

**Topics**
+ [CLIENT\$1ERROR：掛載 '127.0.0.1：/' 失敗。 許可遭拒](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR：掛載 '127.0.0.1：/' 失敗。連線依對等重設](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR：未預期的 EC2 錯誤：UnauthorizedOperation](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR：掛載 '127.0.0.1：/' 失敗。 許可遭拒
<a name="sample-efs-troubleshooting.permission-denied"></a>

使用 CodeBuild 掛載 Amazon EFS 不支援 IAM 授權。如果您使用的是自訂 Amazon EFS 檔案系統政策，您將需要授予所有 IAM 主體的讀取和寫入存取權。例如：

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR：掛載 '127.0.0.1：/' 失敗。連線依對等重設
<a name="sample-efs-troubleshooting.connection-reset"></a>

此錯誤有兩種可能的原因：
+ CodeBuild VPC 子網路與 Amazon EFS 掛載目標位於不同的可用區域。您可以透過在與 Amazon EFS 掛載目標相同的可用區域中新增 VPC 子網路來解決此問題。
+ 安全群組沒有與 Amazon EFS 通訊的許可。您可以新增傳入規則，以允許來自 VPC （為您的 VPC 新增主要 CIDR 區塊） 或安全群組本身的所有流量來解決此問題。

## VPC\$1CLIENT\$1ERROR：未預期的 EC2 錯誤：UnauthorizedOperation
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

當 CodeBuild 專案 VPC 組態中的所有子網路都是公有子網路時，就會發生此錯誤。VPC 中必須至少有一個私有子網路，以確保網路連線。