如何在 .ebextensions 文件夹中为弹性 beantalk 运行命令行命令?
Posted
技术标签:
【中文标题】如何在 .ebextensions 文件夹中为弹性 beantalk 运行命令行命令?【英文标题】:How to run command line commands in the .ebextensions folder for elastic beanstalk? 【发布时间】:2022-01-13 19:34:05 【问题描述】:我有一些命令需要在新 Elastic Beanstalk 实例启动时运行。
如何构建.config
文件,以便命令在新实例启动时运行。
这些是我需要运行的命令:
INSTANCE_ID=$(ec2-metadata -i)
words=( $INSTANCE_ID )
EC2_ID="$words[1]"
aws ec2 associate-address --instance-id $EC2_ID --allocation-id eipalloc-16c1ecdcesrxx
如何在 .ebextensions
文件夹内名为 setup.config
的文件中运行它?
我想是这样的:
container_commands:
00bootup:
command: "INSTANCE_ID=$(ec2-metadata -i)"
command: "words=( $INSTANCE_ID )"
command: "EC2_ID="$words[1]""
command: "aws ec2 associate-address --instance-id $EC2_ID --allocation-id eipalloc-16c1ecdcesrxx"
但是,这并没有按预期设置弹性 IP。
更新: 我试过这个:
---
container_commands:
00setup:
command: |-
export AWS_DEFAULT_REGION=US-EAST-1
export AWS_ACCESS_KEY_ID=MY_KEY
export AWS_SECRET_ACCESS_KEY=MY_SECRET_KEY
INSTANCE_ID=$(ec2-metadata -i)
words=( $INSTANCE_ID )
EC2_ID="$words[1]"
aws ec2 associate-address --instance-id $EC2_ID --allocation-id eipalloc-06cXXXXXXXXXX
当我部署环境时,它失败了。它不会部署,但如果我不使用.config
文件,那么它会成功部署。这是日志:
2021/12/09 11:55:01.043643 [INFO] Executing instruction: configure X-Ray
2021/12/09 11:55:01.043652 [INFO] X-Ray is not enabled.
2021/12/09 11:55:01.043657 [INFO] Executing instruction: configure proxy nginx
2021/12/09 11:55:01.070732 [INFO] Executing instruction: configure healthd specific proxy conf
2021/12/09 11:55:01.073824 [INFO] Running command /bin/sh -c systemctl show -p PartOf healthd.service
2021/12/09 11:55:01.400439 [INFO] Running command /bin/sh -c systemctl daemon-reload
2021/12/09 11:55:02.065983 [INFO] Running command /bin/sh -c systemctl reset-failed
2021/12/09 11:55:02.070668 [INFO] Running command /bin/sh -c systemctl is-enabled aws-eb.target
2021/12/09 11:55:02.090250 [INFO] Running command /bin/sh -c systemctl enable aws-eb.target
2021/12/09 11:55:02.166046 [INFO] Running command /bin/sh -c systemctl start aws-eb.target
2021/12/09 11:55:02.184403 [INFO] Running command /bin/sh -c systemctl enable healthd.service
2021/12/09 11:55:02.258453 [INFO] Running command /bin/sh -c systemctl show -p PartOf healthd.service
2021/12/09 11:55:02.270566 [INFO] Running command /bin/sh -c systemctl is-active healthd.service
2021/12/09 11:55:02.274378 [INFO] Running command /bin/sh -c systemctl start healthd.service
2021/12/09 11:55:02.320050 [INFO] Copying file /opt/elasticbeanstalk/config/private/healthd/healthd_logformat.conf to /var/proxy/staging/nginx/conf.d/healthd_logformat.conf
2021/12/09 11:55:02.322053 [INFO] Copying file /opt/elasticbeanstalk/config/private/healthd/healthd_nginx.conf to /var/proxy/staging/nginx/conf.d/elasticbeanstalk/healthd.conf
2021/12/09 11:55:02.325036 [INFO] Executing instruction: configure log streaming
2021/12/09 11:55:02.325048 [INFO] log streaming is not enabled
2021/12/09 11:55:02.325052 [INFO] disable log stream
2021/12/09 11:55:02.325066 [INFO] Running command /bin/sh -c systemctl show -p PartOf amazon-cloudwatch-agent.service
2021/12/09 11:55:02.340721 [INFO] Running command /bin/sh -c systemctl stop amazon-cloudwatch-agent.service
2021/12/09 11:55:02.345794 [INFO] Executing instruction: GetToggleForceRotate
2021/12/09 11:55:02.345807 [INFO] Checking if logs need forced rotation
2021/12/09 11:55:02.345844 [INFO] Running command /bin/sh -c /opt/aws/bin/cfn-get-metadata -s arn:aws:cloudformation:us-east-1:796071762232:stack/awseb-e-8eps8ub4a3-stack/1f9bcf70-58e6-11ec-8466-127df4d38a9f -r AWSEBAutoScalingGroup --region us-east-1
2021/12/09 11:55:04.975344 [INFO] Running command /bin/sh -c /opt/aws/bin/cfn-get-metadata -s arn:aws:cloudformation:us-east-1:796071762232:stack/awseb-e-8eps8ub4a3-stack/1f9bcf70-58e6-11ec-8466-127df4d38a9f -r AWSEBBeanstalkMetadata --region us-east-1
2021/12/09 11:55:05.364102 [INFO] Procfile not found. Generating default rsyslog config
2021/12/09 11:55:05.366813 [INFO] Running command /bin/sh -c systemctl restart rsyslog.service
2021/12/09 11:55:06.345757 [INFO] Executing instruction: Configure Docker Logging
2021/12/09 11:55:06.365153 [INFO] Executing instruction: PostBuildEbExtension
2021/12/09 11:55:06.365179 [INFO] Starting executing the config set Infra-EmbeddedPostBuild.
2021/12/09 11:55:06.365193 [INFO] Running command /bin/sh -c /opt/aws/bin/cfn-init -s arn:aws:cloudformation:us-east-1:796071762232:stack/awseb-e-8eps8ub4a3-stack/1f9bcf70-58e6-11ec-8466-127df4d38a9f -r AWSEBAutoScalingGroup --region us-east-1 --configsets Infra-EmbeddedPostBuild
2021/12/09 11:55:20.596390 [ERROR] An error occurred during execution of command [app-deploy] - [PostBuildEbExtension]. Stop running the command. Error: Container commands build failed. Please refer to /var/log/cfn-init.log for more details.
2021/12/09 11:55:20.596410 [INFO] Executing cleanup logic
2021/12/09 11:55:20.596519 [INFO] CommandService Response: "status":"FAILURE","api_version":"1.0","results":["status":"FAILURE","msg":"Engine execution has encountered an error.","returncode":1,"events":["msg":"Instance deployment failed. For details, see 'eb-engine.log'.","timestamp":1639050920,"severity":"ERROR"]]
2021/12/09 11:55:20.597712 [INFO] Platform Engine finished execution on command: app-deploy
2021/12/09 11:56:44.993323 [INFO] Starting...
2021/12/09 11:56:44.993370 [INFO] Starting EBPlatform-PlatformEngine
2021/12/09 11:56:44.994105 [INFO] reading event message file
2021/12/09 11:56:45.002909 [INFO] no eb envtier info file found, skip loading env tier info.
2021/12/09 11:56:45.002987 [INFO] Engine received EB command cfn-hup-exec
2021/12/09 11:56:45.109117 [INFO] Running command /bin/sh -c /opt/aws/bin/cfn-get-metadata -s arn:aws:cloudformation:us-east-1:796071762232:stack/awseb-e-8eps8ub4a3-stack/1f9bcf70-58e6-11ec-8466-127df4d38a9f -r AWSEBAutoScalingGroup --region us-east-1
2021/12/09 11:56:45.596582 [INFO] Running command /bin/sh -c /opt/aws/bin/cfn-get-metadata -s arn:aws:cloudformation:us-east-1:796071762232:stack/awseb-e-8eps8ub4a3-stack/1f9bcf70-58e6-11ec-8466-127df4d38a9f -r AWSEBBeanstalkMetadata --region us-east-1
2021/12/09 11:56:45.956533 [INFO] checking whether command tail-log is applicable to this instance...
2021/12/09 11:56:45.956550 [INFO] this command is applicable to the instance, thus instance should execute command
2021/12/09 11:56:45.956555 [INFO] Engine command: (tail-log)
2021/12/09 11:56:45.957863 [INFO] Executing instruction: GetTailLogs
2021/12/09 11:56:45.957872 [INFO] Tail Logs...
2021/12/09 11:56:45.963685 [INFO] Running command /bin/sh -c tail -n 100 /var/log/eb-engine.log
我的setup.config
文件的格式有什么问题。我在.ebextensions
文件夹中。
【问题讨论】:
Windows? Linux? 每次重新启动时,还是只是部署新的应用程序版本? 这是 Linux。并创建一个实例。当我使用命令“eb deploy project”部署新版本的实例时 【参考方案1】:要将这多个命令作为一个运行,您可以执行以下操作:
container_commands:
00bootup:
command: |
INSTANCE_ID=$(ec2-metadata -i)
words=( $INSTANCE_ID )
EC2_ID="$words[1]"
aws ec2 associate-address --instance-id $EC2_ID --allocation-id eipalloc-16c1ecdcesrxx
【讨论】:
@mcool 不,它会在您的应用程序部署时运行。对于每次启动,您都必须编写自己的自定义 systemd 单元文件。 @mcool 未创建新实例。只有您在实例上的现有应用程序将被其新版本替换。在这种情况下,您的.ebextensions
配置文件将运行。要重新启动实例,您必须实际重新启动它,方法与重新启动本地计算机相同。
@mcool 告诉我进展如何。
@mcool 是的,你可以重命名它。以上是关于如何在 .ebextensions 文件夹中为弹性 beantalk 运行命令行命令?的主要内容,如果未能解决你的问题,请参考以下文章