使用 .ebextensions 中的 .config 文件标记 AWS beanstalk 部署

Pra*_*eka 0 amazon-ec2 amazon-web-services node.js amazon-elastic-beanstalk

我在 beantalk 中部署的 Node 应用程序的根目录中向 .ebextensions 添加了一个 scripts.config 文件。我没有在控制台中看到 EC2 实例的标签。我也没有在 beanstalk 日志中看到任何提及 1_add_tags 的内容。我做错了什么,我如何知道是否调用了 script.config 中的命令!

.ebextensions 中的配置文件如下....

01_add_tags:

command: ec2-create-tags $(ec2-metadata -i | cut -d ' ' -f2) --tag Environment=Production --tag Name=Proxy-Server --tag Application=something
Run Code Online (Sandbox Code Playgroud)

环境:

EC2_HOME: /opt/aws/apitools/ec2
EC2_URL: https://ec2.ap-southeast-2.ama...
JAVA_HOME: /usr/lib/jvm/jre
PATH: /bin:/usr/bin:/opt/aws/bin/
Run Code Online (Sandbox Code Playgroud)

干杯,

普拉宾

Pra*_*eka 5

亚马逊对这个问题的回答。(这对我有用)...

您可以利用 ebextensions 在实例启动时执行某些命令。假设您想在基于 Linux 的容器上实现这一点。我为您制定了一个示例配置文件并附在此案例中。

请遵循以下准则:

  1. 在 AWS 管理控制台中,检查 beanstalk 使用的 IAM 角色/实例配置文件。默认情况下,它使用“aws-elasticbeanstalk-ec2-role”。为该角色添加权限以创建新标签 (ec2:CreateTags)。
  2. 如果您的应用程序根目录下没有“.ebextensions”文件夹或“WEB-INF”文件夹,则创建该文件夹。
  3. 修改配置文件中的键值对。多对由空格分隔。

示例代码段如下:

   {
        "container_commands": {
            "01_add_tags": {
                "command": "aws ec2 create-tags --resources $(GET http://169.254.169.254/latest/meta-data/instance-id) --tags Key=ClientName,Value=testClient Key=NewTag,Value=new-value --region us-east-1"
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)
  1. 在“.ebextensions”文件夹中添加修改后的配置文件。
  2. 将此版本上传到 beanstalk。它应该启动新实例并执行配置文件。
  3. 请给它一些时间,最好是在实例通过 EC2 实例状态检查之前。刷新页面以显示其他标签。

请注意,我们使用的是“Container_commands”而不是博客中使用的“Command”。容器命令在设置应用程序和 Web 服务器并提取应用程序版本文件之后,但在部署应用程序版本之前运行。这很重要,因为这些命令可以访问环境变量,例如实例配置文件设置的 AWS 安全凭证。

我建议您查看http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions 中提到的 AWS 资源标记限制 我想强调最大数量的标签每个资源是 10。

还要检查表以获取对某些资源的标记支持。例如,目前 ELB 不支持标记。

  • 这是一个很好的答案,它工作正常,但该命令并不与每个环境兼容,我认为使用curl更好:`aws ec2 create-tags --resources $(curl http://169.254.169.254/latest/meta- data/instance-id) --tags Key=KEYNAME,Value=KEYVALUE --region eu-west-1` 并记住更改区域 (2认同)