Terraform module to create a SecretManager secret and generate secrets definition to be injected in the ECS Container definition.
This module uses the recommended way of passing sensitive data from SecretManager to ECS Task without hardcoding any sensitive values in the ECS Container definition.
module "secrets" {
source = "exlabs/ecs-secrets-manager/aws"
# We recommend pinning every module to a specific version
version = "1.1.0"
name = "data-pipeline-secrets"
ecs_task_execution_roles = [
"ecs-task-execution-role1",
"ecs-task-execution-role2"
]
key_names = [
"STRIPE_PUBLIC_KEY",
"STRIPE_SECRET_KEY",
"STRIPE_WEBHOOK_SECRET"
]
}
resource "aws_ecs_task_definition" "data_pipeline" {
#...
container_definitions = jsonencode([
{
secrets = module.secrets.ecs_secrets,
#...
}
])
}
module "secrets" {
source = "exlabs/ecs-secrets-manager/aws"
# We recommend pinning every module to a specific version
version = "1.1.0"
name = "data-pipeline-secrets"
enable_secret_assigned_to_single_key = true
ecs_task_execution_roles = [
"ecs-task-execution-role1",
"ecs-task-execution-role2"
]
# You can define your own key or leave it default then the key name is built based on the secret name
key_names = [
"YOUR_OWN_KEY"
]
}
resource "aws_ecs_task_definition" "data_pipeline" {
#...
container_definitions = jsonencode([
{
secrets = module.secrets.ecs_secrets,
#...
}
])
}
After terraform apply
you have to go to the AWS Console SecretsManager dashboard, select created secret and set values by creating a key-value pair for each defined key name.
Name | Version |
---|---|
terraform | >= 0.13.0 |
aws | >= 3.30.0 |
random | >= 3.5.0 |
Name | Version |
---|---|
aws | >= 3.30.0 |
random | >= 3.5.0 |
No modules.
Name | Type |
---|---|
aws_iam_policy.this | resource |
random_id.policy_suffix | resource |
aws_iam_role_policy_attachment.this | resource |
aws_secretsmanager_secret.this | resource |
Name | Description | Type | Default | Required |
---|---|---|---|---|
ecs_task_execution_roles | ECS task execution role names | list(string) |
[] |
yes |
key_names | Secret names that will be injected as env variables | list(string) |
[] |
yes |
name | AWS SecretsManager secret name | string |
n/a | yes |
description | AWS SecretsManager secret description | string |
n/a | no |
enable_secret_assigned_to_single_key | Enables returning the whole secret as a single key-value pair | string |
false |
no |
Name | Description |
---|---|
ecs_secrets | Secrets description to be injected in the ECS Container definition. |
secretsmanager_secret_arn | AWS SecretsManager secret ARN |