0

在AWS中,我有一个弹性缓存集群,其中包含一个Redis节点和一个ECS集群。我无法弄清楚将redis端点url传递给我的docker容器的更好方法。将弹性缓存节点端点传递给码头工具容器实例

目前,在我的任务定义中,我使用名为REDIS_ENDPOINT的环境参数与我的值。它以前运作良好。

但是我将部署过程从所有手动操作(使用AWS UI)转换为Terraform。现在,REDIS_ENDPOINT环境变量不再适用了,因为redis节点将由terraform创建(dns可能会更改),而env变量(容器定义的一部分)必须位于静态json文件中。

我读了一些文档,但我找不到这样做的正确方法。或者可能是我迷失在AWS文档中。

回答

0

当您创建Elasticache cluster using Terraform时,您可以访问一些输出变量,其中包括创建的节点的地址。

因此,您有两种选择:您可以创建一个DNS记录,将CNAME输出到您的应用程序可以静态使用的输出地址,或者您可以在应用程序可以访问的模板文件中使用输出地址。

我通常与第一个选项去,所以你可能有这样的事情:

resource "aws_elasticache_cluster" "redis" { 
    cluster_id = "redis-cluster" 
    engine = "redis" 
    node_type = "cache.t2.micro" 
    port = 6379 
    num_cache_nodes = 1 
    parameter_group_name = "default.redis2.8" 
} 

resource "aws_route53_record" "redis" { 
    zone_id = "${var.dns_zone_id}" 
    name = "redis.example.com" 
    type = "CNAME" 
    ttl = "60" 
    records = ["${aws_elasticache_cluster.redis.address}"] 
} 

然后,应用程序可以只使用redis.example.com:6379为终点使用,当你重建这个永远甚至工作您的Elasticache群集。

0

您可以使用输出{}变量,然后在您的ECS中,您可以使用remote state来检索它。

resource "aws_elasticache_cluster" "redis" { 
    cluster_id = "redis-cluster" 
    engine = "redis" 
    node_type = "cache.t2.micro" 
    port = 6379 
    num_cache_nodes = 1 
    parameter_group_name = "default.redis2.8" 
} 


output "redis_address" { 
    value = "${aws_elasticache_cluster.redis.address}" 
} 
在你的TF为ECS

然后(假设S3远程状态):

data "terraform_remote_state" "redis" { 
    backend = "s3" 
    config { 
     bucket = "com-my-bucket" 
     key = "redis/terraform.tfstate" 
     region = "us-east-1" 
    } 
} 

# address = "${data.terraform_remote_state.redis.redis_address}" 
相关问题