Utilizando o System Manager para armazenar variáveis de ambiente dos seus Containers na AWS

O Parameter Store é um recurso do AWS Systems Manager, serviço da AWS que nos oferece armazenamento tanto de texto simples, quanto de dados secretos, como senhas e chaves privadas. Com isso, podemos transformar variáveis de ambiente do seu projeto em dados armazenados em um ambiente mais controlado, que se comunica com outros serviços, com controle de acesso de usuários, e se preferir, criptografado. Com o Parameter Store você consegue organizar suas variáveis de ambientes de forma hierárquica, baseada nos seus stages e tags.

Nota: Se você utiliza o Terraform como ferramenta para gerenciamento da sua infraestrutura, a documentação mostra como criar este recurso.

Criando seu Parâmetro

Criando parametro

Ao clicar em "Create Parameter", você deve ser redirecionado para listagem e ver o seu parâmetro criado.

Lista de parametros

Capturando parâmetros

Para utilizar variáveis armazenadas dentro do SSM Parameter Store, você pode utilizar o SDK da AWS na linguagem de sua preferência.

const ssm = new AWS.SSM()
ssm.getParametersByPath(params, (err, data) => {
  if (!err) {
    return data  
  }

  console.error(err)
  return
})

Para este exemplo, estamos utilizando NodeJS. Veja a lista de ferramentas e SDKs da AWS neste link.

Integrando com o ECS

Além de conectar diretamente com a sua aplicação utilizando o Software Development Kit (SDK), você também pode capturar parâmetros dentro de outros serviços da AWS como o Elastic Container Service ou ECS.

Comumente, você deve utilizar variáveis de ambiente de texto simples dentro da sua Task Definition. A única coisa que muda é que no lugar de usar algo como

...
"environment": [
  {
    "name": "DATABASE_USERNAME",
    "value": "main_user"
  }
]
...

A sua Task Definition vai ser algo mais parecido com isto:

{
  ...
  "executionRoleArn": "",
  "containerDefinitions": [
    {
      "name": "",
      "image": "",
      ...
      "environment": [
        {
          "name": "DATABASE_USERNAME",
          "valueFrom": "/stg/database-user"
        }
      ],
      "secrets": [
        {
          "name": "DATABASE_PASS",
          "valueFrom": "/stg/database-password"
        }
      ],
      ...
    }
  ]
  ...
}

Lembre-se de que sua executionRoleArn deve ser configurado para permitir a comunicação entre o ECS e o SSM. Veja na documentação oficial da AWS como criar tal Role.

Pronto, agora você poderá capturar suas variáveis do Parameter Store como variáveis de ambiente na sua aplicação, sem necessidade de utilizar o SDK.

Referências: 1, 2, 3.