Как начать работать с Yandex Cloud SDK
Yandex Cloud SDK — это комплект средств разработки для взаимодействия с облачной инфраструктурой.
Рассмотрим некоторые возможности SDK на примере пошагового создания виртуальной машины Yandex Compute Cloud.
Чтобы начать работать с Yandex Cloud SDK:
- Подготовьте облако к работе.
- Настройте окружение.
- Создайте файл конфигурации.
- Подготовьте код скрипта.
- Создайте ВМ с помощью скрипта.
Если созданные ресурсы вам больше не нужны, удалите их.
Также см. Примеры использования SDK.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки ВМ, созданной с помощью SDK, входят:
- плата за вычислительные ресурсы ВМ (см. тарифы Yandex Compute Cloud);
- плата за диски ВМ (см. тарифы Yandex Compute Cloud);
- плата за использование динамического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Создайте сервисный аккаунт
-
Создайте сервисный аккаунт.
-
Назначьте сервисному аккаунту роли в зависимости от сервисов, которыми вы хотите управлять с помощью Yandex Cloud SDK.
В данном руководстве для создания ВМ вам понадобится роль compute.admin.
Если вы будете использовать SDK для .NET, также назначьте сервисному аккаунту роль iam.serviceAccounts.admin. Эта роль понадобится для получения авторизованного ключа.
Подготовьте Yandex Cloud CLI
-
Установите Yandex Cloud CLI.
-
Аутентифицируйтесь в Yandex Cloud CLI от имени сервисного аккаунта.
С помощью Yandex Cloud CLI будут получены данные для аутентификации в Yandex Cloud:
- для Node.js, Go, Python, Java — IAM-токен.
- для .NET — авторизованный ключ.
Получите исходные данные
- Получите идентификатор каталога, внутри которого вы будете взаимодействовать с сервисами с помощью Yandex Cloud SDK.
- Подберите подходящий образ для ВМ. Сохраните идентификатор семейства образов, например
ubuntu-2204-lts
. - Создайте пару SSH-ключей, чтобы использовать их для подключения к ВМ.
Подготовьте рабочую директорию
-
В терминале проверьте версию Node.js с помощью команды:
node -v
Yandex Cloud SDK поддерживает версию Node.js 12 и выше. Если Node.js не установлен или нужна более новая версия, выберите подходящий вариант установки на сайте Node.js
. -
Склонируйте репозиторий с примерами Yandex Cloud SDK для Node.js
:git clone https://github.com/yandex-cloud-examples/yc-sdk-quickstart-node-js.git
-
Перейдите в склонированный репозиторий и установите зависимости:
cd yc-sdk-quickstart-node-js && npm i
-
В терминале проверьте версию Go с помощью команды:
go version
Если Go не установлен, выберите подходящий вариант установки на сайте Go
. -
Склонируйте репозиторий с примерами Yandex Cloud SDK для Go
:git clone https://github.com/yandex-cloud-examples/yc-sdk-quickstart-go.git
-
Перейдите в склонированный репозиторий и установите зависимости:
cd yc-sdk-quickstart-go && go tidy
-
В терминале проверьте версию Python с помощью команды для Linux и MacOS:
python3 --version
или для Windows:
python --version
Если Python не установлен, выберите подходящий вариант установки на сайте Python
. -
Склонируйте репозиторий с примерами Yandex Cloud SDK для Python
:git clone https://github.com/yandex-cloud-examples/yc-sdk-quickstart-python.git
-
Перейдите в склонированный репозиторий и установите зависимости:
cd yc-sdk-quickstart-python && pip install yandexcloud
-
В терминале проверьте версию Java с помощью команды:
java --version
Если Java не установлен, выберите подходящий вариант установки на сайте Oracle
. -
Дополнительно установите Apache Maven
для сборки проекта. -
Склонируйте репозиторий с примерами Yandex Cloud SDK для Java
:git clone https://github.com/yandex-cloud-examples/yc-sdk-quickstart-java.git
-
Перейдите в склонированный репозиторий:
cd yc-sdk-quickstart-java
-
В терминале проверьте версию .NET с помощью команды:
dotnet -version
Если .NET не установлен, выберите подходящий вариант установки на сайте Microsoft
. Рекомендуем установить версию 9.0 так как она используется в данной инструкции. Если вы установите другую версию .NET, укажите ее в файлеYC-test
. -
Склонируйте репозиторий с примерами Yandex Cloud SDK для .NET
:git clone https://github.com/yandex-cloud-examples/yc-sdk-quickstart-dotnet.git
-
В склонированном репозитории перейдите в директорию
yc-sdk-quickstart-dotnet
:cd yc-sdk-quickstart-dotnet
Настройте файл конфигурации
Откройте файл config.json
. В нем уже задана базовая конфигурация ВМ, но вы можете указать собственные параметры:
{
"folder_id": "<идентификатор_каталога>",
"username": "user",
"resources": {
"image": {
"family": "ubuntu-2204-lts",
"folder_family_id": "standard-images"
},
"name": "computer",
"resources_spec": {
"memory": 2147483648,
"cores": 2
},
"boot_disk_spec": {
"auto_delete": true,
"disk_spec": {
"type_id": "network-hdd",
"size": 10737418240
}
},
"zone_id": "ru-central1-d",
"platform_id": "standard-v3",
"subnet_id": "<идентификатор_подсети>"
},
"metadata": {
"ssh-keys": "USERNAME:SSH_PUBLIC_KEY",
"user-data": "#cloud-config\n datasource:\n Ec2:\n strict_id: false\n users:\n - name: USERNAME\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n shell: /bin/bash\n ssh_authorized_keys:\n - SSH_PUBLIC_KEY"
},
"labels": {
"yc-sdk": "yes"
}
}
Где:
folder_id
— идентификатор каталога.username
— имя пользователя ВМ.family
— идентификатор семейства образов.folder_family_id
— идентификатор каталога, в котором размещены образы. Для публичных образов —standard-images
.name
— название ВМ.memory
— объем RAM в байтах.cores
— количество vCPU.auto_delete
— указание, что диск должен удаляться вместе с ВМ.type_id
— тип диска ВМ.size
— объем диска в байтах.zone_id
— зона доступности, в которой вы хотите разместить ВМ.platform_id
— идентификатор платформы.subnet_id
— идентификатор подсети.metadata
— метаданные ВМ.labels
— метка ВМ.
Откройте файл config.json
. В нем уже задана базовая конфигурация ВМ, но вы можете указать собственные параметры:
{
"folder_id": "<идентификатор_каталога>",
"username": "user",
"resources": {
"image": {
"family": "ubuntu-2204-lts",
"folder_family_id": "standard-images"
},
"name": "computer",
"resources_spec": {
"memory": 2147483648,
"cores": 2
},
"boot_disk_spec": {
"auto_delete": true,
"disk_spec": {
"type_id": "network-hdd",
"size": 10737418240
}
},
"zone_id": "ru-central1-d",
"platform_id": "standard-v3",
"subnet_id": "<идентификатор_подсети>"
},
"metadata": {
"ssh-keys": "USERNAME:SSH_PUBLIC_KEY",
"user-data": "#cloud-config\n datasource:\n Ec2:\n strict_id: false\n users:\n - name: USERNAME\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n shell: /bin/bash\n ssh_authorized_keys:\n - SSH_PUBLIC_KEY"
},
"labels": {
"yc-sdk": "yes"
}
}
Где:
folder_id
— идентификатор каталога.username
— имя пользователя ВМ.family
— идентификатор семейства образов.folder_family_id
— идентификатор каталога, в котором размещены образы. Для публичных образов —standard-images
.name
— название ВМ.memory
— объем RAM в байтах.cores
— количество vCPU.auto_delete
— указание, что диск должен удаляться вместе с ВМ.type_id
— тип диска ВМ.size
— объем диска в байтах.zone_id
— зона доступности, в которой вы хотите разместить ВМ.platform_id
— идентификатор платформы.subnet_id
— идентификатор подсети.metadata
— метаданные ВМ.labels
— метка ВМ.
Откройте файл config.json
. В нем уже задана базовая конфигурация ВМ, но вы можете указать собственные параметры:
{
"folder_id": "<идентификатор_каталога>",
"username": "user",
"resources": {
"image": {
"family": "ubuntu-2204-lts",
"folder_family_id": "standard-images"
},
"name": "computer",
"resources_spec": {
"memory": 2147483648,
"cores": 2
},
"boot_disk_spec": {
"auto_delete": true,
"disk_spec": {
"type_id": "network-hdd",
"size": 10737418240
}
},
"zone_id": "ru-central1-d",
"platform_id": "standard-v3",
"subnet_id": "<идентификатор_подсети>"
},
"metadata": {
"ssh-keys": "USERNAME:SSH_PUBLIC_KEY",
"user-data": "#cloud-config\n datasource:\n Ec2:\n strict_id: false\n users:\n - name: USERNAME\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n shell: /bin/bash\n ssh_authorized_keys:\n - SSH_PUBLIC_KEY"
},
"labels": {
"yc-sdk": "yes"
}
}
Где:
folder_id
— идентификатор каталога.username
— имя пользователя ВМ.family
— идентификатор семейства образов.folder_family_id
— идентификатор каталога, в котором размещены образы. Для публичных образов —standard-images
.name
— название ВМ.memory
— объем RAM в байтах.cores
— количество vCPU.auto_delete
— указание, что диск должен удаляться вместе с ВМ.type_id
— тип диска ВМ.size
— объем диска в байтах.zone_id
— зона доступности, в которой вы хотите разместить ВМ.platform_id
— идентификатор платформы.subnet_id
— идентификатор подсети.metadata
— метаданные ВМ.labels
— метка ВМ.
Откройте файл config.json
в директории src/main/resources/config
. В нем уже установлена базовая конфигурация ВМ и вам необходимо указать folder_id
и subnet_id
. Но вы можете установить собственные параметры и для других полей:
{
"folder_id": "<идентификатор_каталога>",
"username": "user",
"resources": {
"image": {
"family": "ubuntu-2204-lts",
"folder_family_id": "standard-images"
},
"name": "computer",
"resources_spec": {
"memory": 2147483648,
"cores": 2
},
"boot_disk_spec": {
"auto_delete": true,
"disk_spec": {
"type_id": "network-hdd",
"size": 10737418240
}
},
"zone_id": "ru-central1-d",
"platform_id": "standard-v3",
"subnet_id": "<идентификатор_подсети>"
},
"metadata": {
"ssh-keys": "USERNAME:SSH_PUBLIC_KEY",
"user-data": "#cloud-config\n datasource:\n Ec2:\n strict_id: false\n users:\n - name: USERNAME\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n shell: /bin/bash\n ssh_authorized_keys:\n - SSH_PUBLIC_KEY"
},
"labels": {
"yc-sdk": "yes"
}
}
Где:
folder_id
— идентификатор каталога.username
— имя пользователя ВМ.family
— идентификатор семейства образов.folder_family_id
— идентификатор каталога, в котором размещены образы. Для публичных образов —standard-images
.name
— название ВМ.memory
— объем RAM в байтах.cores
— количество vCPU.auto_delete
— указание, что диск должен удаляться вместе с ВМ.type_id
— тип диска ВМ.size
— объем диска в байтах.zone_id
— зона доступности, в которой вы хотите разместить ВМ.platform_id
— идентификатор платформы.subnet_id
— идентификатор подсети.metadata
— метаданные ВМ.labels
— метка ВМ.
Откройте файл config.json
. В нем уже задана базовая конфигурация ВМ, но вы можете указать собственные параметры:
{
"folder_id": "<идентификатор_каталога>",
"username": "user",
"resources": {
"image": {
"family": "ubuntu-2204-lts",
"folder_family_id": "standard-images"
},
"name": "computer",
"resources_spec": {
"memory": 2147483648,
"cores": 2
},
"boot_disk_spec": {
"auto_delete": true,
"disk_spec": {
"type_id": "network-hdd",
"size": 10737418240
}
},
"zone_id": "ru-central1-d",
"platform_id": "standard-v3",
"subnet_id": "<идентификатор_подсети>"
},
"metadata": {
"ssh-keys": "USERNAME:SSH_PUBLIC_KEY",
"user-data": "#cloud-config\n datasource:\n Ec2:\n strict_id: false\n users:\n - name: USERNAME\n sudo: 'ALL=(ALL) NOPASSWD:ALL'\n shell: /bin/bash\n ssh_authorized_keys:\n - SSH_PUBLIC_KEY"
},
"labels": {
"yc-sdk": "yes"
}
}
Где:
folder_id
— идентификатор каталога.username
— имя пользователя ВМ.family
— идентификатор семейства образов.folder_family_id
— идентификатор каталога, в котором размещены образы. Для публичных образов —standard-images
.name
— название ВМ.memory
— объем RAM в байтах.cores
— количество vCPU.auto_delete
— указание, что диск должен удаляться вместе с ВМ.type_id
— тип диска ВМ.size
— объем диска в байтах.zone_id
— зона доступности, в которой вы хотите разместить ВМ.platform_id
— идентификатор платформы.subnet_id
— идентификатор подсети.metadata
— метаданные ВМ.labels
— метка ВМ.
Создайте ВМ с помощью скрипта
Проект уже настроен для создания ВМ с помощью консольных команд. С помощью комментариев в коде вы можете детальнее узнать из каких шагов состоит процесс создания ВМ.
Запустите файл index.js
командой:
IAM_TOKEN=$(yc iam create-token) \
SSH_PUBLIC_KEY_PATH=./key.pub \
node index.js
Где:
IAM_TOKEN
— IAM-токен, получаемый с помощью Yandex Cloud CLI. Подробнее о командеyc iam create-token
см. в справочнике CLI;SSH_PUBLIC_KEY_PATH
— путь к файлу с публичным SSH-ключом.
Примечание
Перезагрузка системы или оболочки терминала приведет к утрате всех созданных переменных окружения.
После начала создания ВМ в терминале вы увидите следующий текст:
Running Yandex.Cloud operation. ID: fv4qfujd49fc********
Где ID
— идентификатор операции создания ВМ.
Отслеживать статус операции вы можете в консоли управления, а также с помощью Yandex Cloud CLI и API. Подробнее см. на странице Посмотреть операции с ресурсами сервиса Compute Cloud.
Когда ВМ будет создана, вы увидите следующее сообщение:
Created with id fv4qfujd49fc********
Где id
— идентификатор ВМ.
Запустите файл main.go
командой:
IAM_TOKEN=$(yc iam create-token) \
SSH_PUBLIC_KEY_PATH=./key.pub \
go run main.go
Где:
IAM_TOKEN
— IAM-токен, получаемый с помощью Yandex Cloud CLI. Подробнее о командеyc iam create-token
см. в справочнике CLI;SSH_PUBLIC_KEY_PATH
— путь к файлу с публичным SSH-ключом.
Примечание
Перезагрузка системы или оболочки терминала приведет к утрате всех созданных переменных окружения.
После начала создания ВМ в терминале вы увидите следующий текст:
Running Yandex.Cloud operation. ID: fv4qfujd49fc********
Где ID
— идентификатор операции создания ВМ.
Отслеживать статус операции вы можете в консоли управления, а также с помощью Yandex Cloud CLI и API. Подробнее см. на странице Посмотреть операции с ресурсами сервиса Compute Cloud.
Когда ВМ будет создана, вы увидите следующее сообщение:
Created with id fv4qfujd49fc********
Где id
— идентификатор ВМ.
Запустите файл script.py
командой:
IAM_TOKEN=$(yc iam create-token) \
SSH_PUBLIC_KEY_PATH=./key.pub \
python script.py
Где:
IAM_TOKEN
— IAM-токен, получаемый с помощью Yandex Cloud CLI. Подробнее о командеyc iam create-token
см. в справочнике CLI;SSH_PUBLIC_KEY_PATH
— путь к файлу с публичным SSH-ключом.
Примечание
Перезагрузка системы или оболочки терминала приведет к утрате всех созданных переменных окружения.
Работа скрипта разделена на несколько этапов:
-
Запуск скрипта для создания ВМ. Если скрипт не нашел ошибок в формате переданных данных, вы увидите следующее сообщение:
INFO:yandexcloud._channels:Using endpoints from configuration, IAM iam.api.cloud.yandex.net:443, compute compute.api.cloud.yandex.net:443 INFO:yandexcloud._channels:Using endpoints from configuration, IAM iam.api.cloud.yandex.net:443, compute compute.api.cloud.yandex.net:443 INFO:root:Creating initiated
-
Передача данных на сервер для валидации. Если все данные были указаны корректно, вы увидите следующее сообщение:
INFO:root:Running Yandex.Cloud operation. ID: fv45g3nfq0bn********. Description: Create instance. Created at: 2024-12-19 15:52:59. Created by: ajeutahec4**********. Meta: instance_id: "fv4bi87d50**********". INFO:yandexcloud._channels:Using endpoints from configuration, IAM iam.api.cloud.yandex.net:443, operation operation.api.cloud.yandex.net:443
-
Результат операции. После создания ВМ вы получите информацию о ней:
INFO:root:Done Yandex.Cloud operation. ID: fv45g3nfq0bn********. Response: id: "fv42jgaq946dm8ibkjl6" folder_id: "b1g5hnqtug**********" created_at { seconds: 1734614895 } name: "computer" zone_id: "ru-central1-d" platform_id: "standard-v3" resources { memory: 2147483648 cores: 2 core_fraction: 100 } status: RUNNING metadata_options { gce_http_endpoint: ENABLED aws_v1_http_endpoint: ENABLED gce_http_token: ENABLED aws_v1_http_token: DISABLED } boot_disk { mode: READ_WRITE device_name: "fv4sd8kkspslntd0dpvn" auto_delete: true disk_id: "fv4sd8kkspslntd0dpvn" } network_interfaces { index: "0" mac_address: "d0:0d:29:c1:5a:49" subnet_id: "fl8b5ou7m8sihjbftcfk" primary_v4_address { address: "192.168.0.3" one_to_one_nat { address: "51.250.34.207" ip_version: IPV4 } } } serial_port_settings { ssh_authorization: OS_LOGIN } gpu_settings {} fqdn: "fv42jgaq946dm8ibkjl6.auto.internal" scheduling_policy {} network_settings { type: STANDARD } placement_policy {} hardware_generation { legacy_features { pci_topology: PCI_TOPOLOGY_V1 } }. WARNING: All log messages before absl::InitializeLog() is called are written to STDERR E0000 00:00:1734614936.026768 4332467 init.cc:229] grpc_wait_for_shutdown_with_timeout() timed out.
-
Соберите проект командой:
mvn clean package
-
В корневой директории проекта запустите программу командой:
IAM_TOKEN=$(yc iam create-token) \ SSH_PUBLIC_KEY_PATH=key.pub \ java -jar target/java-sdk-examples-2.6.4-jar-with-dependencies.jar
Где:
IAM_TOKEN
— IAM-токен, получаемый с помощью Yandex Cloud CLI. Подробнее о командеyc iam create-token
см. в справочнике CLI;SSH_PUBLIC_KEY_PATH
— путь к файлу с публичным SSH-ключом.
Примечание
Перезагрузка системы или оболочки терминала приведет к утрате всех созданных переменных окружения.
После начала создания ВМ в терминале вы увидите следующий текст:
Running Yandex.Cloud operation. ID: fv4qfujd49fc********
Где
ID
— идентификатор операции создания ВМ.Отслеживать статус операции вы можете в консоли управления, а также с помощью Yandex Cloud CLI и API. Подробнее см. на странице Посмотреть операции с ресурсами сервиса Compute Cloud.
Когда ВМ будет создана, вы увидите следующее сообщение:
Created with id fv4qfujd49fc********
Где
id
— идентификатор ВМ.
В корневой директории проекта запустите программу командой:
yc iam key create \
--output key.json \
--service-account-name <имя_сервисного_аккаунта> && \
AUTH_KEY=$(<key.json) && \
rm key.json && \
SSH_PUBLIC_KEY_PATH=~/key.pub \
dotnet run
Данная команда состоит из следующих частей:
yc iam key create
— команда получения авторизованного ключа в которой:--output
— путь к файлу для записи авторизованного ключа в формате JSON.--service-account-name
— имя сервисного аккаунта, для которого создается ключ.
AUTH_KEY=$(<key.json)
— чтение файла с авторизованным ключом и размещение содержимого ключа в переменнойAUTH_KEY
.rm key.json
— удаление файла с авторизованным ключом. Вы можете пропустить эту часть команды, если планируете повторно использовать авторизованный ключ.SSH_PUBLIC_KEY_PATH=~/key.pub
— установка пути к файлу с публичным SSH-ключом в переменную окруженияSSH_PUBLIC_KEY_PATH
.dotnet run
— запуск скрипта.
Примечание
Перезагрузка системы или оболочки терминала приведет к утрате всех созданных переменных окружения.
После начала создания ВМ в терминале вы увидите следующий текст:
Running Yandex.Cloud operation. ID: fv4qfujd49fc********
Где ID
— идентификатор операции создания ВМ.
Отслеживать статус операции вы можете в консоли управления, а также с помощью Yandex Cloud CLI и API. Подробнее см. на странице Посмотреть операции с ресурсами сервиса Compute Cloud.
Вы можете проверить, что ВМ была создана, в консоли управленияyc-sdk:yes
.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, удалите ВМ из Compute Cloud.