Ricerca nel sito web

Come creare un argomento SNS su AWS utilizzando Terraform


Su questa pagina

  1. Prerequisiti
  2. Cosa faremo
  3. Scrivi i file di configurazione Terraform per l'argomento SNS
  4. Crea un argomento SNS utilizzando i file di configurazione Terraform.
  5. Elimina l'argomento SNS creato utilizzando Terraform
  6. Conclusione

In questo articolo, creeremo un argomento SNS con un criterio di accesso che consentirà al nostro account di eseguire tutte le azioni SNS sull'argomento. Svolgeremo questa attività utilizzando Terraform. Prima di procedere con l'articolo, si presume che tu abbia una conoscenza di base di SNS e Terraform. Puoi anche controllare il mio articolo qui se vuoi imparare a creare un argomento SNS utilizzando Cloudformation.

Fai clic qui per visualizzare tutti gli argomenti e i parametri disponibili per SNS in Terraform. Puoi quindi utilizzarli per personalizzare il SNS.

Prerequisiti

  1. Comprensione di base di Terraform.
  2. Terraform installato sul tuo sistema.
  3. Account AWS (crea se non ne hai uno).
  4. access_key e secret_key di un utente AWS IAM con autorizzazioni sufficienti per creare argomenti SNS. (Fai clic qui per sapere come creare un utente IAM con access_key e secret_key su AWS, )

Cosa faremo

  1. Scrivi i file di configurazione Terraform per l'argomento SNS.
  2. Crea un argomento SNS utilizzando i file di configurazione Terraform.
  3. Elimina l'argomento SNS creato utilizzando Terraform.

Scrivi file di configurazione Terraform per l'argomento SNS

Il primo passaggio consiste nel creare un file denominato  \main.tf\ che conterrà la definizione della risorsa. Creeremo un argomento SNS in 
\region=eu-west-3\. Puoi cambiarlo secondo le tue esigenze. Se vuoi limitare le azioni, puoi modificare la dichiarazione relativa alle norme di accesso. Se non hai molta familiarità con questo e vuoi solo iniziare, allora è meglio non cambiare nulla nella dichiarazione della politica di accesso.

Puoi trovare il codice anche sul mio repository Github al seguente 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"
  }
}

Ora, crea un nuovo file denominato \terraform.tfvars\ per archiviare l'accesso utente AWS IAM e la chiave segreta che devi già disporre.

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

Abbiamo un file di definizione delle variabili \variables.tf\ in cui abbiamo definito i valori predefiniti per le variabili utilizzate in \main.tf\. Devi creare questo file nella stessa directory in cui sono presenti i due file precedenti. È possibile modificare i valori di queste variabili. Devi anche assegnare il tuo numero di account AWS alla variabile \account_id\. Se vuoi puoi anche cambiare il nome dell'argomento SNS da creare cambiando il valore della variabile \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 argomento SNS utilizzando i file di configurazione di Terraform.

Una volta che hai main.tf, terraform.tfvars e variables.tf, sei pronto per creare un argomento SNS utilizzando Terraform.

Di seguito è riportato il primo comando per inizializzare una directory di lavoro contenente i file di configurazione Terraform.

terraform init

Il comando successivo è il seguente per creare un piano di esecuzione. Qui puoi venire a sapere quali saranno tutti i cambiamenti.

terraform plan

Ora sei pronto per applicare le modifiche necessarie per raggiungere lo stato desiderato della configurazione utilizzando il seguente comando. Questo creerà un argomento SNS nel tuo account AWS nella regione specificata.

terraform apply

Ora puoi andare alla console AWS SNS per confermare che l'argomento è stato creato.

Elimina l'argomento SNS creato utilizzando Terraform

Quando non hai più bisogno dell'argomento SNS che hai creato e di cosa eliminarlo, non è necessario accedere alla console AWS ed eliminarlo da lì. Invece, puoi eliminarlo usando il seguente comando molto facilmente. Il seguente comando eliminerà l'argomento SNS dopo aver confermato l'eliminazione. Questa operazione non può essere annullata, quindi prestare attenzione durante l'esecuzione di un'operazione di distruzione sui server di produzione.

terraform destroy

Conclusione

In questo articolo, abbiamo creato un argomento SNS con una policy di accesso allegata in \region=eu-west-3\. Abbiamo svolto questa attività utilizzando Terraform, inoltre abbiamo visto con quanta facilità l'argomento SNS che abbiamo creato può essere eliminato utilizzando Terraform in un solo comando.