【问题标题】:referring Env variables for Docker container in Fargete ECS cluster在 Fargete ECS 集群中引用 Docker 容器的环境变量
【发布时间】:2020-04-08 15:09:07
【问题描述】:

在 AWS Fargete 集群中,我们有使用 RDS aurora 的 spring boot 应用程序。 他们在这里使用 AWS 秘密管理器来存储数据库密码。

在我们提供的容器定义中

Environment:
    - Name: 'spring.datasource.url'
             Value: '{{resolve:secretsmanager:Secret-Maneger-Name:SecretString:DBURL}}

Secret-string 有 URL、用户名和密码。在 DBURL 中还有 DB 连接 url。

我有以下两个查询

  1. 我应该如何在代码中使用这个环境变量来获取用户名、端点和密码?.Any 示例代码会有所帮助。
  2. 为什么还要在末尾添加“:DBURL”。

【问题讨论】:

    标签: spring-boot docker aws-fargate aws-secrets-manager


    【解决方案1】:

    您可以像使用其他环境变量一样使用这些变量,valuevaluefrom 之间的唯一区别是 value 获取静态值,而 value 的值在运行时注入容器。

    因此,如果您想从秘密管理器注入,您当前的语法似乎不正确。它应该是valueFrom,它将引用秘密的ARN

    {
      "containerDefinitions": [{
        "secrets": [{
          "name": "environment_variable_name",
          "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
        }]
      }]
    }
    

    环境变量

    您还可以指定 AWS Systems Manager Parameter Store 密钥或 使用“valueFrom”字段的 ARN。 ECS 会将值注入 运行时的容器。

    必填IAM Permissions for Amazon ECS Secrets 要使用此功能,您必须具有 Amazon ECS 任务执行角色并在您的任务定义中引用它。这允许容器代理提取必要的 AWS Systems Manager 或 Secrets Manager 资源。

    重要!

    对于使用 EC2 启动类型的任务,您必须使用 ECS 代理配置变量 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true 才能使用此功能。您可以在创建容器实例时将其添加到./etc/ecs/ecs.config 文件中,也可以将其添加到现有实例中,然后重新启动 ECS 代理。欲了解更多信息,see Amazon ECS Container Agent Configuration

    specifying-sensitive-data-task-definition

    【讨论】:

    • 看起来语法不正确,因为我们还在使用另一个环境变量 - 名称:'data.collect.apigee.transfer' 值:'transfer-dev.XXX.com/dataXXXX/dataXXXX'。这工作正常.
    • 您使用的是 ec2 还是 fargate 的哪个服务?好像你正在使用cloudformation?语法基于任务定义。
    • 我们正在使用的 ECS Fargete。我们正在使用 Cloudformation。我上面显示的环境变量是在 cloud-formation 任务定义中定义的
    猜你喜欢
    • 2016-12-28
    • 2021-06-28
    • 1970-01-01
    • 2019-06-23
    • 2019-05-02
    • 2022-01-11
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多