DEV Community

Asif
Asif

Posted on • Updated on

A practical method for managing environment variables in microservices running on AWS ECS

There are several methods for managing environment variables in AWS ECS microservices. To store and manage your environment variables, one common method is to use AWS Systems Manager Parameter Store. This service allows you to store sensitive information, such as database passwords, in a secure and scalable way. The parameters can then be referenced in your ECS tasks or services by using the ssm parameter provider in the ECS task definition. This allows you to easily update and manage your environment variables without having to redeploy your services or update your task definitions.

Another option is to store and manage your secrets using AWS Secrets Manager. This service allows you to store and encrypt your secrets, and then use the secretsmanager parameter provider in the task definition to reference them in your ECS tasks. This can be a convenient way to manage your secrets and automatically rotate them if necessary.

Whatever method you use, it's critical to follow best practices for security and secret management when working with environment variables in ECS. This includes encrypting your secrets at all times and using IAM policies to limit access to your secrets.

Here's an illustration:

import * as express from 'express';
import { SSM } from '@aws-sdk/client-ssm';

const app = express();

// Set up AWS Systems Manager client
const ssm = new SSM({
  region: 'us-east-1'
});

// Function to get a secret from the parameter store
async function getSecret(name: string) {
  const result = await ssm.getParameter({
    Name: name,
    WithDecryption: true
  }).promise();

  return result.Parameter.Value;
}

// Function to retrieve the database password from the parameter store
// and use it to connect to the database
async function connectToDatabase() {
  // Get the database password from the parameter store
  const password = await getSecret('/database/password');

  // Connect to the database using the password
  const db = new Prisma({
    database: 'mydb',
    user: 'myuser',
    password: password,
  });
}

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('App listening on port 3000');
});
Enter fullscreen mode Exit fullscreen mode

In this example, the getSecret function is used to retrieve a secret from the parameter store by its name. The connectToDatabase function uses the getSecret function to retrieve the database password from the parameter store, and then uses it to connect to the database.

You can use this approach to retrieve any secrets that you need for your application, and use them in whatever way is appropriate for your application.

Top comments (0)