Using the SDK for Java functions
The runtime environment does not have a pre-installed library for accessing the Yandex Cloud API. To use the library, add a dependency to your Java application. The library source code is available on GitHub
java-sdk-functions
: Only for Java 11java-sdk-serverless
: Java 17 or higher
Other modules are available for any version of Java.
SDK (Software Development Kit)
Example
The following function receives the folder ID (folderId
) as an input, gets authenticated in the SDK, retrieves a list of all Compute Cloud VMs in the specified folder, and restarts those that are stopped. As a result, it returns a message with the number of running instances.
Warning
To invoke the function, use the Yandex Cloud CLI or an HTTP request with the ?integration=raw
parameter.
import yandex.cloud.api.compute.v1.InstanceOuterClass;
import yandex.cloud.api.compute.v1.InstanceServiceGrpc;
import yandex.cloud.api.compute.v1.InstanceServiceOuterClass;
import yandex.cloud.sdk.ServiceFactory;
import yandex.cloud.sdk.auth.Auth;
import java.util.function.Function;
public class Handler implements Function<String, String> {
@Override
public String apply(String folderId) {
// Authorization in SDK via a service account
var defaultComputeEngine = Auth.computeEngineBuilder().build();
var factory = ServiceFactory.builder()
.credentialProvider(defaultComputeEngine)
.build();
var instanceService = factory.create(InstanceServiceGrpc.InstanceServiceBlockingStub.class, InstanceServiceGrpc::newBlockingStub);
var listInstancesRequest = InstanceServiceOuterClass.ListInstancesRequest.newBuilder().setFolderId(folderId).build();
// Getting a list of VMs based on folderId specified in the request
var listInstancesResponse = instanceService.list(listInstancesRequest);
var instances = listInstancesResponse.getInstancesList();
var count = 0;
for (var instance : instances) {
if (instance.getStatus() != InstanceOuterClass.Instance.Status.RUNNING) {
var startInstanceRequest = InstanceServiceOuterClass.StartInstanceRequest.newBuilder().setInstanceId(instance.getId()).build();
// Starting VMs with VM IDs specified in the request
var startInstanceResponse = instanceService.start(startInstanceRequest);
if (!startInstanceResponse.hasError()) {
count++;
}
}
}
return String.format("Started %d instances", count);
}
}