Рубрики
Uncategorized

Автоматизация развертывания — 1-статический веб-сайт на AWS через http с grucloud

В серии постов мы представим новую IAC (инфраструктуру в качестве кода) инструмент GRUCLOUD. Это открытый … Помечено с AWS, DEVOPS, S3, GRUCLOUD.

В серии постов мы представим новый 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, вам нужно:

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»