Рубрики
Uncategorized

Demo Gateway GCP API с террафом / Go / Cloud Run

Я изначально опубликовал эту статью на среднем, если вы строили веб-сервисы на GCP Cloud Functio … Теги от Go, GoogleCloudPlatform, Terraform, DevOps.

Я изначально опубликовал эту статью на Середина

Если вы строили веб-сервисы на облачных функциях GCP или Cloud Run, вы могли бы заметить, что облако Google не хватает важной части инфраструктуры: AN API Gateway .

Пока у АВС имел свой Gateway Amazon API На несколько лет GCP не имел эквивалентного обслуживания (там было облачные конечные точки Но я думаю, что область имеет немного другой), оставляя разработчикам построить пользовательские решения … Но не больше! GCP имеет Недавно Объявил совершенно новый Google Cloud API Gateway, поэтому я подумал, что я попробую. Это все еще в Бета Так что примите это во внимание, прежде чем использовать его в ваших производственных системах.

Почему мне нужен шлюз API?

Глядя на редхат Определение :

Gateway API — это инструмент управления API, который расположен между клиентом и коллекцией Backend Services.

Чтобы сделать это более конкретным и легче понимать, давайте быстро прыгаем к примеру, мы будем строить в этой статье.

Сказка о 2 микросервисах

Для этой статьи мы будем создавать выделенное приложение, которое состоит из 2 компонентов Backend:

  • Услуги пользователей: простое микросистема с HTTP API, который возвращает список пользователей в формате JSON, размещенным на GCP Cloud Run Отказ
  • Обслуживание местоположений: простое микросервис с HTTP API, который возвращает список местоположений в формате JSON, также размещенным на GCP Cloud Run (Но это также может быть GCP Cloud Function , например).

Мы хотели бы предоставить единый доступ к этим 2 услугам через шлюз API. Затем любой компонент Frontend может затем подключаться к шлюзу API, а шлюз будет направлять запросы на правильную поддержку Backend. Вот несколько схем, которые иллюстрируют нашу цель:

Запрос пользователей

Запрос на места

Давайте код

Вы можете следить с помощью этого Репозиторий GitHub Я подготовил. Он содержит все код и команды, необходимые для запуска проекта.

Я завернул большинство команд Shell для проекта в этом Makefile , вы можете обратиться к нему для получения подробной информации о командах:

Настройка GCP

Я подробл здесь Предварительные шаги, необходимые для настройки среды GCP для этого проекта. Он в основном аутентифицируется, создавая новый проект GCP, сервисный счет с правами на правильные разрешения и включает в себя облачные API.

Backend Services.

Сами микросервисы очень простые серверы Go API на основе CHI Router . Вот раздел обработчика для службы пользователей, у него есть единый маршрут и возвращает статический список пользователей как JSON:

Сервис местности очень похожа:

Обе услуги контейнерируются, мы просто строим и выдвинули их на Регистрация контейнера GCP Использование GCP Cloud Build (CI/CD) Итак, они готовы развернуть в GCP Cloud Run.

Build/push # Контейнер обслуживания пользователей:

$ # PROJECT\_ID holds the GCP project id
$ PROJECT\_ID=$PROJECT\_ID make gcr-push-users

Контейнер для сервисного контейнера Build/push

$ PROJECT\_ID=$PROJECT\_ID make gcr-push-locations

Немного магии террафора

Мы развертываем услуги облачного запуска, используя Террафом Отказ Если вы еще не использовали его, вы должны проверить это, так как это фантастическое Инфраструктура как код инструмент И это может сделать ваши DevOps Workflows намного чище.

Наиболее важной частью конфигурации TERRAFORM является этот раздел, в котором мы объявляем службу Cloud Run, используя сервисный контейнер, который мы нажали ранее:

Если вы пытаетесь развернуть проект, и вы смущаетесь в отношении ценностей переменных Terraform, которые вы должны использовать в файле Terraform.tfvars (не совершившись в репо), вот значения из моей конкретной настройки/GCP проекта как пример:

Чтобы начать развертывание услуг, мы впервые создаем План террафора , где террафом рассчитывает изменения, которые необходимо сделать в инфраструктуру:

$ make tf-plan

Тогда мы Применить перемены:

$ make tf-apply

который будет производить выход, аналогичный:

Outputs:

locations-svc-url = [https://locations-svc-qqx6qmklha-ew.a.run.app](https://locations-svc-qqx6qmklha-ew.a.run.app)
users-svc-url = [https://users-svc-qqx6qmklha-ew.a.run.app](https://users-svc-qqx6qmklha-ew.a.run.app)

Опорные услуги развернуты и готовы к использованию.

Ворота API

Мы, наконец, можем перейти к шлюзу API. К сожалению, на момент написания этой статьи GCP API Gateway еще не поддерживается в поставщике Google Google Terraform, поэтому я не мог включать его в конфигурацию Terraform. Однако я нашел это Выпуск GitHub Обсуждение его возможной реализации, поэтому поддержка может быть добавлена в будущем. Как следствие, для этого шага мы вернемся к императивным командам Shell GCloud.

Наиболее важный элемент конфигурации для нашего шлюза API является SPECT OPRAPI:

Он описывает нашу API и указывает на шлюз API для маршрута обрабатывает определенные пути HTTP-запроса на наши бэкэнды.

Теперь мы можем развернуть шлюз:

$ # PROJECT\_ID and REGION hold the GCP project id and region
$ PROJECT\_ID=$PROJECT\_ID REGION=$REGION make deploy-api-gateway

Затем мы распечатаем URL-драйву:

$ PROJECT\_ID=$PROJECT\_ID REGION=$REGION make get-gateway-url

который должен выводить что-то вроде:

[https://gateway-demo-4s0vqu9q.ew.gateway.dev](https://gateway-demo-4s0vqu9q.ew.gateway.dev)

Давайте проверим Gateway/пользователи API:

$ curl -s [https://gateway-demo-4s0vqu9q.ew.gateway.dev/users|jq](https://gateway-demo-4s0vqu9q.ew.gateway.dev/users%7Cjq)
[
  {
    "id": 1,
    "name": "Mike"
  },
  {
    "id": 2,
    "name": "John"
  }
]

А теперь/местоположение маршрута:

$ curl -s [https://gateway-demo-4s0vqu9q.ew.gateway.dev/locations|jq](https://gateway-demo-4s0vqu9q.ew.gateway.dev/users%7Cjq)
[
  {
    "id": 1,
    "name": "London",
    "country": "UK"
  },
  {
    "id": 2,
    "name": "Paris",
    "country": "FR"
  }
]

Это работает, и мы сделаем 🎉🎊.

Заключение

Очевидно, что в этом простом примере мы только поцарапали поверхность возможностей, которые могут обеспечить такую услугу. Например, мы не обсудили никаких более продвинутых функций, таких как аутентификация или ограничение скорости. Не стесняйтесь дать ему попробовать и дайте мне знать, каковы ваши первые впечатления. Вы можете проверить полные документы здесь Отказ

Оригинал: «https://dev.to/didil/gcp-api-gateway-demo-with-terraform-go-cloud-run-3o9e»