terraform-contour-mirror/modules/yc-s3/main.tf
2026-01-28 15:05:41 +03:00

59 lines
1.8 KiB
HCL

# Универсальный модуль для создания S3 бакетов
locals {
buckets_map = { for bucket in var.buckets : bucket.name => bucket }
}
# Создание сервисного аккаунта для каждого бакета
resource "yandex_iam_service_account" "sa" {
for_each = local.buckets_map
name = "${each.key}-sa"
description = "Service account for ${each.key} bucket"
}
# Назначение роли storage.editor сервисному аккаунту
resource "yandex_resourcemanager_folder_iam_member" "storage_editor" {
for_each = local.buckets_map
folder_id = var.folder_id
role = "storage.editor"
member = "serviceAccount:${yandex_iam_service_account.sa[each.key].id}"
}
# Создание статического ключа доступа
resource "yandex_iam_service_account_static_access_key" "sa_key" {
for_each = local.buckets_map
service_account_id = yandex_iam_service_account.sa[each.key].id
description = "Static access key for ${each.key} bucket"
}
# Создание S3 бакета
resource "yandex_storage_bucket" "this" {
for_each = local.buckets_map
bucket = each.key
acl = each.value.acl
# Версионирование объектов
dynamic "versioning" {
for_each = try(each.value.versioning.enabled, false) ? [1] : []
content {
enabled = true
}
}
# Настройка CORS
dynamic "cors_rule" {
for_each = try(each.value.cors.enabled, false) ? [1] : []
content {
allowed_headers = try(each.value.cors.allowed_headers, [])
allowed_methods = try(each.value.cors.allowed_methods, [])
allowed_origins = try(each.value.cors.allowed_origins, [])
expose_headers = try(each.value.cors.expose_headers, [])
max_age_seconds = try(each.value.cors.max_age_seconds, 3600)
}
}
}