2017-10-21 220 views
0

我刚刚开始学习terraform,并试图设置一个弹性搜索集群,其前面有一个API网关。我已成功构建服务,以便构建弹性搜索集群,并通过输出变量将输出端点传递到API网关以获取集成请求。Terraform服务之间的循环依赖

在我最初的试验中,我使用aws_elasticsearch_domain.my_name.access_policies的广泛开放访问来测试我的模板代码。这对测试的目的很好,但对于真实世界的使用,我想在aws_elasticsearch_domain.my_name.access_policies中使用API​​网关的ARN。这似乎是有问题的,因为aws_api_gateway_integration.my_name.uri需要aws_elasticsearch_domain.my_name.endpoint来设置,但aws_elasticsearch_domain.my_name.access_policies需要aws_api_gateway_deployment.my_name.execution_arn

我猜这是相当普遍的,但我不知道如何通过输出或变量来实现这一点。

感谢您的任何帮助。

回答

0

解决此问题的一种方法是创建一个route53端点,用于弹性搜索,并通过打破循环依赖关系对API网关中弹性搜索的route53端点进行硬编码。

+0

感谢Monil。这可能会起作用,但我遇到了一个不同的问题,因为AWS不会让您有一个安全策略,允许您的API网关直接与Elastic Search进行对话而无需向世界开放。他们的解决方案是代理它或者在中间使用Lambda,这两者都不是理想的,但在AWS允许进行直接安全通信之前我没有太多的工作要做。 – earthtrip

+0

啊是的。我也不喜欢这个要求。但是,使用Lambda可以将您的资源置于VPC之后,并且只需将lambda与VPC交谈即可。这是链接,如果它有帮助 https://aws.amazon.com/blogs/compute/using-api-gateway-with-vpc-endpoints-via-aws-lambda/ –

+0

感谢Monil。我现在在中间有一个Lambda,我只是希望我不必这样做,因为它在大多数呼叫中添加了足够多的延迟> 100ms,因为它们没有做任何其他事情,因此我可以绕过AWS中奇怪的安全限制。但现在它必须要做,我希望亚马逊能够为未来增加与DynamoDB等产品相同的安全模型,以便我可以直接返回到API网关 - > ElasticSearch。不过谢谢你! – earthtrip