4

We would like to create a template for a fairly standard stack in AWS. We need three layers.

  1. Layer: Elastic Load Balancer

  2. Layer: several web servers which are created / destroyed according to alarms triggered by the demand on the site

  3. Layer: a database server

Instances on Layer 2 should know the host name of the database instance. Ideally I would like to get hold of the private IP of the database instance and pass it through user-data to the web servers.

Fn::GetAtt does not support the private ip (only the public)

I suppose an alternative would be to build the stack and afterwards to set manually the db private ip. It does though make our setup a bit less clean. We would ideally like everything to be described in the template. (even if this involves running a script through user-data)

Any suggestions?

1

1 Answer 1

6

I do this now to add new nodes to my puppet master. For example, I grab the private IP of the puppet master instance in the UserData section of my new node:

"echo ", { "Fn::GetAtt" : [ "MasterOfPuppets", "PrivateIp" ] }, " ", 
         { "Fn::GetAtt" : [ "MasterOfPuppets", "PrivateDnsName" ] } ," puppet 
    >> /etc/hosts\n","\n",

See page 119 of the CloudFormation User guide.

Alternatively you could use the instance MetaData:

curl http://169.254.169.254/latest/meta-data/local-ipv4/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.