簡體   English   中英

在使用 AWS Elastic Beanstalk 創建實例時運行命令

[英]Running commands upon creation of instances using AWS Elastic Beanstalk

我一直在研究在 AWS 上使用 Elastic Beanstalk 創建 EC2 實例時運行命令的各種方法。 我通過 AWS 技術支持獲得了不同的方法來執行此操作,包括生命周期掛鈎、自定義 AMI 和 .ebextensions。 我在讓前兩種方法(生命周期掛鈎和自定義 AMI)與 EB 一起工作時遇到了問題。

我目前正在使用 .ebextensions 在部署時運行命令,但不確定是否有辦法僅在創建時而不是每次部署代碼時運行一組命令。 例如,我有一個包含以下代碼的文件.ebextensions/03-commands.config

container_commands:
  01_npm_install:
    command: "npm install -g -f npm@latest"

但是,我只希望此代碼在創建實例時運行,而不是像當前那樣每次部署時運行。 有誰知道實現這一目標的方法?

提前致謝!

我建議在您的應用程序中創建一個冪等腳本,該腳本在某個位置的實例上留下一個標記文件,比如 /var/myapp/marker 使用類似mkdir -p /var/myapp-state/; touch /var/myapp-state/marker 成功執行時mkdir -p /var/myapp-state/; touch /var/myapp-state/marker 這樣,您可以在腳本中檢查標記文件是否存在,您可以使腳本成為空操作。

然后你可以從容器命令調用你的腳本,但它每次都是空操作,因為在第一次成功執行時,它將創建標記文件,隨后的執行將是空操作。

創建自定義 AMI。 通過這種方式,您可以隨心所欲地設置實例,並且它們將啟動得更快

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.customenv.html

更新

我不明白為什么有人會反對這個。 無論如何,正如評論中所說,自定義 AMI 是在您的實例上創建自定義行為的好方法。

正如我從您的問題中看到的,您正在使用:container_commands,這意味着您正在將 Elastic Beanstalk 與 Docker 一起使用。 對? 在這種情況下,我建議閱讀: http : //docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

想法如下,您可以創建自己的 Dockerfile,您可以在其中指定構建 docker 容器所需的所有命令,例如安裝所有依賴項。

我建議將 .ebextensions 用於 Elastic Beanstalk 自定義和配置,例如指定 ELB 或 RDS 配置。 在 Dockerfile 中指定所有命令是有意義的,你需要為你的應用程序構建一個容器,包括 web 服務器的設置、依賴項等。

通過這種方法,Elastic Beanstalk 將構建一個容器,每次部署時,它都會執行一個帶有已部署源代碼的 docker 實例。

有一個簡單的選項leader_only: true您需要根據當前的 AWS Elasticbeanstalk 配置使用,您只需將其添加到

container_commands:
  01_npm_install:
    command: "npm install -g -f npm@latest"
    leader_only: true

這是根據 AWS AWS Elasticbeanstalk 容器命令選項的鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM