Terraform错误创建子网依赖性

时间:2019-12-08 21:15:37

标签: amazon-web-services terraform terraform-provider-aws

我正在尝试建立并运行documentdb群集,并使其从我创建的专用子网中运行。

在没有depends_on的情况下运行以下配置,由于未创建子网,我收到以下错误消息:

Error: error creating DocDB cluster: DBSubnetGroupNotFoundFault: DB subnet group 'subnet-0b97a3f5bf6db758f' does not exist.
status code: 404, request id: 59b75d23-50a4-42f9-99a3-367af58e6e16

添加了依赖设置来等待子网创建,但是遇到了问题。

  cluster_identifier      = "my-docdb-cluster"
  engine                  = "docdb"
  master_username         = "myusername"
  master_password         = "mypassword"
  backup_retention_period = 5
  preferred_backup_window = "07:00-09:00"
  skip_final_snapshot     = true
  apply_immediately       = true
  db_subnet_group_name    = aws_subnet.eu-west-3a-private
  depends_on = [aws_subnet.eu-west-3a-private]
}

在运行Terraform时,我在配置上遇到错误:

Error: error creating DocDB cluster: DBSubnetGroupNotFoundFault: DB subnet group 'subnet-0b97a3f5bf6db758f' does not exist.
status code: 404, request id: 8b992d86-eb7f-427e-8f69-d05cc13d5b2d

on main.tf line 230, in resource "aws_docdb_cluster" "docdb":
230: resource "aws_docdb_cluster" "docdb" 

2 个答案:

答案 0 :(得分:0)

似乎参数值错误。在其他地方创建的db_subnet_group_name给出输出ID / ARN。因此,您需要使用id值。尽管depends_on子句看起来还不错。

db_subnet_group_name    = aws_db_subnet_group.eu-west-3a-private.id

所以这是正确的/您可以尝试使用arn代替id。

谢谢

阿什什

答案 1 :(得分:0)

DB子网组本身就是一个逻辑资源,它告诉AWS可以在VPC中安排数据库实例的位置。它不是直接指的是您要在其中进行的子网。

要创建数据库子网组,应使用aws_db_subnet_group resource。然后,在创建数据库实例或集群时,可以直接通过名称引用它。

一个基本示例如下:

RUN addgroup -S -g 33 www-data \
 && adduser -S -D -u 33 -s /sbin/nologin -h /var/www -G www-data www-data \
 && chown -R www-data:www-data /var/www/

同样的情况也适用于使用Elasticache subnet groupsaws_elasticache_subnet_group resource


还值得注意的是,将resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" } resource "aws_subnet" "eu-west-3a" { vpc_id = aws_vpc.example.id availability_zone = "a" cidr_block = "10.0.1.0/24" tags = { AZ = "a" } } resource "aws_subnet" "eu-west-3b" { vpc_id = aws_vpc.example.id availability_zone = "b" cidr_block = "10.0.2.0/24" tags = { AZ = "b" } } resource "aws_db_subnet_group" "example" { name = "main" subnet_ids = [ aws_subnet.eu-west-3a.id, aws_subnet.eu-west-3b.id ] tags = { Name = "My DB subnet group" } } resource "aws_db_instance" "example" { allocated_storage = 20 storage_type = "gp2" engine = "mysql" engine_version = "5.7" instance_class = "db.t2.micro" name = "mydb" username = "foo" password = "foobarbaz" parameter_group_name = "default.mysql5.7" db_subnet_group_name = aws_db_subnet_group.example.name } 添加到已经通过插值引用了从属资源的资源没有任何作用。 depends_on元参数用于不公开仅直接提供此依赖项信息的参数的资源。