AWS Fargate为环境变量添加参数

时间:2018-08-02 14:08:47

标签: amazon-web-services amazon-cloudformation amazon-ecs

我正在尝试自动化我们的Fargate实例的Cloudformation部署。如果我很难环境变量条目,但是我成功部署了cloudformation,但是如果我尝试添加为参数,请键入string,它会抱怨它不是字符串。

这是参数

“ EnvVariables”:{   “ Description”:“所有要运行的Docker环境变量”,   “类型”:“字符串”  }

在我的任务定义中,我对容器定义进行了以下设置

     "Environment": [
      {
        "Name": "JAVA_OPTS",
        "Value": "-Djdbc.url=jdbc:dbdriver://xxxx.eu-west-1.rds.amazonaws.com:xxxx/xxxxxxxxx -Djdbc.user=xxxxx -Djdbc.password=xxxxx" 
      }
    ]

如果我通过gui在参数字段中输入以下内容

"-Djdbc.url=jdbc:dbdriver://xxxx.eu-west-1.rds.amazonaws.com:xxxx/xxxxxxxxx -Djdbc.user=xxxxx -Djdbc.password=xxxxx"

它抱怨它不是字符串。

我如何编辑它作​​为参数接受?

3 个答案:

答案 0 :(得分:3)

使用任务定义(门户或JSON),您可以在"secrets"部分中定义"containerDefinitions",该部分将从机密管理器中检索。

注意:在撰写本文时,Fargate仅支持作为单个值的机密,不支持JSON或键值机密。因此,在创建机密时选择“其他”,然后在其中放置一个文本值即可。

{ 
    "ipcMode": null,
    "executionRoleArn": "arn:aws:iam::##:role/roleName",
    "containerDefinitions": [
      {
         ...
        "secrets": [{
          "name": "SomeEnvVariable",
          "valueFrom": "arn:aws:secretsmanager:region:###:secret:service/secretname"
        }],
        ...
     }
    ],
    "requiresCompatibilities": [
      "FARGATE"
    ],
    "networkMode": "awsvpc",
    ...
}

注意:任务中定义的执行角色需要附加诸如SecretsManagerReadWrite

之类的策略。

More info in docs

答案 1 :(得分:0)

我认为您不能注入动态环境变量。即使有可能,也请避免以明文形式输入密码。

我所做的是将值存储在安全的SSM参数中。然后,Java代码可以获取值并进行相应的初始化。

答案 2 :(得分:0)

我通过使用Jinja2 Python模板脚本解决了这个问题,并使用

插入了env变量
"Environment": [
    {% for environment in td.envVariables %}
    {
      "Name": "{{environment.name}}",
      "Value": "{{environment.value}}"
    },
    {% endfor %}

然后启用了一组env变量被应用。该脚本不能直接用作cloudformation脚本,而需要包含在另一个shell / python脚本中。