弹性search对云信息的循环依赖

我正在尝试创build一个云信息模板,其中包含一个带有EIP和elasticsearch域的ec2实例。 问题是我正在创build一个循环依赖,我无法弄清楚如何解耦。 这里是。

ec2实例需要elasticsearch域的地址,所以我把它添加到UserData中的一个文件中。

elasticsearch AccessPolicies需要EC2实例的公共IP来允许从该服务器访问。

那就是这样 Elasticsearch依赖于ec2实例的EIP,而ec2实例依赖于elasticsearch域的地址。 所以我想要做的是使用EIPA协议来延迟创buildEC2Instance的需求,直到ElasticSearch域被创build之后。 但是还是没有运气。

有没有人有一个很好的解决这个问题? 我知道我可以有一个基于IAM的AccessPolicy,但我宁愿使用IP。

提前致谢。

这里是代码:

"MyEIP" : { "Type" : "AWS::EC2::EIP" }, "ElasticsearchDomain": { "Type": "AWS::Elasticsearch::Domain", "Properties": { "ElasticsearchClusterConfig": { "DedicatedMasterEnabled": "false", "InstanceCount": "1", "ZoneAwarenessEnabled": "false", "InstanceType": "t2.micro.elasticsearch" }, "EBSOptions": { "EBSEnabled": true, "Iops": 0, "VolumeSize": 10, "VolumeType": "gp2" }, "SnapshotOptions": { "AutomatedSnapshotStartHour": "0" }, "AccessPolicies":{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:*", "Resource": { "Fn::Join" : [ "", [ "arn:aws:es:us-east-1:00000000000:domain/", { "Ref" : "ElasticsearchDomain" }, "/*" ]]}, "Condition": { "IpAddress": { "aws:SourceIp": { "Ref" : "MyEIP" } } } } ] }, "AdvancedOptions": { "rest.action.multi.allow_explicit_index": "true" } } }, "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "64"]}, "KeyName" : { "Ref" : "KeyName" }, "InstanceType" : { "Ref": "ServerInstanceType" }, "SecurityGroups" : [ { "Ref" : "InstanceSecurityGroup" } ], "Tags": [{ "Key" : "Name", "Value" : { "Fn::Join" : [ "", [ { "Ref" : "AWS::StackName" } ]] } }], "UserData" : { "Fn::Base64" : { "Fn::Join" : [ "", [ "#!/bin/bash -ex\n", "echo \"", "STACK_NAME=", { "Ref" : "AWS::StackName"}, "\n", "ELASTICSEARCH_CLIENT=https://", { "Fn::GetAtt": [ "ElasticsearchDomain", "DomainEndpoint" ] }, "/\n", "\n", "\" > /etc/uni_creds\n" ]]}} } }, "EIPAssociation" : { "Type": "AWS::EC2::EIPAssociation", "Properties": { "EIP": { "Ref" : "MyEIP" }, "InstanceId": { "Ref" : "Ec2Instance" } } } 

我想我已经解决了我的问题。 虽然我得到一个错误,说EC2实例,elasticsearch域和EIP或EIPA关系之间存在循环依赖关系,但实际的错误是我在我的elasticsearch域中引用了我的elasticsearch域。

 "ElasticsearchDomain": { "Type": "AWS::Elasticsearch::Domain" ... { "Ref" : "ElasticsearchDomain" }, } 

这显然会导致一个问题。 错误信息是让我跑错了树。 无论如何,愚蠢的错误。 希望没有人碰到这个。