Модуль bucket
Тип: Terraform модуль для создания Yandex Object Storage бакетов
Использование: Создает бакет с настраиваемыми параметрами доступа, CORS, website hosting, шифрованием и lifecycle правилами.
Входные переменные
Обязательные
| Переменная | Описание |
|---|---|
provider-zone | Зона Yandex Cloud (например, ru-central1-a) |
provider-token | IAM токен для доступа к Yandex Cloud |
provider-cloudid | ID облака |
provider-folderid | ID папки |
bucket-name | Имя бакета (например, my.medikt.net) |
Доступ и CORS
| Переменная | Тип | Описание |
|---|---|---|
bucket_grants | list(object) | Список прав доступа к бакету (например, AllUsers READ) |
bucket_grants = [
{
type = "Group"
permissions = ["READ"]
uri = "http://acs.amazonaws.com/groups/global/AllUsers"
}
]
| Переменная | Тип | Описание |
|---|---|---|
cors_rule | object | CORS правила для бакета |
cors_rule = {
allowed_headers = ["*"]
allowed_methods = ["PUT", "GET"]
allowed_origins = ["*"]
expose_headers = ["Etag"]
max_age_seconds = "0"
}
Настройки безопасности
| Переменная | Тип | Описание |
|---|---|---|
encrypted_bucket | bool | Включить шифрование (по умолчанию false) |
key_rotation_period | string | Период ротации ключа KMS (по умолчанию "168h" = 7 дней) |
Настройки хранилища
| Переменная | Тип | Описание |
|---|---|---|
bucket_logging_enabled | bool | Включить логирование (по умолчанию false) |
bucket_versioning_enabled | bool | Включить версионирование (по умолчанию false) |
Website hosting
| Переменная | Тип | Описание |
|---|---|---|
website | object | Настройки website hosting для бакета |
foreign_website | object | Website hosting с внешним DNS |
website = {
error_document = "index.html"
index_document = "index.html"
dns_zone_id = module.dns_zone.dns_zone_id
subdomain = "my"
certificate_id = var.certificate_id
}
Lifecycle правила
| Переменная | Тип | Описание |
|---|---|---|
abort_incomplete_multipart_upload_days | number | Удаление незавершенных multipart uploads |
expiration_rotation_period | number | Удаление объектов через X дней |
expiration_rules | list(object) | Дополнительные правила с префиксами |
user_spa_backup_rotation_period | number | Удаление бэкапов user-spa |
expiration_rules = [
{
id = "EdgeCenterSyncExpirationRule"
days = 31
prefix = "edge-center-sync/"
}
]
Выходные переменные
| Выход | Описание |
|---|---|
provider-bucket | Имя бакета |
provider-bucket-id | ID бакета |
provider-bucket-fqdn | Полное доменное имя (bucket-domain-name) |
bucket-access-key | Access key для доступа к бакету |
bucket-secret-key | Secret key для доступа к бакету |
service-account-id | ID сервисного аккаунта |
Использование в prod-infra
module "private_bucket" {
source = "../modules/bucket"
bucket-name = "private.medikt.net"
provider-zone = var.provider-zone
provider-token = var.provider-token
provider-cloudid = var.provider-cloudid
provider-folderid = var.provider-folderid
cors_rule = {
allowed_headers = ["*"]
allowed_methods = ["PUT", "GET"]
allowed_origins = ["*"]
expose_headers = ["Etag"]
max_age_seconds = "0"
}
}
module "public_bucket" {
source = "../modules/bucket"
bucket-name = "public.medikt.net"
provider-zone = var.provider-zone
provider-token = var.provider-token
provider-cloudid = var.provider-cloudid
provider-folderid = var.provider-folderid
bucket_grants = [
{
type = "Group"
permissions = ["READ"]
uri = "http://acs.amazonaws.com/groups/global/AllUsers"
}
]
cors_rule = {
allowed_headers = ["*"]
allowed_methods = ["PUT", "GET"]
allowed_origins = ["*"]
expose_headers = ["Etag"]
max_age_seconds = "0"
}
}
module "transcoder_bucket" {
source = "../modules/bucket"
bucket-name = "transcoderbucket.medikt.net"
provider-zone = var.provider-zone
provider-token = var.provider-token
provider-cloudid = var.provider-cloudid
provider-folderid = var.provider-folderid
expiration_rotation_period = 31
}
module "my_static_website" {
source = "../modules/bucket"
bucket-name = "my.medikt.net"
provider-zone = var.provider-zone
provider-token = var.provider-token
provider-cloudid = var.provider-cloudid
provider-folderid = var.provider-folderid
bucket_grants = [
{
type = "Group"
permissions = ["READ"]
uri = "http://acs.amazonaws.com/groups/global/AllUsers"
}
]
user_spa_backup_rotation_period = 90
cors_rule = {
allowed_headers = ["*"]
allowed_methods = ["GET"]
allowed_origins = ["https://my.medikt.net/"]
expose_headers = ["Etag"]
max_age_seconds = "0"
}
website = {
error_document = "index.html"
index_document = "index.html"
dns_zone_id = module.dns_zone.dns_zone_id
subdomain = "my"
certificate_id = var.my_medikt_certificate_id
}
}
Примечания
- Версионирование: Для включения versioning требуется роль
storage.admin(неstorage.editor) - Website hosting: При указании параметра
websiteавтоматически создается DNS запись типа ANAME - Шифрование: При
encrypted_bucket = trueсоздается KMS ключ с ротацией - DNS запись: Создается только для
website, не дляforeign_website