AWS Elastic Beanstalk的 範例 CodeBuild - AWS CodeBuild

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

AWS Elastic Beanstalk的 範例 CodeBuild

此範例使用AWS CodeBuild來產生單一 WAR 檔案ROOT.war作為構建輸出。然後,此範例會將 WAR 檔案部署到 AWS Elastic Beanstalk 環境中的執行個體。

重要

執行此範例可能會對您的 AWS 帳戶收取費用。收費的項目可能包括 CodeBuild 和AWS與亞馬遜 S3 相關的資源和操作,AWS KMS、 CloudWatch 日誌和 Amazon EC2。如需詳細資訊,請參閱「」CodeBuild 定價Amazon S3 定價AWS Key Management Service價錢亞馬遜 CloudWatch 價錢,和Amazon EC2 定價

建立原始程式碼

在本節中,您將使用 Maven 來產生原始碼。稍後,您使用 CodeBuild 根據此來源碼建立 WAR 檔案。

  1. 下載並安裝 Maven。如需詳細資訊,請參閱 Apache Maven 網站上的下載 Apache Maven安裝 Apache Maven

  2. 切換至您本機電腦或執行個體上的空白目錄,然後執行此 Maven 命令。

    mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=ROOT" "-DarchetypeArtifactId=maven-archetype-webapp" "-DinteractiveMode=false"

    如果成功,則會建立此目錄結構和檔案。

    . └── ROOT ├── pom.xml └── src └── main ├── resources └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
  3. ROOT 目錄中建立名為 .ebextensions 的子目錄。在 .ebextensions 子目錄中,使用此內容來建立名為 fix-path.config 的檔案。

    container_commands: fix_path: command: "unzip ROOT.war 2>&1 > /var/log/my_last_deploy.log"

執行 Maven 後,請繼續進行下列其中一個案例:

方案 A:執行 CodeBuild 手動並手動部署至 Elastic Beanstalk

在此案例中,您將建立並上傳原始碼。然後您可以使用AWS CodeBuild和AWS Elastic Beanstalk主控台建立原始碼、建立 Elastic Beanstalk 應用程式和環境,並將組建輸出部署至該環境。

步驟 a1:將檔案新增至原始程式碼

在此步驟中,您會將 Elastic Beanstalk 配置檔案和 Buildspec 檔案新增至建立原始程式碼。然後,您會將原始程式碼上傳至 S3 輸入儲存貯體或 CodeCommit、GitHub 或 Bitbucket 儲存庫。

  1. 使用下列內容建立名為 buildspec.yml 的檔案。將檔案存放於 ROOT 目錄中。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/*
  2. 您的檔案結構現在看起來應如下。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
  3. 上傳ROOT目錄連接至 S3 輸入儲存貯體或程式 CodeCommit、GitHub 或 Bitbucket 儲存庫。

    重要

    不上傳ROOT,僅顯示ROOT

    如果您使用的是 S3 輸入儲存貯體,則必須進行版本控制。請務必建立包含目錄結構和檔案的 ZIP 檔案,然後將其上傳至輸入儲存貯體。請勿將 ROOT 新增至 ZIP 檔案,僅新增 ROOT 中的目錄和檔案即可。如需詳細資訊,請參閱「」如何設定儲存貯體的版本控制中的Amazon S3 開發人員指南

步驟 a2:建立建置專案並執行組建

在此步驟中,您將使用 AWS CodeBuild 主控台來建立建置專案,然後執行建置。

  1. 建立或選擇 S3 輸出儲存貯體來儲存建置輸出。如果您是在 S3 輸入儲存貯體中存放原始程式碼,則輸出儲存貯體必須與輸入儲存貯體位於相同的 AWS 區域中。

  2. 開啟AWS CodeBuild主控台https://console.aws.amazon.com/codesuite/codebuild/home

    使用AWS區域選擇器來選擇AWS區域 CodeBuild 系統支援 。這必須與儲存 S3 輸出儲存貯體的所在區域相同。

  3. 建立組建專案並執行組建。如需更多詳細資訊,請參閱 建立組建專案 (主控台)執行建置 (主控台)。除了下列設定外,保留所有設定的預設值。

    • 針對 Environment (環境)

      • 針對 Environment image (環境映像),選擇 Managed image (受管映像)

      • 針對 Operating system (作業系統),請選擇 Amazon Linux 2

      • 針對 Runtime(s) (執行時間),選擇 Standard (標準)

      • 適用於Image (影像),選擇aws/codebuild/amazonlinux2-x86_64-標準:3.0

    • 針對 Artifacts (成品)

      • 處理 Type (類型) 時,選擇 Amazon S3

      • 針對 Bucket Name (儲存貯體名稱),輸入 S3 儲存貯體的名稱。

      • 針對 Name (名稱),輸入容易記住的組建輸出檔案名稱。包含 .zip 副檔名。

      • 針對 Artifacts packaging (成品封裝),選擇 Zip

步驟 a3:建立應用程式和環境,然後部署

在此步驟中,您將使用 AWS Elastic Beanstalk 主控台建立應用程式和環境。在建立環境的過程中,您會將先前步驟中的組建輸出部署至環境。

  1. 開啟AWS Elastic Beanstalk主控台https://console.aws.amazon.com/elasticbeanstalk

    使用AWS區域選擇器來選擇AWS存放 S3 輸出儲存貯體的區域。

  2. 建立 Elastic Beanstalk 應用程式。如需詳細資訊,請參閱「」管理和配置AWS Elastic Beanstalk應用中的AWS Elastic Beanstalk開發人員指南

  3. 為此應用程式建立 Elastic Beanstalk 環境。如需詳細資訊,請參閱「」建立新的環境精靈中的AWS Elastic Beanstalk開發人員指南。除了下列設定外,保留所有設定的預設值。

    • 針對 Platform (平台),選擇 Tomcat

    • 針對 Application code (應用程式程式碼),選擇 Upload your code (上傳您的程式碼),然後選擇 Upload (上傳)。針對 Source code origin (原始碼來源),選擇 Public S3 URL (公有 S3 URL),然後輸入在輸出儲存貯體中組建輸出 ZIP 檔案的完整 URL。選擇 Upload (上傳)。

  4. 在 Elastic Beanstalk 將組建輸出部署至環境後,您便可以在 Web 瀏覽器中查看結果。前往執行個體的環境 URL (例如 http://my-environment-name.random-string.region-ID.elasticbeanstalk.com)。Web 瀏覽器應會顯示文字 Hello World!

方案 B:使用 CodePipeline 若要運行 CodeBuild 並部署至 Elastic Beanstalk

在此案例中,您將完成步驟來準備和上傳原始碼。建立建置專案 CodeBuild 和 Elastic Beanstalk 應用程式和環境AWS Elastic Beanstalk主控台。然後,您會使用 AWS CodePipeline 主控台來建立管道。在您建立管道後, CodePipeline 會建置原始碼,並將組建輸出部署至環境。

步驟 b1:將 Buildspec 檔案新增至源代碼

在此步驟中,您將建立 Buildspec 檔案,並將其新增至您在 建立原始程式碼 中建立的程式碼。然後,您會將原始程式碼上傳至 S3 輸入儲存貯體或 CodeCommit、GitHub 或 Bitbucket 儲存庫。

  1. 使用下列內容建立名為 buildspec.yml 的檔案。將檔案存放於 ROOT 目錄中。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/*
  2. 您的檔案結構現在看起來應如下。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
  3. 上傳ROOT目錄連接至 S3 輸入儲存貯體或程式 CodeCommit、GitHub 或 Bitbucket 儲存庫。

    重要

    不上傳ROOT,僅顯示ROOT

    如果您使用的是 S3 輸入儲存貯體,則必須進行版本控制。請務必建立包含目錄結構和檔案的 ZIP 檔案,然後將其上傳至輸入儲存貯體。請勿將 ROOT 新增至 ZIP 檔案,僅新增 ROOT 中的目錄和檔案即可。如需詳細資訊,請參閱「」如何設定儲存貯體的版本控制中的Amazon S3 開發人員指南

步驟 b2:建立組建專案

在此步驟中,您會建立 AWS CodeBuild 建置專案來搭配管道一起使用。

  1. 開啟AWS CodeBuild主控台https://console.aws.amazon.com/codesuite/codebuild/home

  2. 建立建置專案。如需更多詳細資訊,請參閱 建立組建專案 (主控台)執行建置 (主控台)。除了下列設定外,保留所有設定的預設值。

    • 針對 Environment (環境)

      • 針對 Environment image (環境映像),選擇 Managed image (受管映像)

      • 針對 Operating system (作業系統),請選擇 Amazon Linux 2

      • 針對 Runtime(s) (執行時間),選擇 Standard (標準)

      • 適用於Image (影像),選擇aws/codebuild/amazonlinux2-x86_64-標準:3.0

    • 針對 Artifacts (成品)

      • 處理 Type (類型) 時,選擇 Amazon S3

      • 針對 Bucket Name (儲存貯體名稱),輸入 S3 儲存貯體的名稱。

      • 針對 Name (名稱),輸入容易記住的組建輸出檔案名稱。包含 .zip 副檔名。

      • 針對 Artifacts packaging (成品封裝),選擇 Zip

步驟 b3:建立 Elastic Beanstalk 應用程式和環境

在此步驟中,您會建立 Elastic Beanstalk 應用程式和環境,以搭配 CodePipeline 一起使用。

  1. 打開 Elastic Beanstalk 主控台,請於https://console.aws.amazon.com/elasticbeanstalk/

  2. 使用 AWS Elastic Beanstalk 主控台來建立應用程式。如需詳細資訊,請參閱「」管理和配置AWS Elastic Beanstalk應用中的AWS Elastic Beanstalk開發人員指南

  3. 使用 AWS Elastic Beanstalk 主控台來建立環境。如需詳細資訊,請參閱「」建立新的環境精靈中的AWS Elastic Beanstalk開發人員指南。除了 Platform (平台) 外,保留所有設定的預設值。針對 Platform (平台),選擇 Tomcat

步驟 b4:建立管道並部署

在此步驟中,您將使用 AWS CodePipeline 主控台來建立管道。創建並運行管道後, CodePipeline 使用 CodeBuild 建立原始程式碼。 CodePipeline 然後,會使用 Elastic Beanstalk 將組建輸出部署至環境。

  1. 建立或識別 CodeIPeline、CodeBuild 和 Elastic Beanstalk 可以代您存取資源的服務角色。如需詳細資訊,請參閱 先決條件

  2. 開啟 CodePipeline 主控台https://console.aws.amazon.com/codesuite/codepipeline/home

    使用AWS區域選擇器來選擇AWS區域 CodeBuild 系統支援 。如果您是在 S3 輸入儲存貯體中存放原始程式碼,則輸出儲存貯體必須與輸入儲存貯體位於相同的 AWS 區域中。

  3. 建立管道。如需相關資訊,請參閱 建立使用代碼建置的管道 (CodePipeline 主控台)。除了下列設定外,保留所有設定的預設值。

    • Add build stage (新增組建階段),針對 Build provider (組建提供者) 選擇 AWS CodeBuild。針對 Project name (專案名稱),選擇您剛建立的組建專案。

    • Add deploy stage (新增部署階段) 上,針對 Deploy provider (部署提供者),選擇 AWS Elastic Beanstalk

      • 適用於Application name (應用程式名稱)中,選擇您剛建立的 Elastic Beanstalk 應用程式。

      • 針對 Environment name (環境名稱),選擇您剛建立的環境。

  4. 在管道成功執行之後,您可以在 Web 瀏覽器中查看結果。前往執行個體的環境 URL (例如 http://my-environment-name.random-string.region-ID.elasticbeanstalk.com)。Web 瀏覽器應會顯示文字 Hello World!

現在,每當您變更原始碼並將這些變更上傳至原始 S3 輸入儲存貯體或 CodeCommit、GitHub 或 Bitbucket 儲存庫時, CodePipeline 會檢測更改並再次運行管道。這會導致 CodeBuild 來重建程式碼,然後讓 Elastic Beanstalk 將重建的輸出部署至環境。

方案 C:使用 Elastic Beanstalk CLI 運行AWS CodeBuild並部署至 Elastic Beanstalk 環境

在此案例中,您將完成步驟來準備和上傳原始碼。然後,您可以運行 Elastic Beanstalk CLI 來創建 Elastic Beanstalk 應用程序和環境,使用 CodeBuild 以建置原始碼,然後將組建輸出部署至環境。如需詳細資訊,請參閱「」使用 EB CLI 搭配 CodeBuild中的AWS Elastic Beanstalk開發人員指南

步驟 c1:將檔案新增至原始程式碼

在此步驟中,您會將 Elastic Beanstalk 配置檔案和 Buildspec 檔案新增至您在建立原始程式碼。您也將建立或識別 Buildspec 檔案的服務角色。

  1. 建立或識別 Elastic Beanstalk 和 CLI 可以代您使用的服務角色。如需相關資訊,請參閱 建立 CodeBuild 服務角色

  2. 使用下列內容建立名為 buildspec.yml 的檔案。將檔案存放於 ROOT 目錄中。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/* eb_codebuild_settings: CodeBuildServiceRole: my-service-role-name ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:4.0 Timeout: 60

    在前述程式碼中,以您稍早建立或識別的服務角色名稱取代 my-service-role-name

  3. 您的檔案結構現在看起來應如下。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml

步驟 c2:安裝並運行 EB CLI

  1. 在您建立來源碼的相同電腦或執行個體上安裝並設定 EB CLI (如尚未執行此作業)。如需相關資訊,請參閱「」。安裝 Elastic Beanstalk 命令列界面 (EB CLI)設定 EB CLI中的AWS Elastic Beanstalk開發人員指南

  2. 從命令列或終端機,執行 cd 或類似的命令以切換至您的 (root directory name)/ROOT 目錄。執行 eb init 命令來設定 EB CLI。

    eb init

    出現提示時:

    • 選擇AWS區域AWS CodeBuild,以及您想要建立 Elastic Beanstalk 應用程式和環境的位置。

    • 建立 Elastic Beanstalk 應用程式,並輸入應用程式的名稱。

    • 選擇 Tomcat 平台。

    • 選擇 Tomcat 8 Java 8 版本。

    • 選擇您是否希望使用 SSH 來設定對您環境中執行個體的存取。

  3. 從相同的目錄中,執行eb create命令來建立 Elastic Beanstalk 環境。

    eb create

    出現提示時:

    • 輸入環境的名稱,或接受建議的名稱。

    • 輸入環境的 DNS CNAME 字首,或接受建議的值。

    • 在此範例中,接受 Classic Load Balancer 類型。

  4. 在您執行 eb create 命令後,EB CLI 會執行下列動作:

    1. 從原始程式碼建立 ZIP 檔案,然後將該 ZIP 檔案上傳至您帳戶中的 S3 儲存貯體。

    2. 建立 Elastic Beanstalk 應用程式和應用程式版本。

    3. 創建 CodeBuild 專案。

    4. 根據新專案執行建置。

    5. 組建完成後刪除專案。

    6. 建立 Elastic Beanstalk 環境。

    7. 將組建輸出部署至環境。

  5. 在 EB CLI 將組建輸出部署至環境後,您便可以在 Web 瀏覽器中查看結果。前往執行個體的環境 URL (例如 http://my-environment-name.random-string.region-ID.elasticbeanstalk.com)。Web 瀏覽器應會顯示文字 Hello World!

如果您希望,也可以變更來源碼,然後從相同的目錄執行 eb deploy 命令。EB CLI 會執行與 eb create 命令相同的步驟,但會將組建輸出部署至現有的環境,而不是建立新的環境。

相關資源