So erstellen Sie ein SNS-Topic auf AWS mit Terraform

In diesem Artikel werden wir ein SNS-Thema mit einer Zugriffsrichtlinie erstellen, die es unserem eigenen Konto erlaubt, alle SNS-Aktionen auf dem Thema durchzuführen. Wir werden diese Aktivität mit Terraform durchführen. Bevor wir mit dem Artikel fortfahren, wird vorausgesetzt, dass Sie ein grundlegendes Verständnis von SNS und Terraform haben. Sie können auch meinen Artikel hier lesen, wenn Sie lernen wollen, wie man ein SNS-Topic mit Cloudformation erstellt.

Klicken Sie hier, um alle Argumente und Parameter zu sehen, die für SNS in Terraform verfügbar sind. Sie können diese dann verwenden, um das SNS anzupassen.

Vorraussetzungen

  1. Grundlegendes Verständnis von Terraform.
  2. Terraform ist auf Ihrem System installiert.
  3. AWS-Konto (Erstellen Sie es, wenn Sie noch keines haben).
  4. ‚access_key‘ & ’secret_key‘ eines AWS IAM Users mit ausreichenden Rechten, um SNS Themen zu erstellen. (Klicken Sie hier, um zu erfahren, wie Sie einen IAM-Benutzer mit ‚access_key‘ & ’secret_key‘ auf AWS erstellen, )

Was wir tun werden

  1. Schreiben Sie Terraform-Konfigurationsdateien für SNS Topic.
  2. Erstellen Sie ein SNS Topic mit Hilfe der Terraform Konfigurationsdateien.
  3. Löschen Sie das erstellte SNS Topic mit Hilfe von Terraform.

Schreiben von Terraform-Konfigurationsdateien für SNS Topic

Der erste Schritt besteht darin, eine Datei namens „main.tf“ zu erstellen, die die Ressourcendefinition enthalten wird. Wir werden ein SNS Topic in
region = eu-west-3″ erstellen. Sie können dies entsprechend Ihren Anforderungen ändern. Wenn Sie die Aktionen einschränken möchten, können Sie die Zugriffsrichtlinienanweisung ändern. Wenn Sie sich nicht sehr gut damit auskennen und einfach loslegen wollen, ist es besser, nichts an der Zugriffsrichtlinie zu ändern.

Sie finden den Code auch in meinem Github Repo unter dem folgenden 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"
  }
}

Legen Sie nun eine neue Datei mit dem Namen„terraform.tfvars“ an, um Ihren AWS IAM-Benutzerzugang und den geheimen Schlüssel zu speichern, den Sie bereits haben müssen.

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

Wir haben eine Variablendefinitionsdatei„variables.tf„, in der wir Standardwerte für die in„main.tf“ verwendeten Variablen definiert haben. Sie müssen diese Datei in demselben Verzeichnis erstellen, in dem Sie die beiden oben genannten Dateien haben. Sie können die Werte für diese Variablen ändern. Außerdem müssen Sie der Variable „account_id“ Ihre AWS-Kontonummer zuweisen. Wenn Sie möchten, können Sie auch den Namen des zu erstellenden SNS-Topics ändern, indem Sie den Wert der Variable „sns_name“ ändern.

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


Erstellen Sie ein SNS-Topic mit Hilfe der Terraform-Konfigurationsdateien.

Sobald Sie main.tf, terraform.tfvars und variables.tf haben,sind Sie bereit, ein SNS-Topic mit Terraform zu erstellen.

Mit dem folgenden Befehl wird zunächst ein Arbeitsverzeichnis initialisiert, das Terraform-Konfigurationsdateien enthält.

terraform init

Terraform-Init

Der nächste Befehl ist wie folgt, um einen Ausführungsplan zu erstellen. Hier erfahren Sie, welche Änderungen vorgenommen werden.

terraform plan

Terraformplan

Nun können Sie mit dem folgenden Befehl die Änderungen vornehmen, um den gewünschten Zustand der Konfiguration zu erreichen. Dadurch wird ein SNS-Thema in Ihrem AWS-Konto unter der angegebenen Region erstellt.

terraform apply

terraform anwenden

Sie können nun in die AWS SNS Console gehen, um zu bestätigen, dass das Topic erstellt wurde.

SNS Thema

Löschen Sie das erstellte SNS-Topic mit Terraform

Wenn Sie das erstellte SNS-Topic nicht mehr benötigen und es löschen möchten, müssen Sie nicht zur AWS-Konsole gehen und es von dort aus löschen. Stattdessen können Sie es ganz einfach mit dem folgenden Befehl löschen. Der folgende Befehl löscht das SNS-Topic, nachdem Sie die Löschung bestätigt haben. Dieser Vorgang kann nicht rückgängig gemacht werden, seien Sie also vorsichtig, wenn Sie einen Löschvorgang auf Produktionsservern durchführen.

terraform destroy

Terraform zerstören

Fazit

In diesem Artikel haben wir ein SNS-Topic erstellt, dem eine Zugriffsrichtlinie in „region = eu-west-3″ zugewiesen wurde. Wir haben diese Aktivität mit Terraform durchgeführt und auch gesehen, wie einfach das von uns erstellte SNS-Topic mit nur einem Befehl mit Terraform gelöscht werden kann.

Das könnte dich auch interessieren …