Публікація Go API на Google Cloud

pic

Надання можливостей розробникам з GCP: безшовне керування API для досягнення ваших цілей!
У сучасній розробці програмного забезпечення створення надійного та масштабованого API — це лише пів справи. Не менш важливо — впровадити це API для користувачів, забезпечивши при цьому безперебійне взаємодію з базами даних. Ось тут на допомогу приходять Google Cloud Platform (GCP) та MongoDB!

У цій статті ми покроково розглянемо публікацію API, що базується на Go, яке взаємодіє з MongoDB на GCP. Від підключень до бази даних до процесів розгортання, ви отримаєте всебічне розуміння ефективного і ефективного управління API. Готові дослідити цю потужну комбінацію? Давайте розпочнемо!

A. Створення та розробка вашого API-проекту за допомогою Go

1- Якщо у вас ще не встановлений Go на комп'ютері, спочатку завантажте та встановіть останню версію Go. Потім, якщо у вас немає папки з назвою projects, створіть таку папку. Після цього створіть ваш Go-проект в папці projects, виконавши наступні команди:

cd projects  
mkdir example_api && cd example_api  
go mod init example_api

Результати будуть виглядати так:

pic

2- Відкрийте створену папку проекту в IDE, яку ви використовуєте. Я рекомендую VS Code. Створіть структуру папок і файлів, як на зображенні нижче.

pic

Ви можете отримати доступ до вихідного коду цього проекту в мій GitHub репозиторій:
https://github.com/enescerrahoglu/example_api

B. Створення проекту MongoDB

Увійдіть до MongoDB Console.

1- Створіть проект. Потім створіть кластер. Ви можете вибрати конфігурації під час створення кластера.

pic

2- Після процесу створення деплойменту ви побачите значення імені користувача та пароля для користувача бази даних у розділі Connect to [Created Cluster]. Натисніть на кнопку Create Database User. Після того, як користувач бази даних буде створений, перейдіть до наступного етапу, натиснувши кнопку Choose a connection method.

pic

3- На другому етапі виберіть опцію Drivers під заголовком Connect to your application.

pic

4- На третьому етапі, в розділі Connect, переконайтеся, що вибрано драйвер Go. Відкрийте термінал і встановіть драйвери, перебуваючи в директорії вашого проекту.

go get go.mongodb.org/mongo-driver/mongo

Скопіюйте рядок підключення, зазначений на кроці 3. Переконайтеся, що ваш пароль з'являється в рядку підключення. Якщо Show Password вимкнено, ви можете активувати цей перемикач.

pic

5- Вставте рядок підключення, який ви скопіювали для ключа MONGO_URI у файл .env у проекті та збережіть файл.

pic

Завершіть процес у MongoDB Console.

6- Створіть базу даних та колекцію з ім'ям users для кластеру, який ви створили.
Назва бази даних, створена на скріншоті: example-db
Назва колекції, створена на скріншоті: users

pic

7- Скопіюйте ім’я бази даних, яку ви створили, і оновіть відповідне поле в проекті.

pic

У проекті для класу UserRepository вказана колекція users.

pic

C. Створення проекту на Google Cloud Platform

1- Створіть новий проект на Google Cloud Platform.

pic

2- Увімкніть Compute Engine API

pic

3- Перейдіть до VPC Network і натисніть Create VPC Network. Заповніть відповідні поля, як показано на скріншоті.
Name: atlas-vpc
Description: mongodb atlas
Subnet creation mode: Automatic

pic

Потім створіть VPC Network, натиснувши кнопку Create внизу сторінки. Залиште сторінку відкритою до завершення створення VPC Network.

pic

D. Пірінг Google Cloud і MongoDB

1- Перейдіть до розділу VPC network peering і натисніть Create Connection, потім натисніть Continue.

pic

2- Введіть ім’я в поле Peering connection name і виберіть VPC Network, який ви створили, у полі Your VPC network. Ми пізніше скопіюємо поля Project ID та VPC network name, які були створені під час пірінгу в MongoDB Atlas Console, і вставимо їх у ці поля. Тому не закривайте цю сторінку.

pic

3- Потім перейдіть до MongoDB Atlas Console та відкрийте розділ Peering в Network Access. Натисніть Add Peering Connection. Виберіть розділ Google Cloud та натисніть Next.

pic

4- Заповніть поля Project ID та VPC Name, як вони з'являються в Google Cloud, і натисніть Initiate Peering.

pic

Якщо пірінг, який ви почали, не з'явився, ви можете оновити сторінку браузера.

pic

Зачекайте, поки значення Atlas GCP Project ID та Atlas VPC Name не будуть створені, можна час від часу оновлювати сторінку.

pic

5- Вставте значення Atlas GCP Project ID в поле Project ID, значення Atlas VPC Name в поле VPC network name та натисніть кнопку Create.

pic

Зачекайте завершення процесу VPC network peering. Якщо в розділі Status не з’явиться активний статус, спробуйте оновити сторінку браузера.

pic

Переконайтеся, що статус пірінгу, який ви почали в MongoDB Atlas Console, має статус Available.

pic

6- Додайте наступні IP-адреси в поле IP Access List одну за одною за допомогою кнопки ADD IP ADDRESS.
IP-адреса: 10.128.0.0/9 та коментар: GCP
IP-адреса: 0.0.0.0/0, коментар не потрібен.
(Щоб дозволити всі запити.)

pic

pic

pic

E. Інтеграція Swagger

go get -u github.com/swaggo/swag  
go get -u github.com/swaggo/gin-swagger  
go get -u github.com/swaggo/files  

go build  

swag init

pic

Результат має виглядати ось так.

Якщо все налаштовано правильно, ви можете отримати доступ до Swagger UI локально, запустивши проект та перейшовши за наступним URL у вашому браузері:

http://localhost:8080/swagger/index.html#/

Крім того, після розгортання проекту в живому середовищі, ви зможете отримати доступ до документації Swagger через:

https://{your_gcp_project_id}.appspot.com/swagger/index.html#/

Це зручний спосіб досліджувати, тестувати та документувати ваші API-ендпоінти як локально, так і в продуктивному середовищі.

pic

F. Розгортання Go API проекту через GCP

Тепер час розгорнути ваш Go API на Google Cloud Platform. Цей процес включає контейнеризацію вашого застосунку за допомогою Docker, завантаження його в реєстр артефактів Google Cloud та розгортання через Cloud Run. Ми пройдемо через кожен етап, щоб ваш API був успішно розгорнутий і доступний.

1- Встановіть Docker Desktop App та запустіть його.
2- Встановіть Google Cloud CLI

[ВАЖЛИВО] Будь ласка, замініть ці значення на значення вашого власного проекту. Потім продовжуйте виконувати наступні команди послідовно.
Мій GCP Project ID: my-example-api-app
Моя назва папки Go проекту: example_api

3- Авторизуйтесь у своєму акаунті Google Cloud. Ця команда відкриває вікно браузера, де ви можете увійти до свого акаунту Google. Після входу облікові дані авторизації будуть збережені локально для використання з командами gcloud.

gcloud auth login

4- Встановіть активний проект у вашому Google Cloud CLI на my-example-api-app. Замініть my-example-api-app на ID вашого Google Cloud проекту. Це забезпечить виконання всіх наступних команд gcloud у контексті вказаного проекту.

gcloud config set project my-example-api-app

5- Створіть Docker-образ для вашого застосунку та позначте його вказаним ім'ям. Замініть /my-example-api-app/example_api на бажаний тег образу. Dockerfile в поточній директорії (.) буде використаний для створення образу.

docker build -t gcr.io/my-example-api-app/example_api .

6- Для тестування, запустіть ваш проект за допомогою docker. Після того як переконаєтесь, що все працює, завершіть процес за допомогою CTRL+C в терміналі.

docker run -p 8080:8080 -e PORT=8080 gcr.io/my-example-api-app/example_api

7- Щоб перевірити, чи працює ваш проект, спочатку використовуйте кнопку Insert Document для додавання зразка запису користувача.
Примітка: Поле id буде автоматично згенероване MongoDB як _id.

pic

8- Далі, після запуску вашого проекту за допомогою Docker, зробіть API запит, використовуючи значення id створеного користувача, як показано в прикладі нижче:

http://localhost:8080/api/users/{userid}

Коли ви зробите цей запит, ви повинні побачити деталі відповідного користувача, що повертаються.

pic

Потім продовжуйте виконувати наступні команди послідовно.

9- Перелічіть всі облікові записи служб, пов'язані з вашим проектом на Google Cloud. Скопіюйте значення EMAIL облікового запису служби, якому ви хочете надати дозволи.

gcloud iam service-accounts list

Надайте роль “Storage Admin” вказаному обліковому запису служби.
Замість YOUREMAILVALUE введіть email облікового запису служби, який ви скопіювали на попередньому кроці.

gcloud projects add-iam-policy-binding my-example-api-app \  
 --member="serviceAccount:YOUR_EMAIL_VALUE" \  
 --role="roles/storage.admin"

10- Перелічіть всі облікові записи, що авторизовані на вашій системі. Скопіюйте email активного облікового запису, яким ви користуєтесь.

gcloud auth list

Надайте роль “Editor” активному обліковому запису. Замініть YOURACTIVEACCOUNT на email адресу вашого активного облікового запису з попереднього кроку.

gcloud projects add-iam-policy-binding my-example-api-app \  
 --member="user:YOUR_ACTIVE_ACCOUNT" \  
 --role="roles/editor"

11- Надішліть ваш локальний вихідний код на Google Cloud Build і позначте його контейнерним образом. Отриманий Docker-образ буде збережений у Artifact Registry на Google Cloud.

gcloud builds submit --tag gcr.io/my-example-api-app/example_api

12- Розгорніть контейнерний образ на Google Cloud Run як серверну безсерверну програму. Замініть my-example-api-app на бажану назву вашого Cloud Run сервісу. Сервіс працюватиме в заданому регіоні (наприклад, europe-west1) та буде доступний для публіки.

~~
--platform=managed \
--region=europe-west1 \
--allow-unauthenticated
```

Переконайтеся, що всі етапи завершилися успішно.

pic

13- Розгорніть додаток на Google App Engine. Ця команда використовує конфігурацію з вашого файлу app.yaml.

gcloud app deploy

Якщо все гаразд, ваш результат виглядатиме так.

pic

🎉 Вітаємо, ваш API тепер доступний за наступним доменом

https://{your_gcp_project_id}.appspot.com

Ви можете протестувати ваш API, надіславши запит на цей ендпоінт, використовуючи значення id користувача, якого ви вручну додали до вашої бази даних.

https://{your_gcp_project_id}.appspot.com/api/users/{user_id}

[ВАЖЛИВО] Вимкніть сканування вразливостей для зниження витрат

  • Google Cloud Platform → Artifact Registry → Vulnerability scanning [Disabled] для всіх Docker Image Repositories

pic

pic

  • Google Cloud Platform → Artifact Registry → Налаштування → Vulnerability scanning [Off]

pic

Висновок

Дотримуючись цього докладного посібника, ви успішно налаштували Go API з MongoDB Atlas і розгорнули його на Google Cloud Platform. Це налаштування надає вам потужну, масштабовану інфраструктуру, яка використовує можливості хмарних сервісів GCP і забезпечує безпечні з'єднання з базою даних через MongoDB Atlas.

Не забувайте регулярно стежити за використанням ресурсів і витратами, особливо щодо сканування вразливостей та інших сервісів GCP. Оновлюйте ваш додаток і залежності та слідуйте кращим практикам безпеки, оскільки ваш додаток зростає.

Тепер у вас є API, готовий до використання в продакшн, який може стати основою для ваших майбутніх потреб у розробці.

🚀 Удачі в кодуванні!

Перекладено з: Publish Go API on Google Cloud

Leave a Reply

Your email address will not be published. Required fields are marked *