Terraform: инфраструктура на уровне кода | страница 78



}

Сразу под стандартным ресурсом provider в верхней части файла находится новый: aws_db_instance. Он создает базу данных в RDS. Параметры в этом коде настраива­ют RDS для запуска MySQL с хранилищем размером 10 Гбайт на сервере db.t2.mi­­­cro, который имеет один виртуальный процессор, 1 Гбайт памяти и входит в бесплатный тариф AWS.

Обратите внимание, что одним из параметров, которые вы должны передать ресурсу aws_db_instance, является главный пароль к базе данных. Поскольку он конфиденциа­лен, его нельзя прописывать прямо в коде в виде обычного текста! Вместо этого можно воспользоваться одним из двух способов передачи конфиденциальных данных в ресурсы Terraform.

Первый способ для работы с конфиденциальными данными заключается в применении источника Terraform, который считывает их из секретного хранилища. Например, вы можете размещать такую информацию, как пароли к базе данных, в управляемом сервисе AWS Secrets Ma­na­ger, предназначенном специально для хранения чувствительных данных. Вы можете воспользоваться его графическим интерфейсом, чтобы сохранить свой пароль, и затем прочитать его в своем коде Terraform с помощью источника данных aws_secretsmanager_secret_version:

provider "aws" {

  region = "us-east-2"

}

resource "aws_db_instance" "example" {

  identifier_prefix = "terraform-up-and-running"

  engine            = "mysql"

  allocated_storage = 10

  instance_class    = "db.t2.micro"

  name              = "example_database"

  username          = "admin"

  password =

    data.aws_secretsmanager_secret_version.db_password.secret_string

}

data "aws_secretsmanager_secret_version" "db_password" {

  secret_id = "mysql-master-password-stage"

}

Вот несколько поддерживаемых комбинаций секретных хранилищ и источников данных, которые могут вас заинтересовать.

• AWS Secrets Manager и источник данных aws_secretsmanager_secret_version (предыдущий листинг).

• AWS Systems Manager Parameter Store и источник данных aws_ssm_parameter.

• AWS Key Management Service (AWS KMS) и источник данных aws_kms_secrets.

• Google Cloud KMS и источник данных google_kms_secret.

• Azure Key Vault и источник данных azurerm_key_vault_secret.

• HashiCorp Vault и источник данных vault_generic_secret.

Второй способ работы с конфиденциальными данными — полный вынос управления ими за пределы Terraform (например, вы можете делегировать это таким диспетчерам паролей, как 1Password, LastPass или OS X Keychain) и передача их в систему в виде переменных среды. Для этого нужно объявить переменную под названием db_password в файле stage/data-stores/mysql/variables.tf: