如何在 cloudformation 中获取 Elastic Beanstalk EC2 实例的 instanceId?

Posted

技术标签:

【中文标题】如何在 cloudformation 中获取 Elastic Beanstalk EC2 实例的 instanceId?【英文标题】:How to get the instanceId of an Elastic Beanstalk EC2 instance in cloudformation? 【发布时间】:2018-11-14 12:36:03 【问题描述】:

如何在cloudformation中获取Elastic Beanstalk EC2实例的instanceId?

我使用elasticbeanstalk TemplateelasticBeanstalk environment 创建了一个弹性豆茎。现在我需要在某处引用该 EB 的 instanceId。如何在 cloudformation 中做到这一点?

或者我可以使用一些解决方法从我的 EB 某处获取底层 EC2 实例,然后只获取该 EC2 的 instanceID(可行)。

这是我的模板的一部分。我有一个 EIP,我想将它与我的 EB EC2 的 instanceId 相关联。最后一行不起作用(instanceId)

Resources:
  ProxyEIP:
    Type: "AWS::EC2::EIP"
  ProxyEIPAssocation:
     Type: "AWS::EC2::EIPAssociation"
     Properties:
      InstanceId: !GetAtt ProxyEnvironment.InstanceId

我的弹性豆茎有一个基本配置。在这里,我想为我的 IP 创建一个环境属性。

  ProxyConfiguration:
    Type: AWS::ElasticBeanstalk::ConfigurationTemplate
    Properties:
      ApplicationName: !ImportValue ProxyApplication
      OptionSettings:
      ..
      - Namespace: aws:elasticbeanstalk:application:environment
        OptionName: nginx_IP
        Value: !Ref ProxyEIP

我的环境使用哪个

  ProxyEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      EnvironmentName: !Sub "Proxy-$Environment"
      ApplicationName: !ImportValue ProxyApplication
      TemplateName: !Ref ProxyConfiguration
      CNAMEPrefix: !Sub "nginx-$Environment"

【问题讨论】:

你能解释更多你想要做什么的场景吗?您在环境的第一次初始化期间是否需要 InstanceId?或者在您的环境更新期间?有关您的总体目标和要求的更多详细信息将有助于我们尝试和解决。 【参考方案1】:

您可以使用 CloudFormation CustomResource 来调用 lambda 函数。

您的 lambda 将根据 ElasticBeanstalk 提供给 EC2 实例的标签键描述弹性计算云实例,获取实例 ID。

Lambda 函数将向 CloudFormation 端点发送响应

【讨论】:

以上是关于如何在 cloudformation 中获取 Elastic Beanstalk EC2 实例的 instanceId?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Cloudformation 模板文件中获取用户名?

如何在 Cloudformation 中获取区域 AWS API 网关的自定义域的目标域名?

如何通过 Cloudformation 在 Beanstalk 实例上获取 SSL 证书

AWS CloudFormation 模板:如何获取模板信息?

在 CloudFormation/CDK 中获取 Sagemaker Notebook 实例 IP 地址

如何使用 Cloudformation 将 lambda 函数附加到现有 API 网关