設定 Elastic Beanstalk 泊塢視窗環境 - AWS Elastic Beanstalk

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

設定 Elastic Beanstalk 泊塢視窗環境

本章說明所有受支援的 Docker 平台分支 (包括ECS託管 Docker 平台分支) 的其他組態資訊。除非在區段中識別特定的平台分支或平台分支元件,否則它會套用至執行受支援的 Docker 和ECS經過管理的 Docker 平台的所有環境。

注意

如果您的 Elastic Beanstalk 環境使用 Amazon Linux AMI 碼頭平台版本(之前的 Amazon Linux 2),請務必閱讀中的其他資訊。Amazon Linux 上的碼頭配置AMI(在 Amazon Linux 2 之前)

在 Docker 環境中設定軟體

您可使用 Elastic Beanstalk 主控台來設定於您環境的執行個體上執行的軟體。

在 Elastic Beanstalk 主控台中設定 Docker 環境
  1. 開啟彈性魔豆控制台,然後在區域清單中選取您的. AWS 區域

  2. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇組態

  4. 更新、監控和日誌記錄組態類別中,選擇編輯

  5. 進行必要的組態變更。

  6. 若要儲存變更,請選擇頁面底部的儲存變更

如需有關在任何環境中配置軟體設定的資訊,請參閱 環境屬性與其他軟體設定。以下各節介紹 Docker 的特定資訊。

容器選項

Container options (容器選項) 區段具有平台特定選項。對於 Docker 環境,它可讓您選擇您的環境是否包含NGINX代理伺服器。

使用 Docker Compose 的環境

如果您使用 Docker Compose 來管理 Docker 環境,則 Elastic Beanstalk 會假定您以容器身分來執行代理伺服器。因此,代理伺服器設定的預設值為「」,且 Elastic Beanstalk 不提供組NGINX態。

注意

即使您選取NGINX做為代理伺服器,在使用 Docker 撰寫的環境中,也會忽略此設定。Proxy server (代理伺服器) 設定仍預設為 None (無)

由於使用 Docker 撰寫功能的 Amazon Linux 2 平台上的 Docker 停用NGINX網頁伺服器代理伺服器,因此您必須遵循產生記錄以增強健全狀態報告的指示。如需詳細資訊,請參閱使用 Docker 撰寫生成日誌以增強健康報告

環境屬性和環境變數

環境屬性區段可讓您在執行應用程式的 Amazon 彈性運算雲端 (AmazonEC2) 執行個體上指定環境組態設定。環境屬性會以金鑰值對的形式傳到應用程式。在 Docker 環境中,Elastic Beanstalk 會將環境屬性傳遞給容器做為環境變數。

您在容器中執行的應用程式的程式碼,可以依名稱參照環境變數並讀取其值。讀取這些環境變數的原始程式碼會因程式語言而有所不同。您可以在個別平台主題中,找到在 Elastic Beanstalk 受管平台支援之程式設計語言中讀取環境變數值的指示。如需這些主題的連結清單,請參閱 環境屬性與其他軟體設定

使用 Docker Compose 的環境

如果您使用 Docker Compose 來管理 Docker 環境,您必須進行一些額外的設定,以擷取容器中的環境變數。若要讓容器中執行的可執行檔存取這些環境變數,您必須在 docker-compose.yml 中參考這些變數。如需詳細資訊,請參閱 在容器中參考環境變數

在容器中參考環境變數

如果您在 Amazon Linux 2 Docker 平台上使用 Docker Compose 工具,Elastic Beanstalk 會在應用程式專案的根目錄中產生名為 .env 的 Docker Compose 環境。此檔案會存放針對 Elastic Beanstalk 設定的環境變數。

注意

如果您在應用程式套件中加入 .env 檔案,Elastic Beanstalk 將不會產生 .env 檔案。

為了讓容器參考您在 Elastic Beanstalk 中定義的環境變數,您必須遵循其中一種或兩種設定方法。

  • 將 Elastic Beanstalk 產生的 .env 檔案新增至 env_file 檔案中的 docker-compose.yml 組態選項。

  • 直接定義 docker-compose.yml 檔案中的環境變數。

以下檔案提供範例。範例 docker-compose.yml 檔案會示範這兩種方法。

  • 如果您定義環境屬性 DEBUG_LEVEL=1LOG_LEVEL=error,Elastic Beanstalk 會為您產生以下 .env 檔案:

    DEBUG_LEVEL=1 LOG_LEVEL=error
  • 在此 docker-compose.yml 檔案中,env_file 組態選項會指向 .env 檔案,而且它也會在 DEBUG=1 檔案中直接定義環境變數 docker-compose.yml

    services: web: build: . environment: - DEBUG=1 env_file: - .env
備註
  • 如果您在兩個檔案中設定相同的環境變數,則 docker-compose.yml 檔案中定義之變數的優先順序高於 .env 檔案中定義的變數。

  • 請小心不要在等號 (=) 和指派給變數的值之間留下空格,以防止空格加入字串中。

若要進一步了解 Docker Compose 中的環境變數,請參閱 Compose 中的環境變數

使用 Docker 撰寫環境變量的插值功能

2023 年 7 月 28 日的平台發行開始,Docker Amazon Linux 2 平台分支提供 Docker Compose 插補功能。使用此功能,Compose 檔案中的值可由變數設定,並在執行期進行插補。如需有關此功能的詳細資訊,請參閱 Docker 文件網站上的插補

重要

如果想搭配使用此功能與您的應用程式,請注意,您需要實作使用平台勾點的方法。

這是必要的,因為我們在平台引擎中實作了緩解措施。這種緩解措施可讓不知道新插補功能,且擁有使用環境變數搭配 $ 字元之現有應用程式的客戶確保回溯相容性。預設情況下,更新後的平台引擎透過將 $ 字元取代為 $$ 字元來轉義插補。

以下是平台勾點指令碼範例,您可以將其設定為允許使用插補功能。

#!/bin/bash : ' example data format in .env file key1=value1 key2=value2 ' envfile="/var/app/staging/.env" tempfile=$(mktemp) while IFS= read -r line; do # split each env var string at '=' split_str=(${line//=/ }) if [ ${#split_str[@]} -eq 2 ]; then # replace '$$' with '$' replaced_str=${split_str[1]//\$\$/\$} # update the value of env var using ${replaced_str} line="${split_str[0]}=${replaced_str}" fi # append the updated env var to the tempfile echo "${line}" ≫"${tempfile}" done < "${envfile}" # replace the original .env file with the tempfile mv "${tempfile}" "${envfile}"

將平台勾點放在這兩個目錄下:

  • .platform/confighooks/predeploy/

  • .platform/hooks/predeploy/

如需詳細資訊,請參閱本指南的擴充 Linux 平台主題中的 平台勾點

使用 Docker 撰寫生成日誌以增強健康報告

Elastic Beanstalk 運作狀態代理程式提供 Elastic Beanstalk 環境的作業系統和應用程式運作狀態指標。其依賴以特定格式轉送資訊的 Web 伺服器日誌格式。

Elastic Beanstalk 假設您以容器身分來執行 Web 伺服器 Proxy。因此,在執行 Docker 撰寫的 Docker 環境中,會停用 NGINX Web 伺服器代理伺服器。您必須將伺服器設為以 Elastic Beanstalk 運作狀態代理程式所使用的位置和格式來寫入日誌。這麼做可讓您即使在已停用 Web 伺服器 Proxy 的狀態下,也能充分利用增強型運作狀態報告。

如需如何執行此動作的詳細資訊,請參閱 Web 伺服器日誌組態

使用 Docker 撰寫的碼頭容器自定義日誌記錄

為了有效率地疑難排解問題並監控您的容器化服務,您可以透過環境管理主控台或 EB 向 Elastic Beanstalk 要求執行個體記錄。CLI執行個體日誌由套件日誌和結尾日誌組成,經過組合和封裝,可讓您以有效且直接的方式,檢視日誌和最近的事件。

Elastic Beanstalk 會在容器執行個體上建立日誌目錄,針對 docker-compose.yml 檔案中定義的每個服務建立一個日誌目錄,位置是 /var/log/eb-docker/containers/<service name>。如果您在 Amazon Linux 2 Docker 平台上使用 Docker Compose 功能,您可以將這些目錄掛載到容器檔案結構中寫入日誌的位置。當您掛載日誌目錄以寫入日誌資料時,Elastic Beanstalk 可從這些目錄收集日誌資料。

如果您的應用程式位於未使用 Docker Compose 的 Docker 平台上,則可以遵循 使用 Docker 撰寫的碼頭容器自定義日誌記錄 中所述的標準程序。

若要將服務的日誌檔案設為可擷取的結尾檔案和套件日誌
  1. 編輯 docker-compose.yml 檔案。

  2. 在您服務的 volumes 金鑰下,將綁定掛載新增至以下內容:

    "${EB_LOG_BASE_DIR}/<service name>:<log directory inside container>

    在以下範例 docker-compose.yml 檔案中:

    • nginx-proxy<service name>

    • /var/log/nginx<log directory inside container>

    services: nginx-proxy: image: "nginx" volumes: - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx"

  • var/log/nginx 目錄包含容器中 nginx-proxy 服務的日誌,其將映射至主機上的 /var/log/eb-docker/containers/nginx-proxy 目錄。

  • 此目錄中的所有日誌現在可以透過 Elastic Beanstalk 的請求執行個體日誌功能,以套件和結尾日誌的形式擷取。

備註
  • $ {EB_ _ LOG BASE _DIR} 是由 Elastic Beanstalk 與值設置的環境變量。/var/log/eb-docker/containers

  • Elastic Beanstalk 會針對 /var/log/eb-docker/containers/<service name> 檔案中的每個服務,自動建立 docker-compose.yml 目錄。

Docker 影像

適用於 Elastic Beanstalk 的 Docker 和ECS託管式碼頭平台分支支援使用儲存在公共或私人線上映像儲存庫中的 Docker 映像檔。

根據 Dockerrun.aws.json 中的名稱來指定映像。請注意這些慣例:

  • Docker Hub 上官方儲存庫中的映像,使用的是單一名稱 (例如,ubuntumongo)。

  • Docker Hub 上的其他儲存庫中的映像要求使用組織名稱 (例如,amazon/amazon-ecs-agent)。

  • 其他線上儲存庫中的映像更進一步要求使用網域名稱 (例如,quay.io/assemblyline/ubuntuaccount-id.dkr.ecr.us-east-2.amazonaws.com/ubuntu:trusty)。

您也可以在環境建立期間,使用 Dockerfile 建置自己的映像。這僅適用於使用 Docker 平台的環境。如需詳細資訊,請參閱「透過 Dockerfile 建置自訂映像」。ECS託管的 Docker 平台平台不支持此功能。

為 Docker 環境設定受管更新

使用受管平台更新,您可以設定環境,根據排程自動更新至平台的最新版本。

如果是 Docker 環境,您可能會要決定自動平台更新是否應跨 Docker 版本實施 — 當新的平台版本包含新的 Docker 版本時。當從執行 2.9.0 版本以上的 Docker 平台版本的環境更新時,Elastic Beanstalk 支援跨 Docker 版本的受管理平台更新。當新的平台版本包含新版本的 Docker 時,Elastic Beanstalk 便會增加小型更新版本的號碼。因此,要允許跨 Docker 版本的受管平台更新,啟用次要和修補程式版本更新的受管平台更新。要避免跨 Docker 版本的受管平台更新,僅啟用修補程式版本更新的受管平台更新。

例如,下列組態檔案會在UTC每個星期二上午 9:00 針對次要版本和修補程式版本更新啟用受管理平台更新,因此允許跨 Docker 版本進行受管理的更新:

範例 .ebextension/. managed-platform-update 配置
option_settings: aws:elasticbeanstalk:managedactions: ManagedActionsEnabled: true PreferredStartTime: "Tue:09:00" aws:elasticbeanstalk:managedactions:platformupdate: UpdateLevel: minor

針對執行 2.9.0 或更早版本 Docker 平台的環境,若新的平台版本包含新的 Docker 版本,則 Elastic Beanstalk 永遠不會執行受管平台更新。

Docker 組態命名空間

您可以使用組態檔案來設定組態選項,並在部署期間執行其他的執行個體設定工作。組態選項可由 Elastic Beanstalk 服務或您使用的平台來定義,並且會組織成「命名空間」

注意

此資訊僅適用於未執行 Docker Compose 的 Docker 環境。此選項與執行 Docker Compose 的 Docker 環境有不同的行為。如需使用 Docker Compose 之 Proxy 服務的詳細資訊,請參閱 容器選項

除了適用於所有 Elastic Beanstalk 環境的支援選項之外,Docker 也支援使用下列命名空間的選項:

  • aws:elasticbeanstalk:environment:proxy – 選擇適用於您環境的代理伺服器。Docker 支援執行 Nginx 或沒有代理伺服器。

下列範例配置檔案會將 Docker 環境設定為在沒有代理伺服器的情況下運作。

範例 .ebextensions/docker-settings.config
option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: none

Amazon Linux 上的碼頭配置AMI(在 Amazon Linux 2 之前)

如果您的 Elastic Beanstalk 泊塢視窗環境使用 Amazon Linux AMI 平台版本(在 Amazon Linux 2 之前),請閱讀本節中的其他信息。

如果您要使用私有儲存庫的映像,則此資訊與您相關。自 Docker 版本 1.7 起,docker login 命令會變更身分驗證檔案的名稱和檔案格式。Amazon Linux AMI 碼頭平台版本 (在 Amazon Linux 2 之前) 需要較舊的~/.dockercfg格式設定檔。

若使用 Docker 版本 1.7 和更新版本,docker login 命令會於 ~/.docker/config.json 建立身分驗證檔案,格式如下。

{ "auths":{ "server":{ "auth":"key" } } }

若使用 Docker 版本 1.6.2 和更早版本,docker login 命令會於 ~/.dockercfg 建立身分驗證檔案,格式如下。

{ "server" : { "auth" : "auth_token", "email" : "email" } }

若要轉換config.json檔案,請移除外部auths索引鍵、新增email金鑰,然後將JSON文件平面化以符合舊格式。

在 Amazon Linux 2 Docker 平台版本上,Elastic Beanstalk 會使用較新的身分驗證檔案名稱和格式。如果您使用的是 Amazon Linux 2 Docker 平台版本,則可以使用 docker login 命令建立的身分驗證檔案,而無需進行任何轉換。

為了提高 Amazon Linux 上的性能AMI,Elastic Beanstalk 為您的 Docker 環境的 Amazon 實例配置兩個 Amazon EBS 存儲卷。EC2除了所有 Elastic Beanstalk 環境佈建的根磁碟區,Docker 環境會佈建第二個名為 xvdcz 的 12GB 磁碟區供映像儲存使用。

如果您需要更多儲存空間或增加 IOPS Docker 映像檔,您可以使用 aw: 自動擴充:啟動配置命名空間中的BlockDeviceMapping組態選項來自訂映像儲存磁碟區。

例如,下列組態檔案會在佈建 500 的情況下,將儲存磁碟區的大小增加到 100 GBIOPS:

範例 .ebextensions/blockdevice-xvdcz.config
option_settings: aws:autoscaling:launchconfiguration: BlockDeviceMappings: /dev/xvdcz=:100::io1:500

若您使用 BlockDeviceMappings 選項來設定您應用程式的其他磁碟區,您應該納入 xvdcz 的映射,以確保該磁碟區已建立。下列範例設定兩個磁碟區,一個為使用預設設定的映像儲存磁碟區 xvdcz,另一個則是名為 sdh 的額外 24 GB 應用程式磁碟區:

範例 .ebextensions/blockdevice-sdh.config
option_settings: aws:autoscaling:launchconfiguration: BlockDeviceMappings: /dev/xvdcz=:12:true:gp2,/dev/sdh=:24
注意

當於此命名空間變更設定時,Elastic Beanstalk 會將您環境中的所有執行個體,替換為執行新組態的執行個體。如需詳細資訊,請參閱「組態變更」。