import { SDK } from '@nebius/js-sdk';
import {
AttachedDiskSpec_AttachMode,
CreateDiskRequest,
CreateInstanceRequest,
DiskService as DiskServiceClient,
DiskSpec_DiskType,
InstanceService as InstanceServiceClient,
} from '@nebius/js-sdk/api/nebius/compute/v1/index';
import { CredentialsFileReader } from '@nebius/js-sdk/runtime/service_account/credentials_file';
async function createInstance() {
const sdk = new SDK({
userAgentPrefix: '<application_name>/<application_version_or_comment>',
credentials: new CredentialsFileReader('<credentials_file_path>'),
});
try {
const diskService = new DiskServiceClient(sdk);
const instanceService = new InstanceServiceClient(sdk);
// Create the boot disk.
const diskOperation = await diskService.create(
CreateDiskRequest.create({
metadata: {
parentId: '<project_ID>',
name: 'my-boot-disk',
},
spec: {
size: {
$case: 'sizeGibibytes',
sizeGibibytes: 93,
},
type: DiskSpec_DiskType.NETWORK_SSD,
source: {
$case: 'sourceImageFamily',
sourceImageFamily: {
imageFamily: '<image_family_name>',
},
},
},
}),
).result;
await diskOperation.wait();
console.log('Boot disk ID:', diskOperation.resourceId());
// Create the VM that uses the boot disk.
const instanceOperation = await instanceService.create(
CreateInstanceRequest.create({
metadata: {
parentId: '<project_ID>',
name: 'my-vm',
},
spec: {
resources: {
platform: '<platform_name>',
size: {
$case: 'preset',
preset: '<preset_name>',
},
},
networkInterfaces: [
{
name: 'eth0',
subnetId: '<subnet_ID>',
ipAddress: {},
},
],
bootDisk: {
attachMode: AttachedDiskSpec_AttachMode.READ_WRITE,
type: {
$case: 'existingDisk',
existingDisk: {
id: diskOperation.resourceId(),
},
},
deviceId: 'boot-disk',
},
},
}),
).result;
await instanceOperation.wait();
console.log('VM ID:', instanceOperation.resourceId());
} finally {
await sdk.close();
}
}
await createInstance();