Cómo crear un tema SNS en AWS utilizando Terraform

En este artículo, crearemos un tema SNS con una política de acceso que permitirá a nuestra propia cuenta realizar todas las acciones SNS en el tema. Realizaremos esta actividad utilizando Terraform. Antes de continuar con el artículo, se supone que tienes conocimientos básicos de SNS y Terraform. También puedes consultar mi artículo aquí si quieres aprender a crear un tema SNS utilizando Cloudformation.

Haz clic aquí para ver todos los argumentos y parámetros disponibles para SNS en Terraform. Puedes utilizarlos para personalizar el SNS.

Requisitos previos

  1. Conocimientos básicos de Terraform.
  2. Terraform instalado en tu sistema.
  3. Cuenta de AWS(Créala si no tienes una).
  4. ‘access_key’ & ‘secret_key’ de un Usuario IAM de AWS con permisos suficientes para crear temas SNS. (Haz clic aquí para aprender a crear un usuario IAM con ‘access_key’ & ‘secret_key’ en AWS, )

Qué haremos

  1. Escribir archivos de configuración Terraform para SNS Topic.
  2. Crear un SNS Topic utilizando los archivos de configuración de Terraform.
  3. Eliminar el SNS Topic creado utilizando Terraform.

Escribir archivos de configuración Terraform para SNS Topic

El primer paso es crear un archivo llamado«main.tf» que contendrá la definición de recursos. Crearemos un tema SNS en
«region = eu-west-3«. Puedes cambiarlo según tus necesidades. Si quieres limitar las acciones, puedes cambiar la declaración de política de acceso. Si no estás muy familiarizado con esto y sólo quieres empezar, entonces es mejor que no cambies nada en la declaración de política de acceso.

Puedes encontrar el código en mi repositorio de Github en el siguiente enlace.

Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-sns-topic/main.tf
File: main.tf
provider "aws" {
    access_key = "${var.access_key}"
    secret_key = "${var.secret_key}"
    region = "eu-west-3"
}

resource "aws_sns_topic" "my_first_sns_topic" {
  name = var.sns_name
}

resource "aws_sns_topic_policy" "my_sns_topic_policy" {
  arn = aws_sns_topic.my_first_sns_topic.arn
  policy = data.aws_iam_policy_document.my_custom_sns_policy_document.json
}

data "aws_iam_policy_document" "my_custom_sns_policy_document" {
  policy_id = "__default_policy_ID"

  statement {
    actions = [
      "SNS:Subscribe",
      "SNS:SetTopicAttributes",
      "SNS:RemovePermission",
      "SNS:Receive",
      "SNS:Publish",
      "SNS:ListSubscriptionsByTopic",
      "SNS:GetTopicAttributes",
      "SNS:DeleteTopic",
      "SNS:AddPermission",
    ]

    condition {
      test     = "StringEquals"
      variable = "AWS:SourceOwner"

      values = [
        var.account_id,
      ]
    }

    effect = "Allow"

    principals {
      type        = "AWS"
      identifiers = ["*"]
    }

    resources = [
      aws_sns_topic.my_first_sns_topic.arn,
    ]

    sid = "__default_statement_ID"
  }
}

Ahora, crea un nuevo archivo llamado«terraform.tfvars» para almacenar tu acceso de usuario AWS IAM y la clave secreta que ya debes tener.

Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-sns-topic/terraform.tfvars
File: terraform.tfvars
access_key = "<your-aws-access-here>"
secret_key = "<your-aws-secret-here>"

Tenemos un archivo de definición de variables«variables.tf» donde hemos definido valores por defecto para las variables utilizadas en«main.tf«. Tienes que crear este archivo en el mismo directorio donde tienes los dos archivos anteriores. Puedes cambiar los valores de estas variables. También tienes que asignar tu número de cuenta AWS a la variable «account_id». Si quieres, también puedes cambiar el nombre del tema SNS que se va a crear cambiando el valor de la variable «sns_name».

Github Link: https://github.com/shivalkarrahul/DevOps/blob/master/aws/terraform/create-sns-topic/variables.tf
File: variables.tf
variable "access_key" {
        description = "Access key of AWS IAM user"
}
variable "secret_key" {
        description = "Secret key of AWS IAM user"
}


variable "sns_name" {
        description = "Name of the SNS Topic to be created"
        default = "my_first_sns"
}

variable "account_id" {
        description = "My Accout Number"
        default = "<you-account-number-here>"
}


Crea un Tema SNS utilizando los archivos de configuración de Terraform.

Una vez que tengas main.tf, terraform.tfvars y variables.tf estarás preparado para crear un Tema SNS utilizando Terraform.

El siguiente es el primer comando para inicializar un directorio de trabajo que contenga los archivos de configuración de Terraform.

terraform init

terraformar init

El siguiente comando es el siguiente para crear un plan de ejecución. Aquí puedes conocer todos los cambios que se producirán.

terraform plan

plan de terraformación

Ahora estás preparado para aplicar los cambios necesarios para alcanzar el estado deseado de la configuración mediante el siguiente comando. Esto creará un tema SNS en tu cuenta de AWS bajo la región especificada.

terraform apply

terraformar aplicar

Ahora puedes ir a la Consola SNS de AWS para confirmar que se ha creado el tema.

Tema SNS

Eliminar el tema SNS creado utilizando Terraform

Cuando ya no necesites el tema SNS que has creado y quieras eliminarlo, no hace falta que vayas a la consola de AWS y lo elimines desde allí. En su lugar, puedes eliminarlo utilizando el siguiente comando muy fácilmente. El siguiente comando eliminará el tema SNS después de que confirmes la eliminación. Esta operación no se puede revertir, así que ten cuidado al realizar una operación de destrucción en servidores de Producción.

terraform destroy

terraform destroy

Conclusión

En este artículo hemos creado un tema SNS con una política de acceso asociada en«region = eu-west-3«. Llevamos a cabo esta actividad utilizando Terraform, también vimos lo fácil que es eliminar el tema SNS que creamos utilizando Terraform en un solo comando.

Scroll al inicio