Мне кажется, что я столкнулся с ограничением в модуле AWS api или aws_cloudfront_distribution (версия v0.11).Я пытаюсь добиться динамического добавления источников и поведения кэша к существующему дистрибутиву CloudFront.
Я знаю, что это возможно с помощью AWS CLI .Пример этого показан ниже (взято из документации по распространению обновлений . Мой вопрос касается того, как я могу упростить эту реализацию с помощью terraform (показано под фрагментом кода).
$ JSON_OUTPUT=$(aws cloudfront get-distribution-config --id=<MY-DISTROS-ID>)
$ echo $JSON_OUTPUT
{
"ETag": "E2ABCDEFGHIJKL",
"DistributionConfig": {
"CacheBehaviors": {
"Quantity": 0
},
"Origins": {
"Items": [
{
...origin-info-for-default-cache-behavior
}
],
"Quantity": 1
},
"Enabled": true,
"DefaultCacheBehavior": {
...default-cache-behavior
},
...more-cloudfront-stuff
}
$ # remove the ETag
$ # add an entry to the DistributionConfig.Origins.Items array
$ # add an array of Items to the DistributionConfig.CacheBehaviors.Items = [{ the cache behavior }] and set Quantity = 1
$ # save DistributionConfig key value to a file file:///tmp/new-distro-config.json
$ aws cloudfront update-distribution --id <MY-DISTROS-ID> --distribution-config file:///tmp/new-distro-config.json --if-match E2ABCDEFGHIJKL
Это успешно добавит новое поведение кеша и источник к существующему дистрибутиву CloudFront.
Я хотел бы достичь этой же конечной цели, используя terraform, чтобы я мог сохранять состояние в S3. Так, например, используя terraform, Я бы
- Создание дистрибутива облачного фронта
- Из другого модуля terraform
- Импорт дистрибутива облачного фронта с использованием блока данных
- Добавление одногоповедение и происхождение отключенного кэша
В псевдокоде-терраформе, и для большей ясности, блок кода ниже иллюстрирует это далее
# original CloudFront distro
resource "aws_cloudfront_distribution" "my-distro" {
aliases = ["${var.my_alias_domain}"]
origin {
...origin-info-for-default-cache-behavior
}
enabled = true
default_cache_behavior {
...default-cache-behavior
}
...more-cloudfront-stuff
}
Затем в другоммодуль terraform (а иногда и в будущем), что-то вроде
data "terraform_remote_state" "CloudFront" {
backend = "s3"
config {
acl = "bucket-owner-full-control"
bucket = "${var.CloudFront_BUCKET}"
key = "${var.CloudFront_KEY}"
region = "${var.CloudFront_REGION}"
}
}
resource "aws_cloudfront_distribution_origin" "next-origin" {
cloudfront_distribution_id = "${data.terraform_remote_state.CloudFront.id}"
origin {
...origin-info-for-default-cache-behavior
}
ordered_cache_behavior {
...origin-info-for-cache-behavior
}
}
Я хорошо знаю, что aws_cloudfront_distribution_origin
не является ресурсом в terraform.Я просто пишу этот псевдокод, чтобы передать то, что я пытаюсь достичь.Это практический вариант использования для того, чтобы разделить службу, которая должна все жить в одном домене.
После того, как все это написано, я предполагаю, что я должен просто отказаться от terraform в этом сценарии вместоCLI AWS напрямую.Однако, если кто-то еще достигнет этого, используя терраформ, я бы хотел услышать, как это возможно.