Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Serverless Containers
  • Сопоставление с другими сервисами Yandex Cloud
    • Обзор
    • Создание контейнера
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы

В этой статье:

  • Подготовьте Docker-образ контейнера
  • Примеры приложений и Dockerfile
  • Добавьте образ в Serverless Containers
  • Создайте контейнер
  • Создайте ревизию контейнера
  • Вызовите контейнер
  • Что дальше
  1. Начало работы
  2. Создание контейнера

Начало работы с Serverless Containers

Статья создана
Yandex Cloud
Улучшена
Обновлена 21 апреля 2025 г.
  • Подготовьте Docker-образ контейнера
    • Примеры приложений и Dockerfile
  • Добавьте образ в Serverless Containers
    • Создайте контейнер
    • Создайте ревизию контейнера
  • Вызовите контейнер
  • Что дальше

В этой инструкции вы подготовите Docker-образ контейнера в Yandex Container Registry и добавите его в Serverless Containers.

Подготовьте Docker-образ контейнера

Docker-образ — исполняемый пакет, который содержит все необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные окружения и файлы конфигурации.

Приложение должно определять номер порта, на котором принимать запросы, из переменной окружения PORT. Значение переменной задается сервисом автоматически.

Чтобы подготовить Docker-образ контейнера:

  1. Создайте реестр Yandex Container Registry.
  2. Создайте и соберите Docker-образ на основе Dockerfile.
  3. Загрузите Docker-образ в реестр.

Примеры приложений и Dockerfile

Node.js
Python
Go

index.js

const express = require('express');

const app = express();
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.get("/hello", (req, res) => {
    var ip = req.headers['x-forwarded-for']
    console.log(`Request from ${ip}`);
    return res.send("Hello!");
});

app.listen(process.env.PORT, () => {
    console.log(`App listening at port ${process.env.PORT}`);
});

Dockerfile

FROM node:16-slim

WORKDIR /app
RUN npm install express
COPY ./index.js .

CMD [ "node", "index.js" ]

index.py

import os
from sanic import Sanic
from sanic.response import text

app = Sanic(__name__)

@app.after_server_start
async def after_server_start(app, loop):
    print(f"App listening at port {os.environ['PORT']}")

@app.route("/hello")
async def hello(request):
    ip = request.headers["X-Forwarded-For"]
    print(f"Request from {ip}")
    return text("Hello!")

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=int(os.environ['PORT']), motd=False, access_log=False)

Dockerfile

FROM python:3.10-slim

WORKDIR /app
RUN pip install --no-cache-dir --prefer-binary sanic
COPY ./index.py .

CMD [ "python", "index.py" ]

index.go

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    portStr := os.Getenv("PORT")
    fmt.Printf("App listening at port %s\n", portStr)
    http.Handle("/hello", hwHandler{})
    http.ListenAndServe(":"+portStr, nil)
}

type hwHandler struct{}

func (hwHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
    ip := request.Header.Get("X-Forwarded-For")
    fmt.Printf("Request from %s\n", ip)
    writer.WriteHeader(200)
    _, _ = writer.Write([]byte("Hello!"))
}

Dockerfile

FROM golang:latest AS build

WORKDIR /app
ADD index.go .
RUN GOARCH=amd64 go build -a -tags netgo -ldflags '-w -extldflags "-static"' -o server-app *.go

FROM scratch
COPY --from=build /app/server-app /server-app

ENTRYPOINT ["/server-app"]

Добавьте образ в Serverless Containers

Создайте контейнер

Консоль управления
CLI
Terraform
API
  1. В консоли управления перейдите в каталог, в котором хотите создать контейнер.

  2. Выберите сервис Serverless Containers.

  3. Нажмите кнопку Создать контейнер.

  4. Введите имя и описание контейнера. Формат имени:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.
  5. Нажмите кнопку Создать.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

Чтобы создать контейнер, выполните команду:

yc serverless container create --name <имя_контейнера>

Результат:

id: bba3fva6ka5g********
folder_id: b1gqvft7kjk3********
created_at: "2021-07-09T14:49:00.891Z"
name: my-beta-container
url: https://bba3fva6ka5g********.containers.yandexcloud.net/
status: ACTIVE

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

Чтобы создать контейнер и его ревизию:

Примечание

Если реестр или репозиторий с Docker-образом не являются публичными, необходимо указать в настройках ревизии сервисный аккаунт, у которого есть права на скачивание Docker-образа. Например, роль container-registry.images.puller на каталог или реестр, в которых находится Docker-образ.

Если в настройках ревизии указан сервисный аккаунт, у пользователя или сервисного аккаунта, от имени которого создается ревизия, должна быть роль iam.serviceAccounts.user. Она подтверждает права на использование сервисного аккаунта.

  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

    • name — имя контейнера. Обязательный параметр. Требования к имени:

      • длина — от 2 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    • memory — объем памяти в МБ, выделенный контейнеру. По умолчанию — 128 МБ.

    • service_account_id — идентификатор сервисного аккаунта.

    • url — URL Docker-образа в Yandex Container Registry.

    Пример структуры конфигурационного файла:

    provider "yandex" {
     token     = "<OAuth-токен>"
     cloud_id  = "<идентификатор_облака>"
     folder_id = "<идентификатор_каталога>"
     zone      = "ru-central1-a"
    }
    
    resource "yandex_serverless_container" "test-container" {
      name               = "<имя_контейнера>"
      memory             = <объем_памяти>
      service_account_id = "<идентификатор_сервисного_аккаунта>"
      image {
          url = "<URL_Docker-образа>"
      }
    }
    

    Более подробную информацию о параметрах ресурса yandex_serverless_container в Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов: введите в терминал слово yes и нажмите Enter.

      После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления или с помощью команды CLI:

      yc serverless container list 
      

Чтобы создать контейнер, воспользуйтесь методом REST API create для ресурса Container или вызовом gRPC API ContainerService/Create.

Создайте ревизию контейнера

Если реестр или репозиторий с Docker-образом не являются публичными, необходимо указать в настройках ревизии сервисный аккаунт, у которого есть права на скачивание Docker-образа. Например, роль container-registry.images.puller на каталог или реестр, в которых находится Docker-образ.

Если в настройках ревизии указан сервисный аккаунт, у пользователя или сервисного аккаунта, от имени которого создается ревизия, должна быть роль iam.serviceAccounts.user. Она подтверждает права на использование сервисного аккаунта.

Консоль управления
CLI
Terraform
API
  1. В консоли управления перейдите в каталог, в котором находится контейнер.

  2. Выберите сервис Serverless Containers.

  3. Выберите контейнер, ревизию которого хотите создать.

  4. Перейдите на вкладку Редактор.

  5. В разделе Параметры образа:

    • Укажите URL Docker-образа из Yandex Container Registry.
    • Если необходимо, дополнительно укажите параметры ревизии:
      • Команда — команды, которые контейнер выполнит при запуске. Соответствует инструкции ENTRYPOINT в Dockerfile.

      • Аргументы — соответствует инструкции CMD в Dockerfile. Аргументы указываются в формате ключ = значение. Если не указано, будет использоваться значение CMD по умолчанию из Docker-образа.

        В контейнер можно передать несколько аргументов. Для этого нажмите Добавить.

      • Рабочая директория — позволяет изменить рабочую директорию контейнера. Соответствует инструкции WORKDIR в Dockerfile. Рекомендуется устанавливать абсолютные пути к папкам.

  6. Нажмите кнопку Создать ревизию.

Чтобы создать ревизию контейнера, выполните команду:

yc serverless container revision deploy \
  --container-name <имя_контейнера> \
  --image <URL_Docker-образа> \
  --cores 1 \
  --memory 1GB \
  --concurrency 1 \
  --execution-timeout 30s \
  --service-account-id <идентификатор_сервисного_аккаунта> \
  --command '<команда_1>','<команда_2>' \
  --args '<ключ_1=значение_1>','<ключ_2=значение_2>'

Где:

  • --cores — количество ядер, которые доступны контейнеру.

  • --memory — требуемая память. По умолчанию — 128 МБ.

  • --concurrency — максимальное количество одновременных вызовов одного экземпляра контейнера. По умолчанию — 1, максимальное значение — 16. Если вызовов контейнера больше, чем значение concurrency, Serverless Containers масштабирует контейнер — запускает его дополнительные экземпляры.

    Примечание

    Количество экземпляров контейнеров и одновременных запросов к ним в каждой зоне доступности не может превышать квоты.

  • --execution-timeout — таймаут. По умолчанию — 3 секунды.

  • --service-account-id — идентификатор сервисного аккаунта, у которого есть права на скачивание Docker-образа.

  • --command — команды, которые контейнер выполнит при запуске. Указываются через запятую. Соответствует инструкции ENTRYPOINT в Dockerfile.

  • --args — аргументы, соответствует инструкции CMD в Dockerfile. Указываются в формате ключ = значение через запятую. Если не указано, будет использоваться значение CMD по умолчанию из Docker-образа.

Результат:

id: bbajn5q2d74c********
container_id: bba3fva6ka5g********
created_at: "2021-07-09T15:04:55.135Z"
image:
  image_url: cr.yandex/crpd3cicopk7********/test-container:latest
  image_digest: sha256:de8e1dce7ceceeafaae122f7670084a1119c961cd9ea1795eae92bd********
resources:
  memory: "1073741824"
  cores: "1"
execution_timeout: 3s
service_account_id: ajeqnasj95o7********
status: ACTIVE

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

В Terraform ревизия создается при каждом обновлении параметров работы ресурса.

Чтобы создать ревизию:

  1. Обновите в конфигурационном файле параметры ресурса yandex_serverless_container:

    resource "yandex_serverless_container" "test-container" {
      name               = "<имя_контейнера>"
      cores              = "<количество_ядер>"
      memory             = "<объем_памяти>"
      concurrency        = "<одновременные_вызовы>"
      service_account_id = "<идентификатор_сервисного_аккаунта>"
      image {
        url      = "<URL_Docker-образа>"
        command  = ["<команда_1>","<команда_2>"]
        args     = ["<ключ_1=значение_1>","ключ_2=значение_2"]
        work_dir = "<рабочая_директория>"
      }
    }
    

    Где:

  • cores — количество ядер, которые доступны контейнеру.

  • memory — требуемая память. По умолчанию — 128 МБ.

  • concurrency — максимальное количество одновременных вызовов одного экземпляра контейнера. По умолчанию — 1, максимальное значение — 16. Если вызовов контейнера больше, чем значение concurrency, Serverless Containers масштабирует контейнер — запускает его дополнительные экземпляры.

    Примечание

    Количество экземпляров контейнеров и одновременных запросов к ним в каждой зоне доступности не может превышать квоты.

  • command — команды, которые контейнер выполнит при запуске. Указываются через запятую. Соответствует инструкции ENTRYPOINT в Dockerfile.

  • args — аргументы, соответствует инструкции CMD в Dockerfile. Указываются в формате ключ = значение через запятую. Если не указано, будет использоваться значение CMD по умолчанию из Docker-образа.

  • work_dir — позволяет изменить рабочую директорию контейнера. Соответствует инструкции WORKDIR в Dockerfile. Рекомендуется устанавливать абсолютные пути к папкам.

Более подробную информацию о параметрах ресурса yandex_serverless_container в Terraform, см. в документации провайдера.

  1. Создайте ресурсы:

    1. В терминале перейдите в папку, где вы отредактировали конфигурационный файл.

    2. Проверьте корректность конфигурационного файла с помощью команды:

      terraform validate
      

      Если конфигурация является корректной, появится сообщение:

      Success! The configuration is valid.
      
    3. Выполните команду:

      terraform plan
      

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

    4. Примените изменения конфигурации:

      terraform apply
      
    5. Подтвердите изменения: введите в терминале слово yes и нажмите Enter.

    После этого будет создана ревизия. Проверить создание ревизии можно в консоли управления или с помощью команды CLI:

    yc serverless container revision list
    

Чтобы создать ревизию контейнера, воспользуйтесь методом REST API deployRevision для ресурса Container или вызовом gRPC API ContainerService/DeployRevision.

Вызовите контейнер

После создания контейнера вы получите ссылку для вызова. Как узнать ее. Сделайте HTTPS-запрос, передав IAM-токен в заголовке Authorization:

curl \
  --header "Authorization: Bearer $(yc iam create-token)" \
  https://bba3fva6ka5g********.containers.yandexcloud.net/hello

Результат:

Hello!

Что дальше

  • Изучите концепции сервиса.

Была ли статья полезна?

Предыдущая
Обзор
Следующая
Обзор
Проект Яндекса
© 2025 ООО «Яндекс.Облако»