Comment créer un sujet SNS sur AWS en utilisant Terraform

Dans cet article, nous allons créer un sujet SNS avec une politique d’accès qui permettra à notre propre compte d’effectuer toutes les actions SNS sur le sujet. Nous réaliserons cette activité à l’aide de Terraform. Avant de poursuivre l’article, nous supposons que tu as des connaissances de base sur SNS et Terraform. Tu peux aussi consulter mon articleici si tu veux apprendre à créer un sujet SNS à l’aide de Cloudformation.

Cliqueici pour voir tous les arguments et paramètres disponibles pour SNS dans Terraform. Tu peux ensuite les utiliser pour personnaliser le SNS.

Pré-requis

  1. Compréhension de base de Terraform.
  2. Terraform installé sur ton système.
  3. Compte AWS (crée-le si tu n’en as pas).
  4. Access_key’ & ‘secret_key’ d’un utilisateur AWS IAM avec des autorisations suffisantes pour créer des sujets SNS. (Cliqueici pour apprendre à créer un utilisateur IAM avec ‘access_key’ et ‘secret_key’ sur AWS).

Ce que nous allons faire

  1. Écrire les fichiers de configuration Terraform pour le sujet SNS.
  2. Créer un SNS Topic à l’aide des fichiers de configuration Terraform.
  3. Supprimer le Topic SNS créé à l’aide de Terraform.

Écrire les fichiers de configuration Terraform pour SNS Topic

La première étape consiste à créer un fichier nommé« main.tf » qui contiendra la définition des ressources. Nous allons créer un sujet SNS dans
« region = eu-west-3« . Tu peux modifier ce paramètre en fonction de tes besoins. Si tu veux limiter les actions, tu peux modifier la déclaration de politique d’accès. Si tu n’es pas très au courant et que tu veux juste commencer, il est préférable de ne rien changer à la déclaration de politique d’accès.

Tu peux trouver le code sur mon repo Github également sur le lien suivant.

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"
  }
}

Maintenant, crée un nouveau fichier nommé« terraform.tfvars » pour stocker ton accès d’utilisateur AWS IAM et la clé secrète que tu dois déjà avoir.

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>"

Nous avons un fichier de définition de variables« variables.tf » dans lequel nous avons défini des valeurs par défaut pour les variables utilisées dans« main.tf« . Tu dois créer ce fichier dans le même répertoire que celui où se trouvent les deux fichiers ci-dessus. Tu peux modifier les valeurs de ces variables. Tu dois également attribuer ton numéro de compte AWS à la variable « account_id ». Si tu veux, tu peux aussi changer le nom du sujet SNS à créer en modifiant la valeur 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>"
}


Crée un sujet SNS à l’aide des fichiers de configuration Terraform.

Une fois que tu asmain.tf, terraform.tfvars etvariables.tf, tu es prêt à créer un sujet SNS à l’aide de Terraform.

La commande suivante est la première à initialiser un répertoire de travail contenant les fichiers de configuration Terraform.

terraform init

La terraforme est en place

La commande suivante est la suivante pour créer un plan d’exécution. Ici, tu peux prendre connaissance de tous les changements qui auront lieu.

terraform plan

plan de terraformation

Tu es maintenant prêt à appliquer les changements nécessaires pour atteindre l’état souhaité de la configuration en utilisant la commande suivante. Cela créera un sujet SNS dans ton compte AWS sous la région spécifiée.

terraform apply

appliquer la terraforme

Tu peux maintenant te rendre dans la console SNS d’AWS pour confirmer que le sujet a été créé.

Sujet SNS

Supprime le sujet SNS créé à l’aide de Terraform

Lorsque tu n’as plus besoin du sujet SNS que tu as créé et que tu veux le supprimer, il n’est pas nécessaire d’aller dans la console AWS et de le supprimer de là. Au lieu de cela, tu peux le supprimer très facilement à l’aide de la commande suivante. La commande suivante supprimera le sujet SNS après que tu aies confirmé la suppression. Cette opération ne peut pas être annulée, alors fais attention lorsque tu effectues une opération de destruction sur des serveurs de production.

terraform destroy

terraformer détruire

Conclusion

Dans cet article, nous avons créé un sujet SNS avec une politique d’accès qui lui est attachée dans« region = eu-west-3« . Nous avons réalisé cette activité à l’aide de Terraform, et nous avons également vu avec quelle facilité le sujet SNS que nous avons créé peut être supprimé à l’aide de Terraform en une seule commande.

Vous aimerez aussi...