Развертывание EventCatalog в AWS CloudFront с контролем доступа Google SSO через Terraform

В этой статье показано, как развернуть собственный EventCatalog в AWS CloudFront через Terraform и обновлять каталог через CI/CD (CircleCi в данном случае, но может быть легко применен к другим CI системам). Здесь также показано, как использовать Lambda@Edge для реализации Google SSO / OpenID Connect через проект Widen/cloudfront-auth.

EventCatalog был создан Дэвидом Бойном. Это замечательный проект с открытым исходным кодом, который выступает в качестве объединяющего инструмента документации для Event-Driven Architectures. Он помогает вам документировать, визуализировать и держать на вершине события, схемы, производителей, потребителей и сервисы вашей Event Driven Architectures.

Вы можете перейти по указанным выше ссылкам, чтобы узнать больше о самом EventCatalog.

В ближайшее время мы планируем выложить на github репо с полным примером.

Оглавление

 1. Создание проекта EventCatalog

       1.1. Требования

       1.2. Создать сайт проекта Scaffold
 2. Создайте Terraform для развертывания на Cloudfront

       2.3. Создайте файл main.tf

       2.4. Создайте файл lambda.tf

       2.5. Создайте файл cloudfront.tf

       2.6. Создайте файл variables.tf

       2.7. Создайте файл sandbox.tfvars

       2.8. Создайте zip-файл с лямбда-кодом.
 3. Первоначальное развертывание с временным кодом лямбда@edge
 4. Сборка кода Lambda@edge с помощью Widen/cloudfront-auth

       4.9. Создайте учетные данные OAuth в консоли разработчиков Google

             a. Создайте новый проект

             b. Создайте OAuth-согласие и учетные данные

       4.10. Сгенерируйте код для Lambda@edge
 5. Разверните содержимое EventCatalog на S3.

       5.11. Ручное развертывание

       5.12. Развертывание с помощью CircleCi
 6. Развертывание нового кода lambda@edge с помощью terraform
 7. Улучшения? Предложения? Альтернативы?
 8. Об авторе

Создание проекта EventCatalog

Вы можете создать образец проекта EventCatalog с помощью EventCatalog CLI. Это может послужить основой для вашего собственного проекта. В данном случае мы будем использовать образец проекта, который он установит, в качестве нашего проекта для этой статьи.

Требования

  • Node.js версии >= 14 или выше (что можно проверить, выполнив node -v). Вы можете использовать nvm для управления несколькими версиями Node на одной машине.
    • Мы будем использовать Node.js версии 16.x.x
  • Yarn версии >= 1.5 (которую можно проверить, выполнив yarn —version). Yarn — это производительный менеджер пакетов для JavaScript, который заменяет клиент npm. Он не является строго необходимым, но очень рекомендуется.
    • Мы используем Yarn 1.22.x.

Создание веб-сайта проекта Scaffold

  1. Перейдите в каталог в файловой системе вашего компьютера, где вы хотите сохранить проект.

  2. Сгенерируйте строительные леса для проекта

    • Мы назовем проект my-catalog.
    npx @eventcatalog/create-eventcatalog@latest my-catalog
    
* This will generate a new directory structure as a git project:
Войдите в полноэкранный режим Выход из полноэкранного режима
```
my-catalog
├── services
│   ├── Basket Service
│   │     └──index.md
│   ├── Data Lake
│   │     └──index.md
│   ├── Payment Service
│   │     └──index.md
│   ├── Shipping Service
│   │     └──index.md
├── events
│   ├── AddedItemToCart
│   │     └──versioned
│   │     │  └──0.0.1
│   │     │     └──index.md
│   │     │     └──schema.json
│   │     └──index.md
│   │     └──schema.json
│   ├── OrderComplete
│   │     └──index.md
│   │     └──schema.json
│   ├── OrderConfirmed
│   │     └──index.md
│   │     └──schema.json
│   ├── OrderRequested
│   │     └──index.md
│   ├── PaymentProcessed
│   │     └──index.md
├── static
│   └── img
├── eventcatalog.config.js
├── .eventcatalog-core/
├── package.json
├── README.md
├── yarn.lock
├── Dockefile
├── .dockerignore
├── .gitignore
└── .git/
```
Войти в полноэкранный режим Выйти из полноэкранного режима
  1. Смените директорию на my-catalog.
  2. Вы можете предварительно просмотреть EventCatalog с помощью команды:

      npm run dev
    
  3. А затем направьте браузер на http://localhost:3000.

    • Там вы сможете просмотреть примеры событий, служб и доменов.
  4. Как только вы закончите проверку, завершите процесс npm с помощью CTL-C.

Создайте Terraform для развертывания на Cloudfront

  1. Создайте каталог terraform в my-catalog и добавьте в него каталог assets.

    • Вы можете сделать этот каталог вне каталога, если предпочитаете управлять им таким образом.
    mkdir -p terraform/assets
    cd terraform
    
  2. Создайте .gitignore в каталоге terraform

  curl https://raw.githubusercontent.com/github/gitignore/main/Terraform.gitignore -o terraform/.gitignore
Войдите в полноэкранный режим Выйти из полноэкранного режима

Создайте файл main.tf.

В этом файле содержится весь код терраформы:

  • Настройка среды terraform
  • Укажите провайдера AWS
  • alt_fqdns — это пока место для размещения. Возможно, вы захотите сделать alt_fqds переменной. Это должен быть список строк, используемых cloudfront.tf для указания псевдонимов для сертификата и DNS, но это трудно поддерживать с помощью обратного вызова sso.
###
### Using locals to form variables by concatinating input variables
### Unfortunately can not do that in variables.tf or <env>.tfvars
###
locals {
  fqdn        = "${var.app_name}-${var.project_name}.${var.environment}.${var.base_domain_name}"
  alt_fqdns   = []
  zone_name   = "${var.environment}.${var.base_domain_name}"
  lambda_name = "${var.environment}-${var.project_name}-${var.app_name}-${var.lambda_name_suffix}"
}

terraform {
  required_version = ">= 1.2.0"
  required_providers {
    aws = {
      source = "hashicorp/aws"
      # Need to use version < 4.0.0 to work with cloudposse/cloudfront-s3-cdn
      version = ">= 3.75.2"
    }
  }
  # You should use a different state management than local
  backend "local" {}
}

provider "aws" {
  region  = var.region
  profile = var.profile
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Создайте файл lambda.tf.

  • Настройте роль и политики AWS IAM для lambda@edge
  • Создайте службу lambda@edge
### Set up IAM role and policies for the lambda
data "aws_iam_policy_document" "lambda_edge_assume_role" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type = "Service"
      identifiers = [
        "lambda.amazonaws.com",
        "edgelambda.amazonaws.com"
      ]
    }
  }
}

# Define the IAM role for logging from the Lambda function.
data "aws_iam_policy_document" "lambda_edge_logging_policy" {
  statement {
    effect = "Allow"
    actions = [
      "logs:CreateLogGroup",
      "logs:CreateLogStream",
      "logs:PutLogEvents"
    ]
    resources = ["arn:aws:logs:*:*:*"]
  }
}

# Add IAM policy for logging to the iam role
resource "aws_iam_role_policy" "lambda_edge_logging" {
  name = "${local.lambda_name}-lambda_edge_logging"
  role = aws_iam_role.lambda_edge.id

  policy = data.aws_iam_policy_document.lambda_edge_logging_policy.json
}


# Create the iam role for the lambda function
resource "aws_iam_role" "lambda_edge" {
  name               = "${var.app_name}_lambda_edge_cloudfront"
  assume_role_policy = data.aws_iam_policy_document.lambda_edge_assume_role.json
}

# Create the lambda@edge function
resource "aws_lambda_function" "edge" {
  filename      = var.lambda_file_name
  function_name = local.lambda_name
  role          = aws_iam_role.lambda_edge.arn
  handler       = "index.handler"
  timeout       = "5"
  publish       = true

  # The filebase64sha256() function is available in Terraform 0.11.12 and later
  # For Terraform 0.11.11 and earlier, use the base64sha256() function and the file() function:
  # source_code_hash = "${base64sha256(file("lambda_function_payload.zip"))}"
  source_code_hash = filebase64sha256(var.lambda_file_name)

  runtime = "nodejs12.x"

}
Войдите в полноэкранный режим Выход из полноэкранного режима

Создание файла cloudfront.tf

  • Создайте экземпляр CDN CloudFront и ведро S3 с ассоциацией lambda@edge
    • Использует модуль cloudposse/cloudfront-s3-cdn/aws terraform для выполнения всей тяжелой работы.
    • В настоящее время этот модуль работает только с провайдером hashicorp/aws версии < 4.0.0.
      • Поэтому мы не используем последнюю версию провайдера hashicorp/aws.
  • Создайте TLS-сертификат с помощью AWS ACM
module "cloudfront-s3-cdn" {
  source  = "cloudposse/cloudfront-s3-cdn/aws"
  version = "0.82.4"

  namespace               = var.bucket_namespace
  environment             = var.environment
  stage                   = var.project_name
  name                    = var.app_name
  encryption_enabled      = true
  allow_ssl_requests_only = false
  # This will allow a complete deletion of the bucket and all of its contents
  origin_force_destroy = true

  # DNS Settings
  parent_zone_id      = var.zone_id
  acm_certificate_arn = module.acm_request_certificate.arn
  aliases             = concat([local.fqdn], local.alt_fqdns)
  ipv6_enabled        = true
  dns_alias_enabled   = true

  # Caching Settings
  default_ttl = 300
  compress    = true

  # Website settings
  website_enabled = true
  index_document  = "index.html"
  error_document  = "404.html"

  depends_on = [module.acm_request_certificate]

  # Link Lambda@Edge to the CloudFront distribution
  lambda_function_association = [{
    event_type   = "viewer-request"
    include_body = false
    lambda_arn   = aws_lambda_function.edge.qualified_arn
  }]
}


###
### Request an SSL certificate
###
module "acm_request_certificate" {
  source                            = "cloudposse/acm-request-certificate/aws"
  version                           = "0.16.0"
  domain_name                       = local.fqdn
  subject_alternative_names         = local.alt_fqdns
  process_domain_validation_options = true
  ttl                               = "300"
  wait_for_certificate_issued       = true
  zone_name                         = local.zone_name
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Создайте файл variables.tf.

  • Определения переменных для EventCatalog-Sandbox
variable "region" {
  description = "The region to use for the Terraform run"
  default     = ""
}

variable "profile" {
  description = "The local IAM profile to use for the Terraform run"
  default     = ""
}

variable "environment" {
  description = "The environment to use for the Terraform run"
  default     = ""
}

variable "project_name" {
  description = "The name of the project to use"
  default     = ""
}

variable "app_name" {
  description = "The name of this app"
  default     = "eventcatalog"
}

variable "base_domain_name" {
  description = "The base domain name for the environment"
  default     = ""
}

variable "bucket_namespace" {
  description = "The namespace prefix for s3 buckets"
  default     = ""
}

variable "zone_id" {
  description = "The route53 zone id for the domain zone of the FQDNs"
  default     = ""
}

variable "lambda_file_name" {
  description = "The name of the lambda function file that was generated by the Widen/cloudfront-auth project"
  default     = ""
}

variable "lambda_name_suffix" {
  description = "The suffix to append to the lambda function name to make it unique if need to destroy and recrete CloudFront distribution"
  default     = "000"
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Создайте файл sandbox.tfvars.

  • Этот файл устанавливает или переопределяет значения по умолчанию для запуска терраформы.
    • Установите эти значения в соответствии с вашим окружением
    • Регион может быть us-east-1.
region           = "us-east-1"
profile          = "sandbox"
environment      = "rob"
project_name     = "blogpost"
app_name         = "eventcatalog"
lambda_file_name = "assets/temp.zip"

##
## These must be different for your environment
base_domain_name = "informediq-infra.com"
bucket_namespace = "informediq"
zone_id          = "Z10***********************K7U"
Вход в полноэкранный режим Выйти из полноэкранного режима

Создайте zip-файл с лямбда-кодом в качестве заполнителя

У нас есть небольшая проблема с курицей и яйцом, когда нам нужно иметь
Cloudformation имя для создания zip-файла с кодом лямбда@edge с именем
Widen/cloudfront-auth project.

Поэтому для начала мы создадим фиктивный временный zip-файл.

  • Создайте файл assets/temp.js со следующим содержимым:
  exports.handler = async (event) => {
      // TODO implement
      const response = {
          statusCode: 200,
          body: JSON.stringify('Hello from Lambda!'),
      };
      return response;
  };
Вход в полноэкранный режим Выход из полноэкранного режима
  • Запилите этот файл
  cd assets
  zip -r temp.zip temp.js
  cd ..
Войти в полноэкранный режим Выйти из полноэкранного режима

Первоначальное развертывание с временным кодом lambda@edge

  1. Настройте все учетные данные/логин, необходимые для запуска AWS CLI / Terraform CLI из окна оболочки.

  2. В первый раз, когда вы захотите запустить все это (или в любое время, когда вы добавляете модули Terraform)

    terraform init
    
  3. Выполните применение Terraform

    • Вы можете сделать план, но мы все равно развертываем в первый раз.
    • Мы указываем ему использовать файл sandbox.tfvars для ввода необходимых переменных.
    terraform apply  -var-file=sandbox.tfvars
    
  4. Первый запуск может занять много времени. Я видел, как он застрял на

    module.cloudfront-s3-cdn.module.logs.aws_s3_bucket.default[0]: Still creating...
    module.cloudfront-s3-cdn.aws_s3_bucket.origin[0]: Still creating...
    

    более чем на 30 минут. Не уверен почему. Но после первого запуска все происходит быстро.

    Вы также можете получить предупреждение:

      │ Warning: Argument is deprecated
    

    Вы можете проигнорировать его. Похоже, это что-то обесцененное, используемое модулем cloudposse/cloudfront-s3-cdn/aws terraform.

  5. В конце запуска он выведет результаты с чем-то вроде:

  Apply complete! Resources: 14 added, 0 changed, 0 destroyed.

  Outputs:

  cf_aliases = tolist([
    "eventcatalog-projectname.rob.informediq-infra.com",
    "eventcatalog.rob.informediq-infra.com",
  ])
  cf_domain_name = "d32pr*******z3r.cloudfront.net"
  s3_bucket = "informediq-rob-eventcatalog-origin"
Вход в полноэкранный режим Выход из полноэкранного режима

Некоторые из этих данных понадобятся для следующих шагов по настройке Google SSO.

На данный момент, если вы попытаетесь получить доступ к https://eventcatalog.rob.informediq-infra.com, вы получите ошибку, поскольку в лямбда@edge содержится фиктивный код. Это будет исправлено в следующих шагах.

Создайте код Lambda@edge с помощью Widen/cloudfront-auth

Клонируйте репо Widen/cloudfront-auth в каталог вне вашего my-catalog EventCatalog или terroform репо.

   git clone git@github.com:Widen/cloudfront-auth.git
   cd cloudfront-auth
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Следуйте инструкциям в README для выбранного вами Identity Provider. Мы будем использовать механизм Google Hosted Domain:

Создайте OAuth-учетные данные в консоли разработчиков Google.

Это предполагает, что у вас еще нет проекта в консоли разработчиков Google, но у вас есть учетная запись в консоли разработчиков Google.

Создайте новый проект

  1. Нажмите на вкладку Проекты в самом верхнем меню справа от логотипа Google Cloud.

    1. Нажмите на Новый проект в модальном всплывающем окне, которое появится после нажатия на выпадающий список.
  2. Заполните форму нового проекта и нажмите на CREATE.

Создание согласия и учетных данных OAuth

  1. Выберите APIs & Services в строке меню слева, чтобы перейти на эту страницу проекта

  2. Выберите Credentials в новой строке меню слева

  3. Нажмите на Configure Consent Screen для настройки информации о согласии OAuth

    1. Выберите Internal и нажмите на CREATE.
    2. Заполните как минимум
      • Название приложения (EventCatalog Sandbox)
      • Электронная почта службы поддержки пользователей
        • Это будет выпадающий список, в котором должен быть указан email, связанный с аккаунтом Google Dev.
      • Авторизованные домены
        • Это должен быть домен, используемый для адреса электронной почты людей, входящих в систему через Google SSO.
        • В моем случае это informed.iq.
      • Адрес электронной почты контактной информации разработчика
        • Может быть вашим электронным адресом
    3. Нажмите SAVE AND CONTINUE
    4. Нажмите SAVE AND CONTINUE на следующем экране (Scopes Page)
    5. Нажмите на BACK TO DASHBOARD на следующем экране (Summary Page)
    6. Нажмите на Credentials на левой навигационной панели, чтобы вернуться на страницу Credentials.
  4. Нажмите на + Create Credentials на верхней панели меню и выберите OAuth client ID из выпадающего списка

    1. Выберите веб-приложение для типа приложения
    2. В разделе Авторизованные URI перенаправления введите имя хоста Cloudfront с предпочтительным значением пути для обратного вызова авторизации. Для нашего рабочего примера: https://eventcatalog-projectname.rob.informediq-infra.com/_callback.
    3. Нажмите CREATE, когда все будет готово.
  5. Захватите полученные идентификатор и секрет клиента OAuth

    • В модальном окне будут показаны идентификатор и секрет клиента OAuth.
    • Вам следует сохранить их где-нибудь, хотя вы также всегда можете просмотреть их в Google Console позже.
    • Вы также можете загрузить JSON с информацией и сохранить ее таким образом.

Теперь мы закончили с Google Developer’s Console.

Сгенерируйте код для Lambda@edge

ПРИМЕЧАНИЕ: Убедитесь, что вы находитесь в директории Widen/cloudfront-auth для выполнения следующих команд.

К сожалению, проект Widen/cloudfront-auth давно не обновлялся. Но он по-прежнему широко используется.

Сначала вы можете выполнить:

  npm audit fix --force
Войти в полноэкранный режим Выйти из полноэкранного режима

Чтобы, по крайней мере, устранить некоторые вопиющие уязвимости с высоким риском. Это, похоже, не повлияет на фактическое использование проекта.

  1. Выполните ./build.sh. Запустится NPM для загрузки зависимостей и будет сгенерирован RSA-ключ.
    • Появится несколько сообщений об установке npm
    • Есть Warning, которое, похоже, заполняет значение первого запроса >: Введите имя дистрибутива: вы можете проигнорировать предупреждение и начать заполнять значения

ПРИМЕЧАНИЕ: Сокращение некоторых элементов для безопасности

>: Enter distribution name: d32pr*******z3r.cloudfront.net
>: Authentication methods:
    (1) Google
    (2) Microsoft
    (3) GitHub
    (4) OKTA
    (5) Auth0
    (6) Centrify
    (7) OKTA Native

    Select an authentication method: 1
Generating public/private rsa key pair.
Your identification has been saved in ./distributions/d32pr*******z3r.cloudfront.net/id_rsa
Your public key has been saved in ./distributions/d32pr*******z3r.cloudfront.net/id_rsa.pub
The key fingerprint is:
SHA256:vJS0/*************************************************iE2ic rberger@tardis.local
The key's randomart image is:
+---[RSA 4096]----+
|       .o. =. .==|
|         oo.+.=.+|
|        ooo .o.B.|
|       o.+E...= .|
|        S .o   o.|
|       . +... + o|
|        o o+.o + |
|         . ==..  |
|          +=+o.  |
+----[SHA256]-----+
writing RSA key
>>: Client ID: 787***********************13cho.apps.googleusercontent.com
>>: Client Secret: GOCSPX-****************untA
>>: Redirect URI: https://eventcatalog-projectname.rob.informediq-infra.com/_callback
>>: Hosted Domain: informed.iq
>>: Session Duration (hours):  (0)  12
>>: Authorization methods:
   (1) Hosted Domain - verify email's domain matches that of the given hosted domain
   (2) HTTP Email Lookup - verify email exists in JSON array located at given HTTP endpoint
   (3) Google Groups Lookup - verify email exists in one of given Google Groups

   Select an authorization method: 1
Вход в полноэкранный режим Выйти из полноэкранного режима
  1. Скопируйте полученный файл zip, находящийся в папке distribution в каталоге Widen/cloudfront-auth, в каталог assets в каталоге terraform.
    • Процесс выведет путь, относительно которого был сохранен zip-файл.
    • В моей установке команда для выполнения копирования следующая:
  cp distributions/d32pr*******z3r.cloudfront.net/d32pr*******z3r.cloudfront.net.zip ../my-catalog/terraform/assets
Войти в полноэкранный режим Выйти из полноэкранного режима

Развертывание содержимого EventCatalog на S3

Вы можете развернуть содержимое вручную. Но на самом деле для развертывания содержимого EventCatalog следует использовать системы CI/CD.

Развертывание вручную

Основные необходимые действия:

  • Изменить каталог, чтобы он находился в верхней части репозитория EventCatalog.
  • Создайте статические активы с помощью EventCatalog cli
  • Скопировать статические активы в ведро S3, созданное Terraform.

Сначала мы покажем, как это сделать вручную

  1. Сборка статических активов

    • Предполагается, что вы находитесь на верхнем уровне репозитория EventCatalog.
    • Вам нужно выполнить yarn install только при первом использовании любой из команд.
    yarn install
    yarn build
    
  2. Загрузите статические активы на S3

* Assumes you have installed the AWS CLI 
* You have configured you local shell environment with proper IAM Profile to run the AWS CLI
* Use the actual s3 bucket you created in your terraform run
    * The example shows the bucket we've used in our working example
Войти в полноэкранный режим Выйти из полноэкранного режима
  aws s3 sync .eventcatalog-core/out s3://informediq-rob-eventcatalog-origin
Войти в полноэкранный режим Выйти из полноэкранного режима

Развертывание с помощью CircleCi

  1. Предполагается, что у вас есть учетная запись CircleCI и она подключена к вашей учетной записи Github.

    • В рамках данной статьи мы не будем показывать, как настраивать и использовать Github и CircleCI.
  2. Вам нужно будет установить переменные окружения CircleCi Project или Context:

    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
  3. Создайте каталог .circleci в верхней части каталога вашего репозитория EventCatalog

  4. Создайте файл .circleci/config.yml со следующим содержимым

    • Вам нужно будет заменить имя s3 bucket на то, которое вы действительно создали с помощью terraform
version: 2.1

# CircleCi Orbs (libraries) used by this config
orbs:
  node: circleci/node@5.0.2
  aws-s3: circleci/aws-s3@3.0.0

jobs:
  eventcatalog-contentbuild:
    docker:
      - image: cimg/node:16.15
    steps:
      - checkout

      - run:
          name: Install EventCatalog tooling
          working_directory: ~/project
          command: if [ ! -e "node_modules/@eventcatalog/core/bin/eventcatalog.js" ]; then yarn install; else echo "eventbridge seems to be cached"; fi;

      - run:
          name: Build the EventCatalog static content
          working_directory: ~/project
          command: |
            echo Running eventbridge build in `pwd`
            yarn build

      - aws-s3/sync:
          # Copy the static content to the S3 bucket
          # Replace the s3 bucket name with the one you actually created with terraform
          aws-region: AWS_REGION
          from: ~/project/.eventcatalog-core/out
          to: s3://informediq-rob-blogpost-eventcatalog-origin

workflows:
  eventcatalog-contentworkflow:
    jobs:
      - eventcatalog-contentbuild:
          context:
            # We're getting the AWS Credentials from our CircleCI Organization context
            # You could also just use Project level Environment Variables with
            # IAM AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
            - rberger-aws-user-creds
Войдите в полноэкранный режим Выйти из полноэкранного режима

После создания этого файла и внесения всех фиксаций в репозиторий EventCatalog, отправьте его на Github, что должно привести к запуску CircleCI.

  • Вы можете подтвердить, что файл отправлен на s3, используя AWS Console или CLI для просмотра содержимого ведра S3.

Развертывание нового кода lambda@edge с помощью terraform

  1. Вернитесь в каталог terraform.

    • Убедитесь, что новый zip-файл находится в каталоге assets.
  2. Обновите входной файл tfvars (sandbox.tfvars в нашем рабочем примере) с новым именем файла.

    region           = "us-east-1"
    profile          = "sandbox"
    environment      = "rob"
    project_name     = "blogpost"
    app_name         = "eventcatalog"
    lambda_file_name = "assets/d32pr*******z3r.cloudfront.net.zip"
    ## On first run, set lambda_file_name to `assets/temp.zip`
    # lambda_file_name = "assets/temp.zip"
    
    ##
    ## These should be different for your environment
    base_domain_name = "informediq-infra.com"
    bucket_namespace = "informediq"
    zone_id          = "Z10***********************K7U"
    ##
    
    
  3. Запустите terraform apply.

    terraform apply -var-file=sandbox.tfvars
    
  4. При успешном выполнении будут выведены выходные значения

* They should be something along the lines of the following:
Вход в полноэкранный режим Выход из полноэкранного режима
```
Outputs:

cf_aliases = tolist([
  "eventcatalog-blogpost.rob.informediq-infra.com",
  "eventcatalog.rob.informediq-infra.com",
])
cf_domain_name = "d32pr*******z3r.cloudfront.net"
s3_bucket = "informediq-rob-eventcatalog-origin"
```
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы должны иметь возможность перейти к любой из ваших cf_aliases.

  • Например:
   https://eventcatalog.rob.informediq-infra.com
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Если вы еще не вошли в систему, это должно привести вас к аутентификации Google SSO.
  • После входа в систему вы должны увидеть главную страницу EventCatalog.

Теперь вы можете начать использовать EventCatalog, обновив исходные файлы в соответствии с вашими доменами, службами и событиями.

Улучшения? Предложения? Альтернативы?

Пожалуйста, не стесняйтесь комментировать или связаться со мной, если вы обнаружили какие-либо ошибки, проблемы или у вас есть предложения по улучшению!

Мне интересно узнать об альтернативах Widen/cloudfront-auth, поскольку он давно не обновлялся.

Об авторе

В качестве главного архитектора Роб руководит развитием программного обеспечения и инфраструктуры InformedIQ. Его опыт охватывает взлеты и падения многих технологических жизненных циклов — от машинного зрения, оцифровки профессионального оборудования для производства видео, интернет-инфраструктуры, беспроводной связи, электронной коммерции, больших данных, IoT, DevOps и машинного обучения. Он был основателем или техническим лидером в нескольких стартапах в Кремниевой долине. Гордится тем, что второй год является частью AWS Community Builders.

Мы нанимаем! https://informed.iq/careers/
Twitter: @rberger

Эта статья была первоначально опубликована в блоге InformedIQ Blog

Оцените статью
devanswers.ru
Добавить комментарий