我正在尝试定义一个Cassandra节点集群,以及一些其他实例(一些中间件和应用服务器)。我希望能够将Cassandra节点的(内部) IP地址添加到中间件的配置中,并将第一个Cassandra节点的IP添加到其他节点的配置中,作为种子节点。我可以完全在模板中实现这一点吗?(调用AMI中的脚本是可以的,集中式配置或平台不提供的任何类型的远程数据库都不行)
谢谢!安德拉斯
编辑:我忘记提到我还需要用实例的IP更新相关的安全组。
发布于 2012-04-25 22:08:21
调用AMI中的脚本是可以的。
如果是这样的话,您只需要cURL和EC2's内部元数据服务。从实例来看:
curl http://169.254.169.254/latest/meta-data/local-ipv4在http://169.254.169.254/latest/meta-data/上还有很多其他可用的元数据-主机名、安全组、实例ID等等。
发布于 2012-04-30 21:56:36
是的,您可以完全在模板内完成此操作。下面是模板的"Resources“部分,它定义了三个实例:两个Cassandra实例和一个中间件实例。
第二个Cassandra实例接收第一个作为用户数据的IP。中间件实例接收两个Cassandra实例的IP,也作为用户数据。
两个Cassandra实例都被添加到“cassandra节点”安全组中。我没有包含这个定义,但是在小片段部分中有一个安全组模板的例子。您不需要手动将它们的it添加到SG中,只需在描述实例时引用它。
"Resources" : {
"CassOneInstance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-123",
"InstanceType": "c1.medium",
"SecurityGroups" : [ "cassandra-nodes" ]
}
},
"CassTwoInstance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-123",
"InstanceType": "c1.medium",
"SecurityGroups" : [ "cassandra-nodes" ],
"UserData" : {
"Fn::Base64" : {
"Fn::Join" : [ ":", [
{ "Fn::GetAtt" : [ "CaseOneInstance", "PrivateIP" ] }
]
}
},
}
},
"MiddleWareInstance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"ImageId" : "ami-123",
"InstanceType": "c1.medium",
"UserData" : {
"Fn::Base64" : {
"Fn::Join" : [ ":", [
{ "Fn::GetAtt" : [ "CaseOneInstance", "PrivateIp" ] },
{ "Fn::GetAtt" : [ "CaseTwoInstance", "PrivateIp" ] }
]
}
},
}
}
}https://serverfault.com/questions/383165
复制相似问题