Поиск по сайту:

Как создать тему SNS на AWS с помощью Terraform


На этой странице

  1. Предварительные условия
  2. Что мы будем делать
  3. Написание файлов конфигурации Terraform для SNS Тема
  4. Создайте тему SNS с помощью файлов конфигурации Terraform.
  5. Удалите созданную тему SNS с помощью Terraform.
  6. Заключение

В этой статье мы создадим тему SNS с политикой доступа, которая позволит нашей собственной учетной записи выполнять все действия SNS в этой теме. Мы выполним это действие с помощью Terraform. Прежде чем мы приступим к статье, предполагается, что у вас есть базовые представления о SNS и Terraform. Вы также можете прочитать мою статью здесь, если хотите научиться создавать тему SNS с помощью Cloudformation.

Нажмите здесь, чтобы просмотреть все аргументы и параметры, доступные для SNS в Terraform. Затем вы можете использовать их для настройки SNS.

Предпосылки

  1. Основное понимание Terraform.
  2. Terraform установлен в вашей системе.
  3. Аккаунт AWS (создайте, если у вас его нет).
  4. access_key и secret_key пользователя AWS IAM с достаточными разрешениями для создания тем SNS. (Нажмите здесь, чтобы узнать, как создать пользователя IAM с access_key и secret_key в AWS, )

Что мы будем делать

  1. Запишите файлы конфигурации Terraform для SNS Topic.
  2. Создайте тему SNS с помощью файлов конфигурации Terraform.
  3. Удалите созданную тему SNS с помощью Terraform.

Создание файлов конфигурации Terraform для SNS Тема

Первый шаг — создать файл с именем \main.tf\, который будет содержать определение ресурса. Мы создадим тему SNS в 
\region=eu-west-3\. Вы можете изменить это согласно вашему требованию. Если вы хотите ограничить действия, вы можете изменить заявление о политике доступа. Если вы мало знакомы с этим и просто хотите начать, то лучше ничего не менять в заявлении о политике доступа.

Вы также можете найти код в моем репозитории Github по следующей ссылке.

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

Теперь создайте новый файл с именем \terraform.tfvars\ для хранения вашего доступа пользователя AWS IAM и секретного ключа, который у вас уже должен быть.

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

У нас есть файл определения переменных \variables.tf\, где мы определили значения по умолчанию для переменных, используемых в \main.tf\. Вам нужно создать этот файл в том же каталоге, где у вас есть два вышеуказанных файла. Вы можете изменить значения этих переменных. Вам также необходимо присвоить номер вашей учетной записи AWS переменной \account_id\. Если вы хотите, вы также можете изменить имя создаваемой темы SNS, изменив значение переменной \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>"
}


Создайте тему SNS, используя файлы конфигурации Terraform.

Когда у вас есть main.tf, terraform.tfvars и variables.tf, вы готовы создать тему SNS с помощью Terraform.

Ниже приведена первая команда для инициализации рабочего каталога, содержащего файлы конфигурации Terraform.

terraform init

Следующая команда предназначена для создания плана выполнения. Здесь вы можете узнать, какие все изменения произойдут.

terraform plan

Теперь вы готовы применить изменения, необходимые для достижения желаемого состояния конфигурации, с помощью следующей команды. Это создаст тему SNS в вашем аккаунте AWS в указанном регионе.

terraform apply

Теперь вы можете перейти в консоль AWS SNS, чтобы убедиться, что тема создана.

Удалите созданную тему SNS с помощью Terraform.

Когда вам больше не нужна созданная вами тема SNS и что ее удалить, нет необходимости заходить в консоль AWS и удалять ее оттуда. Вместо этого вы можете очень легко удалить его с помощью следующей команды. Следующая команда удалит тему SNS после того, как вы подтвердите удаление. Эту операцию нельзя отменить, поэтому будьте осторожны при выполнении операции уничтожения на рабочих серверах.

terraform destroy

Заключение

В этой статье мы создали тему SNS с прикрепленной к ней политикой доступа в \region=eu-west-3\. Мы выполнили это действие с помощью Terraform, а также увидели, как легко созданную нами тему SNS можно удалить с помощью Terraform всего одной командой.