【问题标题】:Pass elasticache node endpoint to docker container instance将 elasticache 节点端点传递给 docker 容器实例
【发布时间】:2021-11-24 03:55:47
【问题描述】:

在 AWS 中,我有一个 elasticache 集群,里面有一个 redis 节点和一个 ECS 集群。我无法弄清楚将 redis 端点 url 传递给我的 docker 容器的更好方法。

目前,在我的任务定义中,我使用名为 REDIS_ENDPOINT 的环境参数和我的值。以前效果很好。

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

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

【问题讨论】:

    标签: amazon-web-services environment-variables amazon-elasticache amazon-ecs terraform


    【解决方案1】:

    当您创建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 集群,这也将始终有效。

    【讨论】:

    • ╷ │ 错误:不支持的属性 │ │ 在 resources.tf 第 24 行,在输出“aws_elasticache_cluster_redis_address”中: │ 24: value = aws_elasticache_cluster.redis.address │ │ 这个对象没有参数,嵌套块,或名为“地址”的导出属性。 ╵
    【解决方案2】:

    您可以使用输出 {} 变量,然后在您的 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 for 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}"
    

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-28
      • 2017-11-24
      • 2021-11-15
      • 2018-01-15
      • 2018-03-28
      • 1970-01-01
      相关资源
      最近更新 更多