Terraform: инфраструктура на уровне кода | страница 78
}
Сразу под стандартным ресурсом provider в верхней части файла находится новый: aws_db_instance. Он создает базу данных в RDS. Параметры в этом коде настраивают RDS для запуска MySQL с хранилищем размером 10 Гбайт на сервере db.t2.micro, который имеет один виртуальный процессор, 1 Гбайт памяти и входит в бесплатный тариф AWS.
Обратите внимание, что одним из параметров, которые вы должны передать ресурсу aws_db_instance, является главный пароль к базе данных. Поскольку он конфиденциален, его нельзя прописывать прямо в коде в виде обычного текста! Вместо этого можно воспользоваться одним из двух способов передачи конфиденциальных данных в ресурсы Terraform.
Первый способ для работы с конфиденциальными данными заключается в применении источника Terraform, который считывает их из секретного хранилища. Например, вы можете размещать такую информацию, как пароли к базе данных, в управляемом сервисе AWS Secrets Manager, предназначенном специально для хранения чувствительных данных. Вы можете воспользоваться его графическим интерфейсом, чтобы сохранить свой пароль, и затем прочитать его в своем коде 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: