#terraform #terraform-provider-aws
#terraform #terraform-provider-aws
Вопрос:
# TF Module to declare S3
resource "aws_kms_key" "lake_s3bucket_key" {
description = "This key is used to encrypt bucket objects"
deletion_window_in_days = 30
}
resource "aws_s3_bucket" "log_bucket" {
bucket = "test-log-bucket"
acl = "log-delivery-write"
}
# Data Lake bucket
resource "aws_s3_bucket" "lake_s3bucket" {
bucket = "ingestraw"
acl = "private"
tags = {
Name = "s3bucket"
Environment = "prod"
}
versioning {
enabled = false
}
logging {
target_bucket = aws_s3_bucket.log_bucket.id
target_prefix = "log/"
}
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = aws_kms_key.lake_s3bucket_key.arn
sse_algorithm = "aws:kms"
}
}
}
}
# S3 bucket-level Public Access Block configuration
resource "aws_s3_bucket_public_access_block" "lake_s3bucket" {
bucket = aws_s3_bucket.ingestraw.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
Терраформирование при выполнении «плана терраформирования» выдает ошибку ниже:
Ошибка: Ссылка на необъявленный ресурс
на main_s3.tf строка 45, в ресурсе «aws_s3_bucket_public_access_block» «lake_s3bucket»: 45: bucket = aws_s3_bucket.ingestraw.id
Управляемый ресурс «aws_s3_bucket» «ingestraw» не был объявлен в корневом модуле.
Я новичок в terraform и, следовательно, не могу понять, что происходит не так, почему он жалуется на корневой модуль. Я использую Terraform 3.20.
Комментарии:
1. У вас нет вызванного ресурса
aws_s3_bucket.ingestraw
. Вместо этого этот ресурс вызываетсяaws_s3_bucket.lake_s3bucket
и определяется строкой:resource "aws_s3_bucket" "lake_s3bucket" {
2. Хорошо, спасибо, этот совет сработал. Итак, для полного понимания я должен использовать адресацию ресурсов, как указано в ссылке, вместо использования фактического имени корзины? что для меня имеет смысл( terraform.io/docs/internals/resource-addressing.html )
3. Да. Terraform всегда ссылается на ресурсы с помощью необязательных имен модулей (потенциально вложенных), типа ресурса, а затем имени ресурса.