Sets up a basic AWS CodeDeploy deployment group with EC2 tag filters and SNS notifications for deployment failures.

Terraform Template

data "aws_iam_policy_document" "assume_role" {

  statement {
    actions = ["sts:AssumeRole"]
    effect = "Allow"

    principals {
      identifiers = ["codedeploy.amazonaws.com"]
      type = "Service"
    }
  }
}

resource "aws_codedeploy_app" "example" {
  name = "example-app"
}

resource "aws_codedeploy_deployment_group" "example" {

  alarm_configuration {
    alarms = ["my-alarm-name"]
    enabled = true
  }
  app_name = aws_codedeploy_app.example.name

  auto_rollback_configuration {
    enabled = true
    events = ["DEPLOYMENT_FAILURE"]
  }
  deployment_group_name = "example-group"
  outdated_instances_strategy = "UPDATE"
  service_role_arn = aws_iam_role.example.arn

  trigger_configuration {
    trigger_events = ["DeploymentFailure"]
    trigger_name = "example-trigger"
    trigger_target_arn = aws_sns_topic.example.arn
  }
}

resource "aws_iam_role" "example" {
  assume_role_policy = data.aws_iam_policy_document.assume_role.json
  name = "example-role"
}

resource "aws_iam_role_policy_attachment" "AWSCodeDeployRole" {
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole"
  role = aws_iam_role.example.name
}

resource "aws_sns_topic" "example" {
  name = "example-topic"
}