#amazon-web-services #terraform #amazon-rds
#amazon-web-services #terraform #amazon-rds
Вопрос:
Я пытаюсь создать новый экземпляр AWS RDS через Terraform, но получаю странную ошибку, как показано в приведенном ниже фрагменте:
resource "aws_db_subnet_group" "sng_marketplace_stg" {
name = "sng-marketplace-stg"
tags = { Name = "Marketplace Staging" }
subnet_ids = [
"${aws_subnet.sbn_1_us.id}",
"${aws_subnet.sbn_2_us.id}"
]
}
resource "aws_db_instance" "marketplace_staging" {
identifier = "db-marketplace-stg-staging"
engine = "postgres"
engine_version = "12.4"
# ...
# omitted
# ...
db_subnet_group_name = "${aws_db_subnet_group.sng_marketplace_stg.id}"
}
-
- 1-я группа создает группу подсети с именем
sng-marketplace-stg
этот шаг в порядке, и TF может применяться.
- 1-я группа создает группу подсети с именем
-
- На 2-м шаге возникает ошибка a
Error creating DB Instance: DBSubnetGroupNotFoundFault: DBSubnetGroup 'sng-marketplace-stg' not found.
- На 2-м шаге возникает ошибка a
Что ж, когда я получаю доступ к AWS Console RDS, группа подсети была создана, как и ожидалось, но если я повторно запускаю TF apply (или планирую), terraform покажет правильное изменение (создать новый экземпляр RDS), но при применении ошибка возникает снова, например, если группа подсети не существует.
Кто-нибудь видел эту ошибку раньше или какие-либо предложения по ее исправлению?
Спасибо 4 за любую помощь или направление к решению.
Полная трассировка ошибок здесь:
Error: Error applying plan:
1 error occurred:
* aws_db_instance.marketplace_staging: 1 error occurred:
* aws_db_instance.marketplace_staging: Error creating DB Instance: DBSubnetGroupNotFoundFault: DBSubnetGroup 'sng-marketplace-stg' not found.
status code: 404, request id: da567898-...
Комментарии:
1. Предоставленный вами код верен. Я не вижу причины, по которой это не сработало бы. Вы уверены, что приведенные вами фрагменты являются репрезентативными для вашего фактического кода?
2. Да, код правильный, но по какой-то причине (я не знаю) AWS <> Terraform не распознает ресурс.
Ответ №1:
У меня была такая же проблема с моим кодом, и я понял, что вам нужно добавить ресурс aws_db_parameter_group
в свой main.tf досье.
Вот пример, извлеченный с официального сайта terraform
resource "aws_db_parameter_group" "education" {
name = "education"
family = "postgres13"
parameter {
name = "log_connections"
value = "1"
}
}
Затем я запускаю terraform plan
terraform apply
и все работает нормально (убедитесь, что ваша роль IAM имеет все необходимые разрешения, вы можете добавить их, когда в консоли terraform появятся сообщения об ошибках, связанные с разрешениями).
Удачи!
Ответ №2:
Необходимо создать группу параметров БД.
resource "aws_db_parameter_group" "education" {
name = "education"
family = "postgres13"
parameter {
name = "log_connections"
value = "1"
}
}
Также вы должны ссылаться на него при создании экземпляра db.
В вашем случае.
resource "aws_db_instance" "marketplace_staging" {
identifier = "db-marketplace-stg-staging"
engine = "postgres"
engine_version = "12.4"
# ...
# omitted
# ...
db_subnet_group_name = "${aws_db_subnet_group.sng_marketplace_stg.id}"
parameter_group_name = aws_db_parameter_group.education.name
}
Еще больше, если вы хотите разрешить трафик. Добавьте группу безопасности со ссылкой на ваш идентификатор vpc.
resource "aws_security_group" "rds" {
name = "education_rds"
vpc_id = module.vpc.vpc_id
ingress {
from_port = 5432
to_port = 5432
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 5432
to_port = 5432
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "education_rds"
}
}
а также ссылайтесь на это при создании вашей базы данных. В вашем случае.
resource "aws_db_instance" "marketplace_staging" {
identifier = "db-marketplace-stg-staging"
engine = "postgres"
engine_version = "12.4"
# ...
# omitted
# ...
db_subnet_group_name = "${aws_db_subnet_group.sng_marketplace_stg.id}"
parameter_group_name = aws_db_parameter_group.education.name
vpc_security_group_ids = [aws_security_group.rds.id]
}
Ссылка: https://github.com/hashicorp/learn-terraform-rds/blob/main/main.tf