CloudFormation ElasticIP参数

时间:2017-12-17 11:44:46

标签: amazon-web-services amazon-cloudformation openvpn elastic-ip

我有一个CloudFormation模板,它将 OpenVPN 添加到现有VPC,并需要弹性IP分配ID作为参数。它还将来自相同弹性IP的公共IP地址添加到OpenVPN实例配置(在其UserData部分中)。

我目前已将此实施为2个参数(使用虚构的默认值)

Parameters:

  ElasticIpAddress:
    Description: >-
      IP Address of an Elastic IP.
    Type: String
    Default: 53.176.52.215

  ElasticIpAllocationId:
    Description: >-
      Allocation id of the same Elastic IP to associate OpenVPN server with.
    Type: String
    Default: eipalloc-f2013ba5

  ...
  

注意 - 这两者必须指向AWS中的相同ElasticIP!

ElasticIpAddress部分中创建 OpenVPN 实例时使用AWS::EC2::Instance参数,如下所示: -

openVPN:
  Type: 'AWS::EC2::Instance'
  Properties:
    Tags:
      - Key: Name
        Value: openVPN server
    UserData:
      Fn::Base64: !Sub |
        public_hostname=${ElasticIpAddress}
        admin_user=${OpenVPNASAdminUser}
    ...

... ElasticIpAllocationIdAWS::EC2::EIPAssociation部分中使用...

IPAssoc:
  Type: 'AWS::EC2::EIPAssociation'
  Properties:
    AllocationId: !Ref ElasticIpAllocationId
    InstanceId: !Ref openVPN
  DependsOn: openVPN

拥有相同弹性IP的(a)分配ID 和(b) IP地址似乎非常多余!

我的主要问题是 - 是否存在以下功能: -

  1. 从弹性IP分配ID
  2. 中检索IP地址
  3. 从弹性IP的IP地址中检索分配ID?
  4. 我的直觉是,我必须在实例的UserData:部分内使用CLI并使用AWS CLI命令 - 不确定它与OpenVPN AMI一样好用,因为它目前只是采用OpenVPN特定配置。

    感谢任何建议!

1 个答案:

答案 0 :(得分:0)

实现您想要的正确方法是创建R53记录,例如vpn.mydomain.com,它指向您的弹性IP地址(A记录)。 然后,您可以在userdata而不是$ {ElasticIpAddress}中分配此记录,并消除对IP地址参数的需要。

public_hostname=vpn.mydomain.com

只要你的EIP在R53记录上更新,你应该是好的。 如果您需要更改EIP地址,您仍然可以通过Route53控制已部署实例上的记录。

Getting Started with Route53