選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

Elastic Beanstalk 自訂平台 (已淘汰)

焦點模式
Elastic Beanstalk 自訂平台 (已淘汰) - AWS Elastic Beanstalk

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

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

注意

2022 年 7 月 18 日,Elastic Beanstalk 已將所有以 Amazon Linux AMI (AL1) 為基礎的平台分支狀態設為已淘汰這包括自訂平台。Elastic Beanstalk 不支援自訂平台。如需 Amazon Linux AMI 的 Elastic Beanstalk 淘汰的詳細資訊,請參閱 平台淘汰常見問答集

本主題仍保留在本文件中,供任何在 Elastic Beanstalk 自訂平台功能淘汰前使用該功能的客戶做參考。過去,Elastic Beanstalk 自訂平台支援從 Amazon Linux AMI、RHEL 7、RHEL 6 或 Ubuntu 16.04 基本 AMI 建置 AMI。Elastic Beanstalk 不再支援這些作業系統。若要閱讀更多關於不再支援的自訂平台功能的資訊,請展開以下主題。

相較於自訂映像,自訂平台在多方面都是較為進階的自訂方式。自訂平台可讓您從頭開發完整的全新平台,您可自訂 Elastic Beanstalk 於平台執行個體上執行的作業系統、其他軟體和指令碼。若 Elastic Beanstalk 未針對使用的語言或基礎設施軟體的應用程式提供受管平台,此等靈活性可讓您自行建置一個。自訂映像可讓您修改 Amazon Machine Image (AMI) 供現有 Elastic Beanstalk 平台使用,相較於此,Elastic Beanstalk 仍會提供平台指令碼並控制平台的軟體堆疊。此外,透過自訂平台,您可以自動化、指令碼的方式建立您的自訂過程並加以維護,若是透過自訂映像,運作中執行個體的變更必須手動進行。

若要建立自訂平台,您要從支援的作業系統之一:Ubuntu、RHEL 或 Amazon Linux (確切版本編號請參閱 Platform.yaml 檔案格式flavor 項目) 建置 AMI,並進一步新增自訂項目。您可以使用 Packer 來建立自己的 Elastic Beanstalk 平台,Packer 是一種開放原始碼工具,可針對許多平台建立機器映像,包括與 Amazon Elastic Compute Cloud (Amazon EC2) 搭配使用的 AMI。Elastic Beanstalk 平台包括設定為執行一組支援應用程式之軟體的 AMI,以及可納入自訂組態選項和預設組態選項設定的中繼資料。

Elastic Beanstalk 會將 Packer 做為個別的內建平台進行管理,您無須擔心 Packer 組態及版本。

您須向 Elastic Beanstalk 提供 Packer 範本,藉此建立平台,同時建立範本為建置 AMI 所呼叫的指令碼和檔案。這些元件會與指定範本與中繼資料的平台定義檔案,一同封裝為名為平台定義封存的 ZIP 封存。

建立自訂平台時,不需要執行 Packer 的彈性 IP,即可啟動單一執行個體環境。Packer 隨後會啟動另一個執行個體來建置映像。您可重複使用此環境供多個平台或各個平台的多種版本使用。

注意

自訂平台是 AWS 區域特定的。若您在多個區域使用 Elastic Beanstalk,務必在每個區域各自建立您的平台。

在某些情況下,不會清除 Packer 啟動的執行個體,必須手動將其終止。若要了解如何手動清除這些執行個體,請參閱Packer 執行個體清除

您帳戶內的使用者可於環境建立期間指定平台 ARN,藉此使用您的自訂平台。您用於建立自訂平台的 eb platform create 命令,會回傳這些 ARN。

每次建置自訂平台時,Elastic Beanstalk 會建立新的平台版本。使用者可指定平台名稱,取得平台的最新版本,或納入版本編號以取得該版本。

例如,欲透過 ARN MyCustomPlatformARN (可能為版本 3.0) 部署自訂平台的最新版本,您的 EB CLI 命令列將如下所示:

eb create -p MyCustomPlatformARN

欲部署版本 2.1,EB CLI 命令列將如下所示:

eb create -p MyCustomPlatformARN --version 2.1

您可以在建立和編輯現有自訂平台版本的標籤時,將標籤套用至自訂平台版本。如需詳細資訊,請參閱 標記自訂平台版本

建立自訂平台

欲建立自訂平台,您的應用程式根目錄必須納入平台定義檔案 platform.yaml,此會定義用於建立自訂平台的建置器類型。此檔案的格式如 Platform.yaml 檔案格式 中所述。您可從頭建立您的自訂平台,或使用其中一個範例自訂平台著手。

使用範例自訂平台

著手建立自訂平台的另一個方法是,使用其中一個平台定義封存範例來啟動載入您的自訂平台。在使用此範例之前,您必須設定的項目為來源 AMI 與區域。

注意

請不要於生產中使用未修改的範例自訂平台。範例是為了說明自訂平台可用的部分功能,但尚未經過強化供生產使用。

NodePlatform_Ubuntu.zip

此自訂平台以 Ubuntu 16.04 為基礎,並支援 Node.js 4.4.4。我們於本章節中使用此自訂平台做為範例。

NodePlatform_RHEL.zip

此自訂平台以 RHEL 7.2 為基礎,並支援 Node.js 4.4.4

NodePlatform_AmazonLinux.zip

此自訂平台以 Amazon Linux 2016.09.1 為基礎,並支援 Node.js 4.4.4

TomcatPlatform_Ubuntu.zip

此自訂平台以 Ubuntu 16.04 為基礎,並支援 Tomcat 7/Java 8

CustomPlatform_NodeSampleApp.zip

使用 expressejs 來顯示靜態網頁的 Node.js 範例。

CustomPlatform_TomcatSampleApp.zip

部署時會顯示靜態網頁的 Tomcat 範例。

下載範例平台定義封存:NodePlatform_Ubuntu.zip。此檔案內含平台定義檔案、Packer 範本、Packer 於映像建立期間執行的指令碼,以及 Packer 於平台建立期間將複製至建置器執行個體的指令碼和組態檔案。

範例 NodePlatform_Ubuntu.zip
|-- builder Contains files used by Packer to create the custom platform |-- custom_platform.json Packer template |-- platform.yaml Platform definition file |-- ReadMe.txt Briefly describes the sample

平台定義檔案 platform.yaml 會讓 Elastic Beanstalk 知道 Packer 範本 custom_platform.json 的名稱。

version: "1.0" provisioner: type: packer template: custom_platform.json flavor: ubuntu1604

Packer 範本會使用 Ubuntu AMI 做為 HVM 執行個體類型的平台映像基礎,讓 Packer 知道如何建置平台的 AMI。provisioners 區段則通知 Packer 將封存檔內 builder 資料夾的所有檔案,複製至執行個體,並於執行個體上執行 builder.sh 指令碼。指令碼完成時,Packer 會從已修改的執行個體建立映像。

Elastic Beanstalk 會建立三個可用於在 Packer 標籤 AMI 的環境變數:

AWS_EB_PLATFORM_ARN

自訂平台的 ARN。

AWS_EB_PLATFORM_NAME

自訂平台的名稱。

AWS_EB_PLATFORM_VERSION

自訂平台的版本。

範例 custom_platform.json 檔案使用這些變數來定義下列用於指令碼的值:

  • platform_name,由 platform.yaml 設定

  • platform_version,由 platform.yaml 設定

  • platform_arn,由範例 builder.sh 檔案結尾顯示的主要建置指令碼 custom_platform.json 所設定

custom_platform.json 檔案包含兩個您必須提供屬性的值:source_amiregion。如需選擇正確 AMI 和區域值的詳細資訊,請參閱 eb-custom-platforms-samples GitHub 儲存庫中的更新 Packer 範本

範例 custom_platform.json
{ "variables": { "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}", "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}", "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}" }, "builders": [ { ... "region": "", "source_ami": "", ... } ], "provisioners": [ {...}, { "type": "shell", "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}", "scripts": [ "builder/builder.sh" ] } ] }

您納入平台定義封存的指令碼和其他檔案,視您欲在執行個體上進行的修改有極大差異。範例平台包含下列指令碼:

  • 00-sync-apt.sh – 已標示為註解:apt -y update。我們將此命令變更為註解,因為其會要求使用者輸入訊息,中斷自動化套件更新。這可能是 Ubuntu 的問題。然而,最佳作法仍建議執行 apt -y update。因此,我們的範例指令碼留下此命令做為參考。

  • 01-install-nginx.sh – 安裝 nginx。

  • 02-setup-platform.sh – 安裝 wgettreegit。將掛勾和記錄組態複製至執行個體,並建立下列目錄:

    • /etc/SampleNodePlatform – 部署期間容器組態檔案的上傳位置。

    • /opt/elasticbeanstalk/deploy/appsource/ – 部署期間 00-unzip.sh 指令碼上傳應用程式原始碼的位置 (如需此指令碼的資訊,請參閱適用於 Elastic Beanstalk 環境的平台指令碼工具章節)。

    • /var/app/staging/ – 部署期間處理應用程式原始碼的位置。

    • /var/app/current/ – 應用程式原始碼處理後執行的位置。

    • /var/log/nginx/healthd/增強型運作狀態代理程式寫入日誌的位置。

    • /var/nodejs – 部署期間 Node.js 檔案上傳的位置。

使用 EB CLI,透過範例平台定義封存來建立您的第一個自訂平台。

欲建立自訂平台
  1. 安裝 EB CLI

  2. 建立您將擷取範例自訂平台的目錄。

    ~$ mkdir ~/custom-platform
  3. 擷取 NodePlatform_Ubuntu.zip 到目錄,然後變更到解壓縮目錄。

    ~$ cd ~/custom-platform ~/custom-platform$ unzip ~/NodePlatform_Ubuntu.zip ~/custom-platform$ cd NodePlatform_Ubuntu
  4. 編輯 custom_platform.json 檔案,並且為 source_amiregion 屬性提供值。如需詳細資訊,請參閱更新 Packer 範本

  5. 執行 eb platform init 並依提示初始化平台儲存庫。

    您可將 eb platform 縮短為 ebp

    注意

    Windows PowerShell 使用 ebp 做為命令別名。若您於 Windows PowerShell 執行 EB CLI,請使用此命令的長格式:eb platform

    ~/custom-platform$ eb platform init

    此命令亦於目前目錄內建立目錄 .elasticbeanstalk,並將組態檔案 config.yml 新增至該目錄。請勿變更或刪除此檔案,因為 Elastic Beanstalk 建立自訂平台時需要此檔案。

    eb platform init 預設會使用目前資料夾的名稱做為自訂平台的名稱,在此範例中為 custom-platform

  6. 執行 eb platform create 來啟動 Packer 環境,並取得自訂平台的 ARN。您稍後在此自訂平台建立環境時,將需要此值。

    ~/custom-platform$ eb platform create ...

    依預設,Elastic Beanstalk 會建立自訂平台的執行個體描述檔 aws-elasticbeanstalk-custom-platform-ec2-role。若您想要使用現有的執行個體描述檔,請將選項 -ip INSTANCE_PROFILE 新增至 eb platform create 命令。

    注意

    如果您使用 Elastic Beanstalk 預設執行個體描述檔 aws-elasticbeanstalk-ec2-role,Packer 將無法建立自訂平台。

    EB CLI 會顯示 Packer 環境的事件輸出,直至建立完成。您可按 Ctrl+C 退出事件檢視。

  7. 您可使用 eb platform logs 命令來檢查日誌是否有錯誤。

    ~/custom-platform$ eb platform logs ...
  8. 您稍後可透過 eb platform events 來檢查程序。

    ~/custom-platform$ eb platform events ...
  9. 透過 eb platform status 來檢查您平台的狀態。

    ~/custom-platform$ eb platform status ...

操作完成時,您將具備可用於啟動 Elastic Beanstalk 環境的平台。

透過主控台建立環境時,可使用自訂平台。請參閱 建立新的環境精靈

欲在您的自訂平台上啟動環境
  1. 為您的應用程式建立目錄。

    ~$ mkdir custom-platform-app ~$ cd ~/custom-platform-app
  2. 初始化應用程式儲存庫。

    ~/custom-platform-app$ eb init ...
  3. 下載範例應用程式 NodeSampleApp.zip

  4. 擷取範例應用程式。

    ~/custom-platform-app$ unzip ~/NodeSampleApp.zip
  5. 執行 eb create -p CUSTOM-PLATFORM-ARN 來啟動執行您自訂平台的環境,其中 CUSTOM-PLATFORM-ARNeb platform create 命令回傳的 ARN。

    ~/custom-platform-app$ eb create -p CUSTOM-PLATFORM-ARN ...

平台定義存檔內容

平台定義封存為相當於應用程式原始碼套件的平台。平台定義封存為 ZIP 檔案,其中包含平台定義檔案、Packer 範本及 Packer 範本用來建立您平台的指令碼和檔案。

注意

當您使用 EB CLI 來建立自訂平台,EB CLI 會自平台儲存庫的檔案和資料夾建立平台定義封存,因此您無須手動建立封存。

平台定義檔案是 YAML 格式的檔案,必須命名為 platform.yaml,並位於平台定義封存的根目錄中。如需平台定義檔案支援的必要和選用金鑰清單,請參閱建立自訂平台

您無須以特定方式來命名 Packer 範本,但該檔案名稱必須與平台定義檔案中指定的佈建範本相符。如需建立 Packer 範本的說明,請參閱官方 Packer 文件

平台定義封存中的其他檔案為範本在建立 AMI 前用來自訂執行個體的指令碼和檔案。

自訂平台掛勾

Elastic Beanstalk 使用標準化目錄結構在自訂平台上進行掛接。這些是生命週期事件期間及回應管理操作所執行的指令碼,如您環境中的執行個體啟動時,或使用者啟動部署或使用重新啟動應用程式伺服器功能時。

您需要將指令碼掛接在 /opt/elasticbeanstalk/hooks/ 資料夾的其中一個子資料夾。

警告

不支援在受管平台上使用自訂平台掛勾。自訂平台掛勾是專為自訂平台所設計。在 Elastic Beanstalk 受管平台上,它們的運作方式可能不同或有些問題,跨平台的行為可能有所不同。在 Amazon Linux AMI 平台 (前身是 Amazon Linux 2) 上,在某些情況下,它們可能仍然以有用的方式運作,請謹慎使用。

自訂平台掛鉤是存在於 Amazon Linux AMI 平台上的舊版功能。在 Amazon Linux 2 平台,/opt/elasticbeanstalk/hooks/ 資料夾中的自訂平台掛勾會完全停止使用。Elastic Beanstalk 不會讀取或執行這些掛勾。Amazon Linux 2 平台支援一種新的平台掛勾,專門設計用於擴展 Elastic Beanstalk 受管平台。您可以將自訂指令碼和程式直接新增到應用程式原始碼套件中的掛勾目錄。Elastic Beanstalk 會在各個執行個體佈建階段期間執行這些項目。如需詳細資訊,請展開擴充 Elastic Beanstalk Linux 平台中的平台掛勾一節。

掛勾會整理成下列資料夾:

  • appdeploy – 應用程式部署期間執行的指令碼。當新的執行個體啟動時,或用戶端啟動新版本的部署時,Elastic Beanstalk 會執行應用程式部署。

  • configdeploy – 用戶端在執行會影響執行個體上軟體組態的組態更新時,所執行的指令碼,例如,設定環境屬性或啟用日誌輪換至 Amazon S3。

  • restartappserver – 用戶端執行重新啟動應用程式伺服器操作所執行的指令碼。

  • preinit – 執行個體啟動載入作業期間所執行的指令碼。

  • postinit – 執行個體啟動載入作業之後所執行的指令碼。

appdeployconfigdeployrestartappserver 資料夾包含 preenactpost 子資料夾。在操作的各個階段,會以字母順序執行 pre 資料夾內的所有指令碼,之後則依序為 enact 資料夾和 post 資料夾中的指令碼。

執行個體啟動時,Elastic Beanstalk 會依序執行 preinitappdeploypostinit。後續在運作中執行個體上進行部署時,Elastic Beanstalk 會執行 appdeploy 掛勾。當使用者更新執行個體軟體組態設定時,會執行 configdeploy 掛勾。使用者啟動應用程式伺服器重新啟動,僅在此時才會執行 restartappserver 掛勾。

當您的指令碼出現錯誤,能夠以非零狀態退出並寫入 stderr,來讓操作失敗。寫入 stderr 的訊息會出現在操作失敗所輸出的事件。Elastic Beanstalk 也會在日誌檔案 /var/log/eb-activity.log 中擷取此資訊。若您不希望操作失敗,請回傳 0 (零)。寫入 stderrstdout 的訊息會顯示於部署日誌,但不會顯示於事件串流,除非操作失敗。

Packer 執行個體清除

部分情況下 (例如在 Packer 建置器程序完成前將其刪除),Packer 啟動的執行個體不會被清除。這些執行個體不屬於 Elastic Beanstalk 環境,僅能使用 Amazon EC2 服務來檢視並終止。

欲手動清除這些執行個體
  1. 開啟 Amazon EC2 主控台

  2. 請確定您位於使用 Packer 建立執行個體的相同 AWS 區域。

  3. Resources (資源) 下選擇 N Running Instances (N 個運作中的執行個體),其中 N 表示運作中執行個體的數目。

  4. 按一下查詢文字方塊。

  5. 選取 Name (名稱) 標記。

  6. 輸入 packer

    查詢應類似:tag:Name: packer

  7. 選取符合查詢的執行個體。

  8. Instance State (執行個體狀態)running (運作中),請依序選擇 Actions (動作)Instance State (執行個體狀態)Stop (停止),然後再選取 Actions (動作)Instance State (執行個體狀態)Terminate (終止)

Platform.yaml 檔案格式

platform.yaml 檔案的格式如下。

version: "version-number" provisioner: type: provisioner-type template: provisioner-template flavor: provisioner-flavor metadata: maintainer: metadata-maintainer description: metadata-description operating_system_name: metadata-operating_system_name operating_system_version: metadata-operating_system_version programming_language_name: metadata-programming_language_name programming_language_version: metadata-programming_language_version framework_name: metadata-framework_name framework_version: metadata-framework_version option_definitions: - namespace: option-def-namespace option_name: option-def-option_name description: option-def-description default_value: option-def-default_value option_settings: - namespace: "option-setting-namespace" option_name: "option-setting-option_name" value: "option-setting-value"

以這些值取代預留位置:

version-number

必要。YAML 定義的版本。必須為 1.0

provisioner-type

必要。用於建立自訂平台的建置器類型。必須為 packer

provisioner-template

必要。內含 provisioner-type 設定的 JSON 檔案。

provisioner-flavor

選用。供 AMI 使用的基礎作業系統。下列其中一項:

amazon (預設)

Amazon Linux。若未指定,則是平台建立時的 Amazon Linux 最新版本。

Amazon Linux 2 不是支援的作業系統類別。

ubuntu1604

Ubuntu 16.04 LTS

rhel7

RHEL 7

rhel6

RHEL 6

metadata-maintainer

選用。平台擁有人的聯絡資訊 (100 個字元)。

metadata-description

選用。平台的描述 (2000 個字元)。

metadata-operating_system_name

選用。平台作業系統的名稱 (50 個字元)。篩選 ListPlatformVersions API 的輸出時,此值為可用。

metadata-operating_system_version

選用。平台作業系統的版本 (20 個字元)。

metadata-programming_language_name

選用。平台支援的程式設計語言 (50 個字元)。

metadata-programming_language_version

選用。平台語言的版本 (20 個字元)。

metadata-framework_name

選用。平台使用之 Web 架構的名稱 (50 個字元)。

metadata-framework_version

選用。平台 Web 架構的版本 (20 個字元)。

option-def-namespace

選用。aws:elasticbeanstalk:container:custom 底下的命名空間 (100 個字元)。

option-def-option_name

選用。選項的名稱 (100 個字元)。您至多可定義 50 個由平台向使用者提供的自訂組態選項。

option-def-description

選用。選項的描述 (1024 個字元)。

option-def-default_value

選用。使用者未指定時應使用的預設值。

下列範例會建立選項 NPM_START

options_definitions: - namespace: "aws:elasticbeanstalk:container:custom:application" option_name: "NPM_START" description: "Default application startup command" default_value: "node application.js"
option-setting-namespace

選用。選項的命名空間。

option-setting-option_name

選用。選項的名稱。您可以指定最多 50 個 Elastic Beanstalk 提供的選項

option-setting-value

選用。使用者未指定時應使用的值。

下列範例會建立選項 TEST

option_settings: - namespace: "aws:elasticbeanstalk:application:environment" option_name: "TEST" value: "This is a test"

標記自訂平台版本

您可以將標籤套用至 AWS Elastic Beanstalk 自訂平台版本。標籤是與 AWS 資源相關聯的鍵/值對。如需 Elastic Beanstalk 資源標記、使用案例、標籤索引鍵和值限制條件的相關資訊,以及支援的資源類型,請參閱標記 Elastic Beanstalk 應用程式資源

您可以在建立自訂平台版本時指定標籤。您可以在現有的自訂平台版本中新增或移除標籤,以及更新現有標籤的值。您最多可以為每個自訂平台版本新增 50 個標籤。

在自訂平台版本建立期間新增標籤

若您使用 EB CLI 來建立自訂平台版本,請使用帶有 eb platform create--tags 選項來新增標籤。

~/workspace/my-app$ eb platform create --tags mytag1=value1,mytag2=value2

使用 AWS CLI 或其他 API 型用戶端,在 create-platform-version 命令上使用 --tags 參數來新增標籤。

$ aws elasticbeanstalk create-platform-version \ --tags Key=mytag1,Value=value1 Key=mytag2,Value=value2 \ --platform-name my-platform --platform-version 1.0.0 --platform-definition-bundle S3Bucket=amzn-s3-demo-bucket,S3Key=sample.zip

管理現有自訂平台版本的標籤

您可以新增、更新和刪除現有 Elastic Beanstalk 自訂平台版本中的標籤。

如果您使用 EB CLI 來更新自訂平台版本,請使用 eb tags 新增、更新、刪除或列出標籤。

例如,以下命令會列出自訂平台版本中的標籤。

~/workspace/my-app$ eb tags --list --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

下列命令會更新標籤 mytag1 並刪除標籤 mytag2

~/workspace/my-app$ eb tags --update mytag1=newvalue --delete mytag2 \ --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

如需完整選項清單和更多範例,請參閱 eb tags

使用 AWS CLI 或其他 API 型用戶端時,請使用 list-tags-for-resource命令來列出自訂平台版本的標籤。

$ aws elasticbeanstalk list-tags-for-resource --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

使用 update-tags-for-resource 命令新增、更新或刪除自訂平台版本中的標籤。

$ aws elasticbeanstalk update-tags-for-resource \ --tags-to-add Key=mytag1,Value=newvalue --tags-to-remove mytag2 \ --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

--tags-to-addupdate-tags-for-resource 參數中,同時指定欲新增和欲更新的標籤。如此將新增不存在的標籤,並更新現有標籤的值。

注意

若要搭配 Elastic Beanstalk 自訂平台版本使用某些 EB CLI 和 AWS CLI 命令,您需要自訂平台版本的 ARN。您可使用下列命令來擷取 ARN。

$ aws elasticbeanstalk list-platform-versions

使用 --filters 選項來篩選輸出以縮減到您的自訂平台名稱。

相較於自訂映像,自訂平台在多方面都是較為進階的自訂方式。自訂平台可讓您從頭開發完整的全新平台,您可自訂 Elastic Beanstalk 於平台執行個體上執行的作業系統、其他軟體和指令碼。若 Elastic Beanstalk 未針對使用的語言或基礎設施軟體的應用程式提供受管平台,此等靈活性可讓您自行建置一個。自訂映像可讓您修改 Amazon Machine Image (AMI) 供現有 Elastic Beanstalk 平台使用,相較於此,Elastic Beanstalk 仍會提供平台指令碼並控制平台的軟體堆疊。此外,透過自訂平台,您可以自動化、指令碼的方式建立您的自訂過程並加以維護,若是透過自訂映像,運作中執行個體的變更必須手動進行。

若要建立自訂平台,您要從支援的作業系統之一:Ubuntu、RHEL 或 Amazon Linux (確切版本編號請參閱 Platform.yaml 檔案格式flavor 項目) 建置 AMI,並進一步新增自訂項目。您可以使用 Packer 來建立自己的 Elastic Beanstalk 平台,Packer 是一種開放原始碼工具,可針對許多平台建立機器映像,包括與 Amazon Elastic Compute Cloud (Amazon EC2) 搭配使用的 AMI。Elastic Beanstalk 平台包括設定為執行一組支援應用程式之軟體的 AMI,以及可納入自訂組態選項和預設組態選項設定的中繼資料。

Elastic Beanstalk 會將 Packer 做為個別的內建平台進行管理,您無須擔心 Packer 組態及版本。

您須向 Elastic Beanstalk 提供 Packer 範本,藉此建立平台,同時建立範本為建置 AMI 所呼叫的指令碼和檔案。這些元件會與指定範本與中繼資料的平台定義檔案,一同封裝為名為平台定義封存的 ZIP 封存。

建立自訂平台時,不需要執行 Packer 的彈性 IP,即可啟動單一執行個體環境。Packer 隨後會啟動另一個執行個體來建置映像。您可重複使用此環境供多個平台或各個平台的多種版本使用。

注意

自訂平台是 AWS 區域特定的。若您在多個區域使用 Elastic Beanstalk,務必在每個區域各自建立您的平台。

在某些情況下,不會清除 Packer 啟動的執行個體,必須手動將其終止。若要了解如何手動清除這些執行個體,請參閱Packer 執行個體清除

您帳戶內的使用者可於環境建立期間指定平台 ARN,藉此使用您的自訂平台。您用於建立自訂平台的 eb platform create 命令,會回傳這些 ARN。

每次建置自訂平台時,Elastic Beanstalk 會建立新的平台版本。使用者可指定平台名稱,取得平台的最新版本,或納入版本編號以取得該版本。

例如,欲透過 ARN MyCustomPlatformARN (可能為版本 3.0) 部署自訂平台的最新版本,您的 EB CLI 命令列將如下所示:

eb create -p MyCustomPlatformARN

欲部署版本 2.1,EB CLI 命令列將如下所示:

eb create -p MyCustomPlatformARN --version 2.1

您可以在建立和編輯現有自訂平台版本的標籤時,將標籤套用至自訂平台版本。如需詳細資訊,請參閱 標記自訂平台版本

建立自訂平台

欲建立自訂平台,您的應用程式根目錄必須納入平台定義檔案 platform.yaml,此會定義用於建立自訂平台的建置器類型。此檔案的格式如 Platform.yaml 檔案格式 中所述。您可從頭建立您的自訂平台,或使用其中一個範例自訂平台著手。

使用範例自訂平台

著手建立自訂平台的另一個方法是,使用其中一個平台定義封存範例來啟動載入您的自訂平台。在使用此範例之前,您必須設定的項目為來源 AMI 與區域。

注意

請不要於生產中使用未修改的範例自訂平台。範例是為了說明自訂平台可用的部分功能,但尚未經過強化供生產使用。

NodePlatform_Ubuntu.zip

此自訂平台以 Ubuntu 16.04 為基礎,並支援 Node.js 4.4.4。我們於本章節中使用此自訂平台做為範例。

NodePlatform_RHEL.zip

此自訂平台以 RHEL 7.2 為基礎,並支援 Node.js 4.4.4

NodePlatform_AmazonLinux.zip

此自訂平台以 Amazon Linux 2016.09.1 為基礎,並支援 Node.js 4.4.4

TomcatPlatform_Ubuntu.zip

此自訂平台以 Ubuntu 16.04 為基礎,並支援 Tomcat 7/Java 8

CustomPlatform_NodeSampleApp.zip

使用 expressejs 來顯示靜態網頁的 Node.js 範例。

CustomPlatform_TomcatSampleApp.zip

部署時會顯示靜態網頁的 Tomcat 範例。

下載範例平台定義封存:NodePlatform_Ubuntu.zip。此檔案內含平台定義檔案、Packer 範本、Packer 於映像建立期間執行的指令碼,以及 Packer 於平台建立期間將複製至建置器執行個體的指令碼和組態檔案。

範例 NodePlatform_Ubuntu.zip
|-- builder Contains files used by Packer to create the custom platform |-- custom_platform.json Packer template |-- platform.yaml Platform definition file |-- ReadMe.txt Briefly describes the sample

平台定義檔案 platform.yaml 會讓 Elastic Beanstalk 知道 Packer 範本 custom_platform.json 的名稱。

version: "1.0" provisioner: type: packer template: custom_platform.json flavor: ubuntu1604

Packer 範本會使用 Ubuntu AMI 做為 HVM 執行個體類型的平台映像基礎,讓 Packer 知道如何建置平台的 AMI。provisioners 區段則通知 Packer 將封存檔內 builder 資料夾的所有檔案,複製至執行個體,並於執行個體上執行 builder.sh 指令碼。指令碼完成時,Packer 會從已修改的執行個體建立映像。

Elastic Beanstalk 會建立三個可用於在 Packer 標籤 AMI 的環境變數:

AWS_EB_PLATFORM_ARN

自訂平台的 ARN。

AWS_EB_PLATFORM_NAME

自訂平台的名稱。

AWS_EB_PLATFORM_VERSION

自訂平台的版本。

範例 custom_platform.json 檔案使用這些變數來定義下列用於指令碼的值:

  • platform_name,由 platform.yaml 設定

  • platform_version,由 platform.yaml 設定

  • platform_arn,由範例 builder.sh 檔案結尾顯示的主要建置指令碼 custom_platform.json 所設定

custom_platform.json 檔案包含兩個您必須提供屬性的值:source_amiregion。如需選擇正確 AMI 和區域值的詳細資訊,請參閱 eb-custom-platforms-samples GitHub 儲存庫中的更新 Packer 範本

範例 custom_platform.json
{ "variables": { "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}", "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}", "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}" }, "builders": [ { ... "region": "", "source_ami": "", ... } ], "provisioners": [ {...}, { "type": "shell", "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}", "scripts": [ "builder/builder.sh" ] } ] }

您納入平台定義封存的指令碼和其他檔案,視您欲在執行個體上進行的修改有極大差異。範例平台包含下列指令碼:

  • 00-sync-apt.sh – 已標示為註解:apt -y update。我們將此命令變更為註解,因為其會要求使用者輸入訊息,中斷自動化套件更新。這可能是 Ubuntu 的問題。然而,最佳作法仍建議執行 apt -y update。因此,我們的範例指令碼留下此命令做為參考。

  • 01-install-nginx.sh – 安裝 nginx。

  • 02-setup-platform.sh – 安裝 wgettreegit。將掛勾和記錄組態複製至執行個體,並建立下列目錄:

    • /etc/SampleNodePlatform – 部署期間容器組態檔案的上傳位置。

    • /opt/elasticbeanstalk/deploy/appsource/ – 部署期間 00-unzip.sh 指令碼上傳應用程式原始碼的位置 (如需此指令碼的資訊,請參閱適用於 Elastic Beanstalk 環境的平台指令碼工具章節)。

    • /var/app/staging/ – 部署期間處理應用程式原始碼的位置。

    • /var/app/current/ – 應用程式原始碼處理後執行的位置。

    • /var/log/nginx/healthd/增強型運作狀態代理程式寫入日誌的位置。

    • /var/nodejs – 部署期間 Node.js 檔案上傳的位置。

使用 EB CLI,透過範例平台定義封存來建立您的第一個自訂平台。

欲建立自訂平台
  1. 安裝 EB CLI

  2. 建立您將擷取範例自訂平台的目錄。

    ~$ mkdir ~/custom-platform
  3. 擷取 NodePlatform_Ubuntu.zip 到目錄,然後變更到解壓縮目錄。

    ~$ cd ~/custom-platform ~/custom-platform$ unzip ~/NodePlatform_Ubuntu.zip ~/custom-platform$ cd NodePlatform_Ubuntu
  4. 編輯 custom_platform.json 檔案,並且為 source_amiregion 屬性提供值。如需詳細資訊,請參閱更新 Packer 範本

  5. 執行 eb platform init 並依提示初始化平台儲存庫。

    您可將 eb platform 縮短為 ebp

    注意

    Windows PowerShell 使用 ebp 做為命令別名。若您於 Windows PowerShell 執行 EB CLI,請使用此命令的長格式:eb platform

    ~/custom-platform$ eb platform init

    此命令亦於目前目錄內建立目錄 .elasticbeanstalk,並將組態檔案 config.yml 新增至該目錄。請勿變更或刪除此檔案,因為 Elastic Beanstalk 建立自訂平台時需要此檔案。

    eb platform init 預設會使用目前資料夾的名稱做為自訂平台的名稱,在此範例中為 custom-platform

  6. 執行 eb platform create 來啟動 Packer 環境,並取得自訂平台的 ARN。您稍後在此自訂平台建立環境時,將需要此值。

    ~/custom-platform$ eb platform create ...

    依預設,Elastic Beanstalk 會建立自訂平台的執行個體描述檔 aws-elasticbeanstalk-custom-platform-ec2-role。若您想要使用現有的執行個體描述檔,請將選項 -ip INSTANCE_PROFILE 新增至 eb platform create 命令。

    注意

    如果您使用 Elastic Beanstalk 預設執行個體描述檔 aws-elasticbeanstalk-ec2-role,Packer 將無法建立自訂平台。

    EB CLI 會顯示 Packer 環境的事件輸出,直至建立完成。您可按 Ctrl+C 退出事件檢視。

  7. 您可使用 eb platform logs 命令來檢查日誌是否有錯誤。

    ~/custom-platform$ eb platform logs ...
  8. 您稍後可透過 eb platform events 來檢查程序。

    ~/custom-platform$ eb platform events ...
  9. 透過 eb platform status 來檢查您平台的狀態。

    ~/custom-platform$ eb platform status ...

操作完成時,您將具備可用於啟動 Elastic Beanstalk 環境的平台。

透過主控台建立環境時,可使用自訂平台。請參閱 建立新的環境精靈

欲在您的自訂平台上啟動環境
  1. 為您的應用程式建立目錄。

    ~$ mkdir custom-platform-app ~$ cd ~/custom-platform-app
  2. 初始化應用程式儲存庫。

    ~/custom-platform-app$ eb init ...
  3. 下載範例應用程式 NodeSampleApp.zip

  4. 擷取範例應用程式。

    ~/custom-platform-app$ unzip ~/NodeSampleApp.zip
  5. 執行 eb create -p CUSTOM-PLATFORM-ARN 來啟動執行您自訂平台的環境,其中 CUSTOM-PLATFORM-ARNeb platform create 命令回傳的 ARN。

    ~/custom-platform-app$ eb create -p CUSTOM-PLATFORM-ARN ...

平台定義存檔內容

平台定義封存為相當於應用程式原始碼套件的平台。平台定義封存為 ZIP 檔案,其中包含平台定義檔案、Packer 範本及 Packer 範本用來建立您平台的指令碼和檔案。

注意

當您使用 EB CLI 來建立自訂平台,EB CLI 會自平台儲存庫的檔案和資料夾建立平台定義封存,因此您無須手動建立封存。

平台定義檔案是 YAML 格式的檔案,必須命名為 platform.yaml,並位於平台定義封存的根目錄中。如需平台定義檔案支援的必要和選用金鑰清單,請參閱建立自訂平台

您無須以特定方式來命名 Packer 範本,但該檔案名稱必須與平台定義檔案中指定的佈建範本相符。如需建立 Packer 範本的說明,請參閱官方 Packer 文件

平台定義封存中的其他檔案為範本在建立 AMI 前用來自訂執行個體的指令碼和檔案。

自訂平台掛勾

Elastic Beanstalk 使用標準化目錄結構在自訂平台上進行掛接。這些是生命週期事件期間及回應管理操作所執行的指令碼,如您環境中的執行個體啟動時,或使用者啟動部署或使用重新啟動應用程式伺服器功能時。

您需要將指令碼掛接在 /opt/elasticbeanstalk/hooks/ 資料夾的其中一個子資料夾。

警告

不支援在受管平台上使用自訂平台掛勾。自訂平台掛勾是專為自訂平台所設計。在 Elastic Beanstalk 受管平台上,它們的運作方式可能不同或有些問題,跨平台的行為可能有所不同。在 Amazon Linux AMI 平台 (前身是 Amazon Linux 2) 上,在某些情況下,它們可能仍然以有用的方式運作,請謹慎使用。

自訂平台掛鉤是存在於 Amazon Linux AMI 平台上的舊版功能。在 Amazon Linux 2 平台,/opt/elasticbeanstalk/hooks/ 資料夾中的自訂平台掛勾會完全停止使用。Elastic Beanstalk 不會讀取或執行這些掛勾。Amazon Linux 2 平台支援一種新的平台掛勾,專門設計用於擴展 Elastic Beanstalk 受管平台。您可以將自訂指令碼和程式直接新增到應用程式原始碼套件中的掛勾目錄。Elastic Beanstalk 會在各個執行個體佈建階段期間執行這些項目。如需詳細資訊,請展開擴充 Elastic Beanstalk Linux 平台中的平台掛勾一節。

掛勾會整理成下列資料夾:

  • appdeploy – 應用程式部署期間執行的指令碼。當新的執行個體啟動時,或用戶端啟動新版本的部署時,Elastic Beanstalk 會執行應用程式部署。

  • configdeploy – 用戶端在執行會影響執行個體上軟體組態的組態更新時,所執行的指令碼,例如,設定環境屬性或啟用日誌輪換至 Amazon S3。

  • restartappserver – 用戶端執行重新啟動應用程式伺服器操作所執行的指令碼。

  • preinit – 執行個體啟動載入作業期間所執行的指令碼。

  • postinit – 執行個體啟動載入作業之後所執行的指令碼。

appdeployconfigdeployrestartappserver 資料夾包含 preenactpost 子資料夾。在操作的各個階段,會以字母順序執行 pre 資料夾內的所有指令碼,之後則依序為 enact 資料夾和 post 資料夾中的指令碼。

執行個體啟動時,Elastic Beanstalk 會依序執行 preinitappdeploypostinit。後續在運作中執行個體上進行部署時,Elastic Beanstalk 會執行 appdeploy 掛勾。當使用者更新執行個體軟體組態設定時,會執行 configdeploy 掛勾。使用者啟動應用程式伺服器重新啟動,僅在此時才會執行 restartappserver 掛勾。

當您的指令碼出現錯誤,能夠以非零狀態退出並寫入 stderr,來讓操作失敗。寫入 stderr 的訊息會出現在操作失敗所輸出的事件。Elastic Beanstalk 也會在日誌檔案 /var/log/eb-activity.log 中擷取此資訊。若您不希望操作失敗,請回傳 0 (零)。寫入 stderrstdout 的訊息會顯示於部署日誌,但不會顯示於事件串流,除非操作失敗。

Packer 執行個體清除

部分情況下 (例如在 Packer 建置器程序完成前將其刪除),Packer 啟動的執行個體不會被清除。這些執行個體不屬於 Elastic Beanstalk 環境,僅能使用 Amazon EC2 服務來檢視並終止。

欲手動清除這些執行個體
  1. 開啟 Amazon EC2 主控台

  2. 請確定您位於使用 Packer 建立執行個體的相同 AWS 區域。

  3. Resources (資源) 下選擇 N Running Instances (N 個運作中的執行個體),其中 N 表示運作中執行個體的數目。

  4. 按一下查詢文字方塊。

  5. 選取 Name (名稱) 標記。

  6. 輸入 packer

    查詢應類似:tag:Name: packer

  7. 選取符合查詢的執行個體。

  8. Instance State (執行個體狀態)running (運作中),請依序選擇 Actions (動作)Instance State (執行個體狀態)Stop (停止),然後再選取 Actions (動作)Instance State (執行個體狀態)Terminate (終止)

Platform.yaml 檔案格式

platform.yaml 檔案的格式如下。

version: "version-number" provisioner: type: provisioner-type template: provisioner-template flavor: provisioner-flavor metadata: maintainer: metadata-maintainer description: metadata-description operating_system_name: metadata-operating_system_name operating_system_version: metadata-operating_system_version programming_language_name: metadata-programming_language_name programming_language_version: metadata-programming_language_version framework_name: metadata-framework_name framework_version: metadata-framework_version option_definitions: - namespace: option-def-namespace option_name: option-def-option_name description: option-def-description default_value: option-def-default_value option_settings: - namespace: "option-setting-namespace" option_name: "option-setting-option_name" value: "option-setting-value"

以這些值取代預留位置:

version-number

必要。YAML 定義的版本。必須為 1.0

provisioner-type

必要。用於建立自訂平台的建置器類型。必須為 packer

provisioner-template

必要。內含 provisioner-type 設定的 JSON 檔案。

provisioner-flavor

選用。供 AMI 使用的基礎作業系統。下列其中一項:

amazon (預設)

Amazon Linux。若未指定,則是平台建立時的 Amazon Linux 最新版本。

Amazon Linux 2 不是支援的作業系統類別。

ubuntu1604

Ubuntu 16.04 LTS

rhel7

RHEL 7

rhel6

RHEL 6

metadata-maintainer

選用。平台擁有人的聯絡資訊 (100 個字元)。

metadata-description

選用。平台的描述 (2000 個字元)。

metadata-operating_system_name

選用。平台作業系統的名稱 (50 個字元)。篩選 ListPlatformVersions API 的輸出時,此值為可用。

metadata-operating_system_version

選用。平台作業系統的版本 (20 個字元)。

metadata-programming_language_name

選用。平台支援的程式設計語言 (50 個字元)。

metadata-programming_language_version

選用。平台語言的版本 (20 個字元)。

metadata-framework_name

選用。平台使用之 Web 架構的名稱 (50 個字元)。

metadata-framework_version

選用。平台 Web 架構的版本 (20 個字元)。

option-def-namespace

選用。aws:elasticbeanstalk:container:custom 底下的命名空間 (100 個字元)。

option-def-option_name

選用。選項的名稱 (100 個字元)。您至多可定義 50 個由平台向使用者提供的自訂組態選項。

option-def-description

選用。選項的描述 (1024 個字元)。

option-def-default_value

選用。使用者未指定時應使用的預設值。

下列範例會建立選項 NPM_START

options_definitions: - namespace: "aws:elasticbeanstalk:container:custom:application" option_name: "NPM_START" description: "Default application startup command" default_value: "node application.js"
option-setting-namespace

選用。選項的命名空間。

option-setting-option_name

選用。選項的名稱。您可以指定最多 50 個 Elastic Beanstalk 提供的選項

option-setting-value

選用。使用者未指定時應使用的值。

下列範例會建立選項 TEST

option_settings: - namespace: "aws:elasticbeanstalk:application:environment" option_name: "TEST" value: "This is a test"

標記自訂平台版本

您可以將標籤套用至 AWS Elastic Beanstalk 自訂平台版本。標籤是與 AWS 資源相關聯的鍵/值對。如需 Elastic Beanstalk 資源標記、使用案例、標籤索引鍵和值限制條件的相關資訊,以及支援的資源類型,請參閱標記 Elastic Beanstalk 應用程式資源

您可以在建立自訂平台版本時指定標籤。您可以在現有的自訂平台版本中新增或移除標籤,以及更新現有標籤的值。您最多可以為每個自訂平台版本新增 50 個標籤。

在自訂平台版本建立期間新增標籤

若您使用 EB CLI 來建立自訂平台版本,請使用帶有 eb platform create--tags 選項來新增標籤。

~/workspace/my-app$ eb platform create --tags mytag1=value1,mytag2=value2

使用 AWS CLI 或其他 API 型用戶端,在 create-platform-version 命令上使用 --tags 參數來新增標籤。

$ aws elasticbeanstalk create-platform-version \ --tags Key=mytag1,Value=value1 Key=mytag2,Value=value2 \ --platform-name my-platform --platform-version 1.0.0 --platform-definition-bundle S3Bucket=amzn-s3-demo-bucket,S3Key=sample.zip

管理現有自訂平台版本的標籤

您可以新增、更新和刪除現有 Elastic Beanstalk 自訂平台版本中的標籤。

如果您使用 EB CLI 來更新自訂平台版本,請使用 eb tags 新增、更新、刪除或列出標籤。

例如,以下命令會列出自訂平台版本中的標籤。

~/workspace/my-app$ eb tags --list --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

下列命令會更新標籤 mytag1 並刪除標籤 mytag2

~/workspace/my-app$ eb tags --update mytag1=newvalue --delete mytag2 \ --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

如需完整選項清單和更多範例,請參閱 eb tags

使用 AWS CLI 或其他 API 型用戶端時,請使用 list-tags-for-resource命令來列出自訂平台版本的標籤。

$ aws elasticbeanstalk list-tags-for-resource --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

使用 update-tags-for-resource 命令新增、更新或刪除自訂平台版本中的標籤。

$ aws elasticbeanstalk update-tags-for-resource \ --tags-to-add Key=mytag1,Value=newvalue --tags-to-remove mytag2 \ --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:platform/my-platform/1.0.0"

--tags-to-addupdate-tags-for-resource 參數中,同時指定欲新增和欲更新的標籤。如此將新增不存在的標籤,並更新現有標籤的值。

注意

若要搭配 Elastic Beanstalk 自訂平台版本使用某些 EB CLI 和 AWS CLI 命令,您需要自訂平台版本的 ARN。您可使用下列命令來擷取 ARN。

$ aws elasticbeanstalk list-platform-versions

使用 --filters 選項來篩選輸出以縮減到您的自訂平台名稱。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。