Terraform — ошибки OAC в настройке CloudFront Distribution

Я участвую в известном конкурсе Cloud Resume Challenge, и сейчас большая часть моих настроек AWS автоматизирована с помощью Terraform, но я застрял на OAC-части настройки дистрибутива CloudFront и не нашел много документации в Интернете или в документации. Вот мой текущий скрипт Terraform:

locals {
    s3_origin_id = aws_s3_bucket.gjd_crc_prod_bucket.bucket_regional_domain_name
}

resource "aws_cloudfront_origin_access_control" "crc_cf_oac" {
    name = local.s3_origin_id
    origin_access_control_origin_type = "s3"
    signing_behavior = "always"
    signing_protocol = "sigv4"
}

resource "aws_cloudfront_distribution" "crc_prod_cfdist" {
    origin {
        s3_origin_config {
            origin_access_identity = aws_cloudfront_origin_access_control.crc_cf_oac.id
        }
      domain_name = local.s3_origin_id
      origin_id = local.s3_origin_id
    }
    
    enabled = true
    is_ipv6_enabled = true
    default_root_object = "index.html"

    default_cache_behavior {
        cache_policy_id = "658327ea-f89d-4fab-a63d-7e88639e58f6"
        allowed_methods  = ["GET", "HEAD"]
        cached_methods   = ["GET", "HEAD"]
        target_origin_id = local.s3_origin_id
        viewer_protocol_policy = "https-only"
        compress = true
    }

    viewer_certificate {
      cloudfront_default_certificate = true
    }

    restrictions {
        geo_restriction {
          restriction_type = "none"
          locations = []
        }
    }
}

Ошибка, которую я получаю, когда подаю заявку через Terraform:

aws_cloudfront_distribution.crc_prod_cfdist: Modifying... [id=E2F87SH1SP8PTO]
╷
│ Error: updating CloudFront Distribution (E2F87SH1SP8PTO): InvalidOriginAccessIdentity: The specified origin access identity does not exist or is not valid.
│       status code: 400, request id: 927f5e89-4ee0-4fa0-99c6-776547f41e03
│
│   with aws_cloudfront_distribution.crc_prod_cfdist,
│   on cloudfront.tf line 12, in resource "aws_cloudfront_distribution" "crc_prod_cfdist":
│   12: resource "aws_cloudfront_distribution" "crc_prod_cfdist" {
│
╵

Вся документация, которую я могу найти (которую, если честно, не так уж и много), заключается в том, что OAC должен быть таким же простым, как создание ресурса OAC и последующая ссылка на идентификатор указанного ресурса в дистрибутиве, но он действует так, как будто он не существует/не существует. был создан еще.

Есть предположения? Я ненавижу прибегать к устаревшим/устаревшим вариантам.

Обновлено: хотел добавить, что это всего лишь скрипт CloudFront.tf. Я не уверен, какой протокол правильный, но мне нравится хранить службы в отдельных сценариях для удобства чтения. Буду рад поделиться другими, если это покажется необходимым (например, полностью функциональным сценарием корзины S3).

Обновлено: РЕШЕНО. Вот обновленный код, который использует ресурс OAC, но на который ссылаются с использованием OAI:

resource "aws_cloudfront_distribution" "crc_prod_cfdist" {
    origin {
        origin_access_control_id = aws_cloudfront_origin_access_control.crc_cf_oac.id
        domain_name = local.s3_origin_id
        origin_id = local.s3_origin_id
    }

Итак, вы хотите, чтобы CloudFront получил доступ к вашей корзине S3, настроенной как статический веб-сайт?

Marko E 09.03.2024 09:05

Таким образом, корзина S3 не настроена как статический сайт, поскольку при использовании AWS это больше не требуется. Установка работает при настройке через портал, поэтому я знаю, что это правда, но в остальном да, я хочу, чтобы дистрибутив CloudFront имел доступ к корзине S3.

Greg Davis 09.03.2024 19:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
362
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо aws_cloudfront_origin_access_control следует использовать aws_cloudfront_origin_access_identity.

OAI был признан устаревшим в пользу OAC: aws.amazon.com/about-aws/whats-new/2022/08/…

Greg Davis 09.03.2024 19:24

О боже, теперь я вижу. Я отредактировал основной пост, добавив обновленный фрагмент функционального кода. Как это сбивает с толку/раздражает.

Greg Davis 09.03.2024 21:41

Другие вопросы по теме