2017-06-07 6 views
0

AWSにSensuをデプロイするためのモジュールを作成しようとしていますが、Redisにはelasticacheを使用する予定でしたが、今はエッジケースに直面しています。私たちのVPCの中にはテナントが専用に設定されているものがあり、そこではelasticacheを使用できません(http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AmazonVPC.EC.html)。私は、条件付きでelasticacheを使用したり、ASGにredisクラスタを配置したりすることで、私は、コードを書かれており、使用しました:terraformで条件付きでリソースを作成する

count = "${replace(replace(var.vpc_instance_tenancy,"/.*dedicated.*/","0"),"/(.*default.*|^$)/","1")}" 

私はelasticaheクラスタまたはASGを作成する必要があるかどうかを判断するために、問題は、私は扇子サーバおよびAPIノードにホスト名またはIPアドレスを渡す必要があるということです

redis_host = "${coalesce(aws_elasticache_cluster.redis_cluster.cache_nodes.0.address,aws_elb.redis_lb.dns_name)}" 

のが、資源の一つは作成されません決して、私は​​3210機能でそれを参照することができないので、これは常に失敗します。彼らはRedisのに接続できることを、使用することを計画していました。何か案は?

答えて

0

私たちはスプラット変数の形式を使用している場合、私たちはこのように、inexistentリソースを参照することができるようになります、この作業を取得するために管理:

redis_host = "${element(concat(aws_elasticache_cluster.redis_cluster.*.cache_nodes.0.address, aws_elb.redis_lb.*.dns_name), 0)}" 
redis_port = "${element(concat(aws_elasticache_cluster.redis_cluster.*.cache_nodes.0.port, list(var.redis_port)), 0)}" 

ので、存在しないリソースが空のリストや他の1人の意志を返します。単一の要素リストを返すと、それらを一緒に連結して最初の要素を取得します。

関連する問題