В серии постов мы представим новый IAC (Инфраструктура в качестве кода) Инструмент, Grucloud Отказ Это проект с открытым исходным кодом для автоматизации развертывания вашей инфраструктуры на основных облачных поставщиков (AWS, GCP, Azure и etc …). Он использует знакомый язык JavaScript.
Grucloud использует API, предоставленные облачными поставщиками. Он предоставляет CLI для развертывания, списка и автоматически уничтожать ресурсы для вас. Разработчик должен описать желаемую инфраструктуру в Конфигурация файлов . и использовать Выделенные модули И, наконец, используйте Grucloud Cli Отказ
Grucloud предоставляет примеры желаемых инфраструктур, готовых к использованию для основных поставщиков: Amazon Web Services, Azure и Google Cloud.
Мы будем использовать Amazon Web Services как наш первый провайдер и предпринять как должное, что у вас есть учетные данные AWS (чек AWS Configure
).
В этом Первый эпизод Мы показываем, как Grucloud может легко развернуть на AWS статический веб-сайт (например, a.g app app) через http.
Что для вас grucloud?
Разработчик будет использовать AWS CLI или веб-интерфейс для развертывания статических файлов из ведра AWS S3:
- Создайте ведро с правильным именем.
- Установите правильные параметры ведра: ACL и WebsiteConFiguration, чтобы включить статический хостинг сайта и публичный доступ
- Загрузите файлы на объект S3 в новом ведре.
Вывод будет URL, который дан AWS.
Grucloud создан для автоматизации этого процесса ручного создания.
Требования:
Учитывая, что у вас есть учетная запись AWS, вам нужно:
- установить AWS CLI
- иметь полномочия AWS: AWS доступа к ключу и секрет ключ
- Узел> 14,
- Чтобы установить менеджер пакетов Лерна и пакет NPM-контрольные обновления
npm install -g lerna npm install -g npm-check-updates lerna init
Это создаст следующие файлы и структуру:
lerna.json package.json ├── packages/
- установить Grucloud CLI глобально с
npm install -g @grucloud/core
Процесс Grucloud для AWS
Начиная
Вы можете клонировать примеры проекта установите зависимости и запустите Лерна Чтобы установить все пакеты в каждой папке под Грюуд-примеры/пакеты (Но не подпапки, например, наклейкуйте приложение).
git clone... cd grucloud-examples npm install npm run updatePacks npm run bootstrap
Кроме того @ grucloud/core
Зависимости являются:
"dependencies": { "@grucloud/provider-aws": "^1.10.25", "axios": "^0.21.1", "mime-types": "^2.1.30", "rubico": "^1.6.23" },
Ниже приведен упрощенное изображение папок в репозитории GitHub Примеры Grucloud
$grucloud-examples/packages> tree -d -L 2 ├── ep1-static-s3-http │ ├── frontend │ └── app-react │ ├── ( my-example ) │ ├── ep2-static-s3-https │ ├── frontend │ └── app-react │ ├── module-aws-s3-http │ └── module-aws-s3-https-cloudfront
Настройте пример «EP1-Static-S3-HTTP»
Перейдите к папке Пакеты/EP1-Static-S3-HTTP
Отказ
Вы можете создать папку с вашим примером, скажем, MKDIR Frontend/мой пример
и вставьте там ваши статические файлы там. Мы также предоставили пример — приложение React — что вам нужно будет построить. Он расположен в ./frontend/app- реагировать
cd frontend/app-react npm install npm run build
Grucloud нужно:
- S3 Ведро Имя ( tutogrucloud1-module.com в нашем примере),
Обратите внимание, что имя ведра имеет некоторые ограничения: он должен быть согласно DNS (глобально уникальный, строчный …] ( https://docs.aws.amazon.com/amazons3/latest/dev-redired/usingbucket.html) Несомненно
- Путь к папке где файлы сборки статического сайта являются ( ./frontend/мой пример Если вы предоставляете свой как выше, или ./frontend/app-react/build/ Для приведенного примера).
Вам нужно будет изменить config.js Файл с этими двумя записями:
//ep1-static-s3-http/config.js const pkg = require("./package.json"); module.exports = () => ({ projectName: pkg.name, bucketName: "tutogrucloud1-module.com", websiteDir: path.resolve(__dirname, "./frontend/app-react/build/"), });
Точка входа в package.json Файл это Iac.js
Отказ Это требует двух выделенных модулей:
- NPM Пакет @ grucloud/provider-aws , уже установлен как зависимость в package.json С
- «Домашний модуль» Модуль-AWS-S3-HTTP Расположен в
Пакеты/Модуль-AWS-S3- http.
//ep1-static-s3-http/iac.js const assert = require("assert"); const { AwsProvider } = require("@grucloud/provider-aws"); const ModuleS3Http = require("../module-aws-s3-http"); exports.createStack = async () => { const provider = AwsProvider({ configs:[ require("./config"), ModuleS3Http.config ] }); const s3HttpResources = await ModuleS3Http.createResources({ provider }); assert(s3HttpResources) return { provider, resources: s3HttpResources, hooks: require("./hooks"), }; };
Запустить CLI Grucloud
Мы используем одну команду для автоматического развертывания ресурсов на S3
gc apply
(И ответьте «да»).
Ручная проверка развертывания
Если все прошло гладко, AWS доставил URL http://tutogrucloud1-module.com.s3-website-us-east-1.amazonaws.com/
где создано ведро.
Grucloud предоставляет команду Список GC
отображать живые ресурсы.
Автоматизированная проверка: крючки
Grucloud предоставляет способ выполнить функции, когда развертывание закончено. Файл с именем Cooks.js Программно выбирает веб-страницу (сгенерированный URL AWS выше). Он использует библиотеку AXIOS (установленная через NPM Install Axios
).
// hooks.js const assert = require("assert"); const Axios = require("axios"); module.exports = ({ resources }) => { const { s3Bucket } = resources; const bucketStorageUrl = `http://${s3Bucket.name}.s3-website-us-east-1.amazonaws.com`; const axios = Axios.create({ timeout: 15e3, withCredentials: true, }); return { onDeployed: { actions: [ { name: `get ${bucketStorageUrl}`, command: async () => { const result = await axios.get(bucketStorageUrl); assert.equal(result.headers["content-type"], `text/html`); assert.equal(result.status, 200); }, }, ], }, }; };
Нам также нужно изменить Iac.js Отказ Createstack Функция должна возвращать «крючки», а также:
//iac.js ... exports.createStack = async () => { [...] return { provider, resources: { s3Bucket }, hooks: require("./hooks") };
Крючки могут быть вызваны вручную с GC Run. - непрерывно
или GC Run --ondested
s3-http git:(main) ✗ gc run --onDeployed Running OnDeployed resources on 1 provider: aws ✓ aws ✓ Initialising ✓ default::onDeployed ✓ get http://tutogrucloud1.com.s3-website-us-east-1.amazonaws.com Command "gc run --onDeployed" executed in 1s
Очистка
Вы можете уничтожить свою инфраструктуру, чтобы сэкономить на затратах с одной одной командой:
gc destroy
Grucloud позаботится о разрушении ресурсов в правильный заказ Отказ
Этот первый пример вводит, как использовать GRUCLOUD и JavaScript для автоматизации развертывания, в список и уничтожение ресурсов.
Ниже приведен список доступных эпизодов:
- Эпизод 1: Статический сайт на AWS S3 через http
- Эпизод 2: Статический сайт на AWS S3 через HTTPS с доменным именем
Grucloud можно сделать, кроме того, развертывает более сложные инфраструктуры с виртуальными машинами, VPCS, IAM ролями и политиками, эластичной службой Kubernetes … На крупных облачных поставщиках (AWS, GCP, Azure). Это также будет обработано в других эпизодах.
Для получения дополнительной информации посетите Grucloud и следовать в Twitter @ grucloud_iac.
Оригинал: «https://dev.to/ndrean/automate-your-web-site-deployments-on-aws-s3-with-grucloud-episode-1-2c2e»