適用於 Elastic Beanstalk 環境的平台腳本工具 - AWS Elastic Beanstalk

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

適用於 Elastic Beanstalk 環境的平台腳本工具

本主題描述的工具 AWS Elastic Beanstalk 提供使用 Amazon Linux 平台的環境。這些工具位於 Elastic Beanstalk EC2 環境的 Amazon 實例上。

get-config

使用 get-config 工具擷取環境變數值以及其他平台和執行個體資訊。此工具可於 /opt/elasticbeanstalk/bin/get-config 取得。

get-config 命令

每個 get-config 工具命令都會傳回特定類型的資訊。使用下列語法可執行任一工具的命令。

$ /opt/elasticbeanstalk/bin/get-config command [ options ]

以下範例執行 environment 命令。

$ /opt/elasticbeanstalk/bin/get-config environment -k PORT

根據您選擇的指令和選項,工具會傳回含索引鍵值配對JSON或單一值的物件 (或YAML)。

您可以使用連線SSH至 Elastic Beanstalk EC2 環境中的執行個體進行測試get-config

注意

當您執行 get-config 測試時,某些命令可能需要根使用者權限才能存取基礎資訊。如果您收到存取許可錯誤,請在 sudo 下重新執行命令。

在部署到環境的指令碼中使用工具時,不需要新增 sudo。Elastic Beanstalk 會以根使用者的身分執行所有指令碼。

以下幾節會說明工具的命令。

get-config optionsettings 命令會傳回一個物件,其中列出針對環境所設定並由環境執行個體平台使用的組態選項。這些選項會依命名空間加以組織。

$ /opt/elasticbeanstalk/bin/get-config optionsettings {"aws:elasticbeanstalk:application:environment":{"JDBC_CONNECTION_STRING":""},"aws:elasticbeanstalk:container:tomcat:jvmoptions":{"JVM Options":"","Xms":"256m","Xmx":"256m"},"aws:elasticbeanstalk:environment:proxy":{"ProxyServer":"nginx","StaticFiles":[""]},"aws:elasticbeanstalk:healthreporting:system":{"SystemType":"enhanced"},"aws:elasticbeanstalk:hostmanager":{"LogPublicationControl":"false"}}

若要傳回特定的組態選項,請使用 --namespace (-n) 選項來指定命名空間,並使用 --option-name (-o) 選項指定選項名稱。

$ /opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:container:php:phpini -o memory_limit 256M

get-config environment 命令會傳回包含環境屬性清單的物件,其中包括使用者設定以及由 Elastic Beanstalk 提供的屬性。

$ /opt/elasticbeanstalk/bin/get-config environment {"JDBC_CONNECTION_STRING":"","RDS_PORT":"3306","RDS_HOSTNAME":"anj9aw1b0tbj6b.cijbpanmxz5u.us-west-2.rds.amazonaws.com","RDS_USERNAME":"testusername","RDS_DB_NAME":"ebdb","RDS_PASSWORD":"testpassword1923851"}

例如,Elastic Beanstalk 提供環境屬性以連接至整合式 Amazon RDS 資料庫執行個體 (例如)。RDS_HOSTNAME這些RDS連線內容會顯示在的輸出中get-config environment。但不會出現在 get-config optionsettings 的輸出內容。這是因為您並未在組態選項中加以設定。

若要傳回特定環境屬性,請使用 --key (-k) 選項來指定屬性的鍵。

$ /opt/elasticbeanstalk/bin/get-config environment -k TESTPROPERTY testvalue

get-config container 命令會傳回一個物件,列出環境執行個體的平台和環境組態值。

下列範例會在 Amazon Linux 2 Tomcat 環境中顯示命令的輸出內容。

$ /opt/elasticbeanstalk/bin/get-config container {"common_log_list":["/var/log/eb-engine.log","/var/log/eb-hooks.log"],"default_log_list":["/var/log/nginx/access.log","/var/log/nginx/error.log"],"environment_name":"myenv-1da84946","instance_port":"80","log_group_name_prefix":"/aws/elasticbeanstalk","proxy_server":"nginx","static_files":[""],"xray_enabled":"false"}

要返回特定鍵的值,請使用 --key (-k) 選項來指定鍵。

$ /opt/elasticbeanstalk/bin/get-config container -k environment_name myenv-1da84946

get-config addons 命令會傳回內含環境附加元件組態資訊的物件。使用它來擷取與環境相關聯之 Amazon RDS 資料庫的組態。

$ /opt/elasticbeanstalk/bin/get-config addons {"rds":{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}}

您可以使用兩種方式限制結果。若要擷取特定附加元件的值,請使用 --add-on (-a) 選項來指定附加元件名稱。

$ /opt/elasticbeanstalk/bin/get-config addons -a rds {"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}

若要傳回附加元件內特定鍵的值,請新增 --key (-k) 選項以指定鍵。

$ /opt/elasticbeanstalk/bin/get-config addons -a rds -k RDS_DB_NAME ebdb

get-config platformconfig 命令會傳回內含平台組態資訊的物件,該資訊不會因為平台版本而有所改變。在執行相同平台版本的所有環境中,輸出內容相同。命令的輸出物件具有兩個內嵌物件:

  • GeneralConfig – 包含所有 Amazon Linux 2 和 Amazon Linux 2023 平台分支最新版本中維持不變的資訊。

  • PlatformSpecificConfig – 包含平台版本中維持不變且專屬於該平台版本的資訊。

下列範例顯示針對使用 Tomcat 8.5 執行 Corretto 11 平台分支的環境,執行命令會產生哪些輸出內容。

$ /opt/elasticbeanstalk/bin/get-config platformconfig {"GeneralConfig":{"AppUser":"webapp","AppDeployDir":"/var/app/current/","AppStagingDir":"/var/app/staging/","ProxyServer":"nginx","DefaultInstancePort":"80"},"PlatformSpecificConfig":{"ApplicationPort":"8080","JavaVersion":"11","TomcatVersion":"8.5"}}

要返回特定鍵的值,請使用 --key (-k) 選項來指定鍵。這些鍵在兩個嵌入物件中是唯一的鍵。您不需要指定包含鍵的對象。

$ /opt/elasticbeanstalk/bin/get-config platformconfig -k AppStagingDir /var/app/staging/

get-config 輸出選項

使用 --output 選項來指定輸出物件格式。有效值為 JSON (預設) 和 YAML。這是全域選項。您必須在命令名稱之前加以指定。

下列範例會以YAML格式傳回組態選項值。

$ /opt/elasticbeanstalk/bin/get-config --output YAML optionsettings aws:elasticbeanstalk:application:environment: JDBC_CONNECTION_STRING: "" aws:elasticbeanstalk:container:tomcat:jvmoptions: JVM Options: "" Xms: 256m Xmx: 256m aws:elasticbeanstalk:environment:proxy: ProxyServer: nginx StaticFiles: - "" aws:elasticbeanstalk:healthreporting:system: SystemType: enhanced aws:elasticbeanstalk:hostmanager: LogPublicationControl: "false"

pkg-repo

注意

pkg-repo 工具不適用於以 Amazon Linux 2023 平台為基礎的環境。不過,您可以手動將套件和作業系統更新套用至 AL2 023 執行個體。如需詳細資訊,請參閱《Amazon Linux 2023 使用者指南》中的管理套件和作業系統更新

在某些緊急情況下,您可能需要使用尚未以所需 Elastic Beanstalk 平台版本發EC2行的 Amazon Linux 2 安全修補程式來更新 Amazon 執行個體。預設情形下,您無法在 Elastic Beanstalk 環境中執行手動更新。原因在於,平台版本僅能搭配特定版本的 Amazon Linux 2 儲存庫一起使用。藉由這樣的版本鎖定設計,系統能確保執行個體執行的是受支援且一致的軟體版本。發生緊急情況時,如果您需要在環境中安裝 yum 套件,但新版 Elastic Beanstalk 平台尚未發佈該套件時,pkg-repo 工具可允許您在 Amazon Linux 2 上手動更新 yum 套件。

Amazon Linux 2 平台上的 pkg-repo 工具可提供解鎖 yum 套件儲存庫的功能。接著,您就可以手動執行 yum update,取得安全性修補程式。相反地,您也可以使用此工具鎖定 yum 套件儲存庫,以防止系統執行其他更新作業,隨著既定的更新時程更新。該pkg-repo工具可在 Elastic Beanstalk EC2 環境中的所有實例的/opt/elasticbeanstalk/bin/pkg-repo目錄中使用。

使用pkg-repo工具的變更只會在使用工具的EC2例證上進行。不會影響其他執行個體,也不會影響環境日後的更新作業。本主題稍後提供的範例會說明如何透過指令碼和組態檔案呼叫 pkg-repo 命令,一次變更所有執行個體。

警告

大部分使用者皆不建議使用這項工具。系統會將您套用至解鎖平台版本的任何手動變更項目視為頻外行為。唯有當使用者在緊急情況下可以接受下列風險時,才可使用此選項:

  • 無法保證套件版本在環境中的所有執行個體之間都能保持一致。

  • 使用 pkg-repo 工具修改過的環境不保證能正常運作。這類環境尚未在 Elastic Beanstalk 支援的平台上完成測試和驗證。

我們強烈建議您採取最佳實務,包括執行測試及退出計畫。若要協助促進最佳作法,您可以使用 Elastic Beanstalk 主控台和 EB CLI 來複製環境和交換環境。URLs如需執行這些作業的詳細資訊,請參閱本指南中管理環境章節的藍/綠部署一節。

如果您打算手動編輯 yum 儲存庫組態檔案,請先執行 pkg-repo 工具。yum 儲存庫組態檔案經過手動編輯後,pkg-repo 工具可能無法在 Amazon Linux 2 環境中正常運作。這是因為工具可能無法辨識組態的變更項目。

如需有關 Amazon Linux Package 儲存庫的詳細資訊,請參閱 Amazon EC2 使用者指南中的套件儲存庫主題。

pkg-repo 命令

使用下列語法執行 pkg-repo 工具的命令。

$ /opt/elasticbeanstalk/bin/pkg-repo command [options]

pkg-repo 命令如下:

  • lock — 將 yum 套件儲存庫鎖定至特定版本

  • unlock — 將 yum 套件儲存庫與特定版本解除鎖定

  • status — 列出所有 yum 套件儲存庫及其目前的鎖定狀態

  • help — 顯示命令的一般說明或說明內容

這些選項對命令的適用情形如下:

  • lockunlockstatus — 選項:-h--help 或無 (預設)。

  • help — 選項:lockunlockstatus 或無 (預設)。

以下範例執行 unlock 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo unlock Amazon Linux 2 core package repo successfully unlocked Amazon Linux 2 extras package repo successfully unlocked

以下範例執行 lock 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo lock Amazon Linux 2 core package repo successfully locked Amazon Linux 2 extras package repo successfully locked

以下範例執行 status 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo status Amazon Linux 2 core package repo is currently UNLOCKED Amazon Linux 2 extras package repo is currently UNLOCKED

下列範例針對 lock 命令執行 help 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo help lock

下列範例針對 pkg-repo 工具執行 help 命令。

$ sudo /opt/elasticbeanstalk/bin/pkg-repo help

您可以使用連線SSH至 Elastic Beanstalk 環境中的執行個體進行測試pkg-repo。一個SSH選項是 EB CLI eb ssh命令。

注意

這項 pkg-repo 工具需有根使用者的權限才能執行。如果您收到存取許可錯誤,請在 sudo 下重新執行命令。

在部署到環境的指令碼或組態檔案中使用工具時,不需要新增 sudo。Elastic Beanstalk 會以根使用者的身分執行所有指令碼。

pkg-repo 範例

上一節提供在 Elastic Beanstalk 環境的個別EC2執行個體上進行測試的命令列範例。就測試作業而言,這種方法相當實用。不過,這種方法一次只能更新一個執行個體,因此不適合將變更項目套用至環境中的所有執行個體。

更務實的方法是使用平台勾點指令碼或 .ebextensions 組態檔案,以一致的方式將變更項目套用至所有執行個體。

下列範例呼叫 .ebextensions 資料夾中組態檔案的 pkg-repo。Elastic Beanstalk 會在您部署應用程式原始碼套件時,執行檔案中的 update_package.config

.ebextensions └── update_package.config

若要接收最新版本的 docker 套件,此組態會在 yum update 命令中指定 docker 套件。

### update_package.config ### commands: update_package: command: | /opt/elasticbeanstalk/bin/pkg-repo unlock yum update docker -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum

此組態不會在 yum update 命令中指定任何套件,因此所有可用的更新都會一併套用。

### update_package.config ### commands: update_package: command: | /opt/elasticbeanstalk/bin/pkg-repo unlock yum update -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum

下列範例以平台勾點的形式呼叫 bash 指令碼的 pkg-repo。Elastic Beanstalk 執行 prebuild 子目錄中的 update_package.sh 指令碼檔案。

.platform └── hooks └── prebuild └── update_package.sh

若要接收最新版本的 docker 套件,此指令碼會在 yum update 命令中指定 docker 套件。如果省略套件名稱,則套用所有可用的更新。前一個組態檔案範例會示範這項操作。

### update_package.sh ### #!/bin/bash /opt/elasticbeanstalk/bin/pkg-repo unlock yum update docker -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum

download-source-bundle (AMI僅限 Amazon Linux)

在 Amazon Linux AMI 平台分支機構(之前的 Amazon Linux 2),Elastic Beanstalk 提供了一個額外的工具,也就是說。download-source-bundle部署平台時,您可使用這項工具下載應用程式原始碼。此工具可於 /opt/elasticbeanstalk/bin/download-source-bundle 取得。

範例指令碼 00-unzip.sh 位於環境執行個體的 appdeploy/pre 資料夾中。這會示範如何在部署期間使用 download-source-bundle 將應用程式原始碼下載至 /opt/elasticbeanstalk/deploy/appsource 資料夾。