yandex-cloud-deploy-fn

Yandex Cloud function deployment CLI

Usage no npm install needed!

<script type="module">
  import yandexCloudDeployFn from 'https://cdn.skypack.dev/yandex-cloud-deploy-fn';
</script>

README

yandex-cloud-deploy-fn

CLI для деплоя функций в Yandex Cloud на Node.js.

Зачем

Отличия от связки serverless framework + yandex-cloud-serverless-plugin:

  • ✅  Нет зависимости на yc cli (#13)
  • ✅  Нет лишних сообщений в логах вида Serverless: Unknonwn function "xxx" found (#18)
  • ✅  загрузка кода через Object Storage (для архивов > 3.5 Mb)
  • ✅  Интерактивное выставление тегов
  • ❌  Пока деплоится только функция. Триггеры, сервисные аккаунты и message queue не создаются

Установка

npm i -D yandex-cloud-deploy-fn

Использование

Создайте в корне проекта конфиг deploy.config.js следующего вида:

module.exports = {
  useCliConfig: true,
  functionName: 'test-fn',
  deploy: {
    files: [ 'package*.json', 'dist/**' ],
    handler: 'dist/index.handler',
    runtime: 'nodejs14',
    timeout: 5,
    memory: 128,
    environment: {
      NODE_ENV: 'production'
    },
  },

  // === Для загрузки больших функций через object storage ===
  // storage: {
  //   bucketName: 'upload',
  //   bucketPath: '/',
  //   accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  //   secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  // },

  // === Для интерактивного выставления тегов ===
  // tags: [
  //   'testing',
  //   { name: 'prod', cmdPre: 'TAG={newVersionTag} npm run test' },
  // ]
};

Для деплоя функции запустите:

npx deploy-fn

Пример вывода:

[test-fn]: Deploying function "test-fn"...
[test-fn]: Creating zip...
[test-fn]: Authorized by: yc-cli
[test-fn]: Sending API request...
[test-fn]: Waiting operation complete...
[test-fn]: Version created: d4e5qq24h0cpqg9rfmi3
[test-fn]: Version size: 20 Kb
[test-fn]: Done (25s).

Для интерактивного выставления тегов запустите:

npx deploy-fn-tag

Пример вывода:

? Select version of "test-fn": (Use arrow keys)
❯ d4e5qq24h0cpqg9rfmi3  $latest
  d4ebrpdvjl50mtccr5pu  prod
  d4eiuu6oc7thuu11v1jo  prod-1,testing
  d4ecqudlemi9f2qijgh6  prod-2

? Select tag: (Use arrow keys)
❯ prod
  testing
  all (prod, testing)

Set tag "testing" to version: d4e5qq24h0cpqg9rfmi3

Другие способы авторизации

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

  1. Сгенерите файл auth-key.json:

    yc iam key create --service-account-name <service-account-name> -o auth-key.json
    
  2. Измените deploy.config.js:

    module.exports = {
    -  useCliConfig: true,
    +  authKeyFile: 'auth-key.json',
    ...
    

Подробнее про способы авторизации можно посмотреть в доке по yandex-cloud-lite.

Лицензия

MIT @ Vitaliy Potapov