maak je een SNS topic op AWS met Terraform

In dit artikel zullen we een SNS onderwerp aanmaken met een toegangsbeleid dat onze eigen account toestaat alle SNS acties op het onderwerp uit te voeren. We zullen deze activiteit uitvoeren met behulp van Terraform. Voor we verder gaan met het artikel, wordt verondersteld dat je een basiskennis hebt van SNS en Terraform. Je kunt ookhier mijn artikel bekijken als je wilt leren hoe je een SNS onderwerp maakt met Cloudformation.

Klikhier om alle argumenten en parameters te zien die beschikbaar zijn voor SNS in Terraform. Je kunt ze dan gebruiken om het SNS aan te passen.

Vereiste voorkennis

  1. Basiskennis van Terraform.
  2. Terraform geïnstalleerd op je systeem.
  3. AWS Account(aanmaken als je er geen hebt).
  4. ‘access_key’ & ‘secret_key’ van een AWS IAM Gebruiker met voldoende permissies om SNS onderwerpen te maken. (Klikhier om te leren hoe je een IAM gebruiker met ‘access_key’ & ‘secret_key’ op AWS kunt aanmaken, )

Wat we zullen doen

  1. Schrijf Terraform configuratiebestanden voor SNS Topic.
  2. Maak een SNS Topic met behulp van de Terraform configuratiebestanden.
  3. Verwijder het aangemaakte SNS Topic met behulp van Terraform.

Schrijf Terraform configuratiebestanden voor SNS Topic

De eerste stap is het maken van een bestand met de naam“main.tf” dat de resource definitie zal bevatten. We zullen een SNS topic aanmaken in
“region = eu-west-3“. Je kunt dit naar eigen behoefte veranderen. Als je de acties wilt beperken, kun je de verklaring over het toegangsbeleid veranderen. Als je hier niet veel mee vertrouwd bent en gewoon aan de slag wilt, dan is het beter om niets te veranderen in de access policy statement.

Je kunt de code ook vinden op mijn Github repo op de volgende link.

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

Maak nu een nieuw bestand aan met de naam“terraform.tfvars” om je AWS IAM gebruikerstoegang en geheime sleutel in op te slaan die je al moet hebben.

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

We hebben een variabele definitie bestand“variables.tf” waarin we standaardwaarden hebben gedefinieerd voor de variabelen die in“main.tf” gebruikt worden. Je moet dit bestand maken in dezelfde directory als waar je de bovenstaande twee bestanden hebt staan. Je kunt de waarden van deze variabelen veranderen. Je moet ook je AWS account nummer toekennen aan de “account_id” variabele. Als je wilt kun je ook de naam van het aan te maken SNS onderwerp veranderen door de waarde van de “sns_name” variabele te veranderen.

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


Maak een SNS Topic met de Terraform configuratiebestanden.

Als je eenmaalmain.tf, terraform.tfvars, envariables.tf hebt, ben je klaar om een SNS Topic te maken met behulp van Terraform.

Het volgende is het eerste commando om een werkdirectory met Terraform configuratiebestanden te initialiseren.

terraform init

terravorm init

Het volgende commando is als volgt om een uitvoeringsplan te maken. Hier kun je te weten komen welke veranderingen er allemaal zullen plaatsvinden.

terraform plan

terravormingsplan

Nu ben je klaar om de veranderingen toe te passen die nodig zijn om de gewenste toestand van de configuratie te bereiken met het volgende commando. Hiermee maak je een SNS onderwerp aan in je AWS account onder de opgegeven regio.

terraform apply

terravorm toepassen

Je kunt nu naar de AWS SNS Console gaan om te bevestigen dat het onderwerp is aangemaakt.

SNS Onderwerp

Verwijder het aangemaakte SNS topic met behulp van Terraform

Als je het gemaakte SNS onderwerp niet meer nodig hebt en het wilt verwijderen, is het niet nodig naar de AWS console te gaan en het van daaruit te verwijderen. In plaats daarvan kun je het heel gemakkelijk verwijderen met het volgende commando. Het volgende commando verwijdert het SNS onderwerp nadat je de verwijdering bevestigd hebt. Deze bewerking kan niet teruggedraaid worden, dus wees voorzichtig bij het uitvoeren van een destroy bewerking op Productie servers.

terraform destroy

terravormen vernietigen

Conclusie

In dit artikel maakten we een SNS onderwerp met een daaraan gekoppeld toegangsbeleid in“region = eu-west-3“. We voerden deze activiteit uit met behulp van Terraform, ook zagen we hoe gemakkelijk het gemaakte SNS topic met behulp van Terraform met slechts één commando kan worden verwijderd.