Yandex Cloud
  • Services
  • Solutions
  • Why Yandex Cloud
  • Pricing
  • Documentation
  • Contact us
Get started
Language / Region
© 2022 Yandex.Cloud LLC
Yandex Cloud Functions
  • Comparison with other Yandex Cloud services
  • Getting started
    • Overview
    • Creating a function
      • Overview
      • Node.js
      • Python
      • Go
      • PHP
      • Bash
      • Java
    • Creating a trigger
      • Overview
      • Timer
      • Trigger for Message Queue
      • Trigger for Object Storage
      • Trigger for Container Registry
      • Trigger for Cloud Logs
      • Trigger for Cloud Logging
      • Trigger for Yandex IoT Core
      • Trigger for budgets
      • Trigger for Data Streams
  • Step-by-step instructions
    • All instructions
    • Using functions to get an IAM token for a service account
    • Connecting to managed databases from functions
    • Managing rights to access functions
    • Managing functions
      • Creating a function
      • Managing function versions
      • Working in the code editor
      • Invoking a function
      • Updating a function
      • Scaling a function
      • Function monitoring
      • Viewing the execution log
      • Deleting a function
    • Managing triggers
      • Getting information about a trigger
      • Creating a timer
      • Creating a trigger for Message Queue
      • Creating a trigger for Object Storage
      • Creating a trigger for Container Registry
      • Creating a trigger for Cloud Logs
      • Creating a trigger for Cloud Logging
      • Creating a trigger for Yandex IoT Core
      • Creating a trigger for budgets
      • Creating a trigger for Data Streams
      • Updating a trigger
      • Trigger monitoring
      • Deleting a trigger
  • Concepts
    • Overview
    • Function
    • Invoking a function
    • Runtime environment
      • Overview
      • Environment
      • Execution context
      • Preloaded runtime environment
    • Builder
    • Trigger
      • Overview
      • Timer
      • Trigger for Message Queue
      • Trigger for Object Storage
      • Trigger for Container Registry
      • Trigger for Cloud Logs
      • Trigger for Cloud Logging
      • Trigger for Yandex IoT Core
      • Trigger for budgets
      • Trigger for Data Streams
    • Dead Letter Queue
    • Log groups
    • Backups
    • Quotas and limits
  • Developing in Node.js
    • Overview
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Handling errors
    • Using the SDK
  • Developing in Python
    • Overview
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Handling errors
    • Using the SDK
  • Developing in Go
    • Overview
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Handling errors
    • Using the SDK
  • Developing in PHP
    • Overview
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Handling errors
  • Developing in Bash
    • Overview
    • Request handler
    • Logging
    • Handling errors
    • Using the SDK
  • Developing in Java
    • Overview
    • Programming model
      • Overview
      • Function interface
      • YcFunction interface
      • HttpServlet class
      • Spring Boot
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Handling errors
    • Using the SDK
  • Developing in R
    • Overview
    • Programming model
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Handling errors
  • Developing in C#
    • Overview
    • Programming model
      • Overview
      • Function interface
      • YcFunction interface
    • Managing dependencies
    • Request handler
    • Invocation context
    • Logging
    • Handling errors
    • Using the SDK
  • Practical guidelines
    • Creating skills for Alice
    • Deploying a web application
    • Developing a skill for Alice and a website with authorization
    • Writing data from a device to Managed Service for PostgreSQL
    • Developing a Slack bot
    • Developing a Telegram bot
    • Connecting to a YDB database from a Python function
    • Connecting to a YDB database from a function in Node.js
    • Converting a video to a GIF in Python
    • Building Node.js function using TypeScript
  • Pricing policy
  • Access management
  • API Functions reference
    • Authentication in the API
    • gRPC
      • Overview
      • FunctionService
      • OperationService
    • REST
      • Overview
      • Function
        • Overview
        • create
        • createVersion
        • delete
        • get
        • getVersion
        • getVersionByTag
        • list
        • listAccessBindings
        • listOperations
        • listRuntimes
        • listScalingPolicies
        • listTagHistory
        • listVersions
        • removeScalingPolicy
        • removeTag
        • setAccessBindings
        • setScalingPolicy
        • setTag
        • update
        • updateAccessBindings
  • API Triggers reference
    • Authentication in the API
    • gRPC
      • Overview
      • TriggerService
      • OperationService
    • REST
      • Overview
      • Trigger
        • Overview
        • create
        • delete
        • get
        • list
        • listOperations
        • pause
        • resume
        • update
  • Questions and answers
  1. Step-by-step instructions
  2. Managing functions
  3. Scaling a function

Scaling a function

Written by
Yandex Cloud
,
improved by
Kirill S.
  • Viewing scaling settings
  • Adding scaling settings
  • Deleting scaling settings

Incoming requests are processed by the function one at a time. If the function is called faster than one instance can process the request, Cloud Functions scales the function by running additional function instances. You can set the following:

  • zone_instances_limit: Number of function instances in an availability zone.
  • zone_requests_limit: Number of concurrent function calls in an availability zone.

Note

Function calls are distributed across availability zones randomly. Cloud Functions does not guarantee their even distribution across zones. For example, all calls, regardless of their number, might end up in the same zone.

When the number of function instances reaches the zone_instances_limit, Cloud Functions stops scaling it. If there are more function calls than instances available, the call is queued and treated as a call-in-progress. When the number of calls-in-progress reaches the zone_requests_limit, the service stops queuing calls and returns the 429 TooManyRequests error.

You can configure different scaling settings for different function versions using tags. Scaling settings will be valid for the function version that the specified tag is assigned to. Function versions are scaled independently of each other.

The scaling settings must be within the quotas. If the setting value is zero, the function is scaled within the quotas.

Viewing scaling settings

Management console
CLI
API
Yandex Cloud Toolkit
  1. In the management console, select the folder containing your function.
  2. Open Cloud Functions.
  3. Select a function.
  4. Under Version history, mouse over the version tag of the function (such as, $latest) whose scaling settings you wish to view.
  5. Information on these scaling settings will be displayed in a pop-up window:
    • zone_instances_limit: Number of function instances in an availability zone.
    • zone_requests_limit: Number of concurrent function calls in an availability zone.

If you don't have the Yandex Cloud command line interface yet, install and initialize it.

The folder specified in the CLI profile is used by default. You can specify a different folder using the --folder-name or --folder-id parameter.

To view a function's scaling settings, run the command:

	yc serverless function list-scaling-policies --id=d4eokpuol55h********

Where:

  • --id: Function ID. To find out the ID, request a list of functions.

Result:

	+----------------------+---------+----------------------+---------------------+
	|     FUNCTION ID      |   TAG   | ZONE INSTANCES LIMIT | ZONE REQUESTS LIMIT |
	+----------------------+---------+----------------------+---------------------+
	| d4eokpuol55hmj15k7g1 | $latest |                    1 |                   2 |
	+----------------------+---------+----------------------+---------------------+

You can view a function's scaling settings using the listScalingPolicies.

You can view function scaling settings using the Yandex Cloud Toolkit plugin for the IDE family on the IntelliJ platform from JetBrains.

Adding scaling settings

Management console
CLI
Terraform
API
Yandex Cloud Toolkit
  1. In the management console, select the folder containing your function.
  2. Open Cloud Functions.
  3. Select a function.
  4. Under Version history, mouse over the version tag of the function (such as, $latest) you wish to add scaling settings for.
  5. In the pop-up window, click Add.
  6. In the window that opens, specify:
    • zone_instances_limit: Number of function instances in an availability zone.
    • zone_requests_limit: Number of concurrent function calls in an availability zone.
  7. Click Save.

To add scaling settings for a function, run the command:

	yc serverless function set-scaling-policy \
	  --id=d4eokpuol55h******** \
	  --tag=\$latest \
	  --zone-instances-limit=1 \
	  --zone-requests-limit=2

Where:

  • --id: Function ID. To find out the ID, request a list of functions.
  • --tag: Function version tag.
  • --zone-instances-limit: Number of function instances.
  • --zone-requests-limit: Number of calls-in-progress.

Result:

	function_id: d4eokpuol55h********
	tag: $latest
	zone_instances_limit: "1"
	zone_requests_limit: "2"

With Terraform, you can quickly create a cloud infrastructure in Yandex Cloud and manage it by configuration files. They store the infrastructure description in HashiCorp Configuration Language (HCL). Terraform and its providers are distributed under the Mozilla Public License.

For more information about the provider resources, see the documentation on the Terraform site or mirror site.

If you change the configuration files, Terraform automatically determines which part of your configuration is already deployed and what should be added or removed.

If you don't have Terraform, install it and configure the Yandex Cloud provider.

To add scaling settings:

  1. In the configuration file, describe the parameters of resources that you want to create:

    • yandex_function_scaling_policy: Description of function scaling settings.
      • function_id: Function ID.
      • policy: Scaling settings.
      • policy.0.tag: Function version tag.
      • policy.0.zone_instances_limit: Number of function instances.
      • policy.0.zone_requests_limit: Number of calls in progress.

    Example configuration file structure:

    provider "yandex" {
        token     = "<service account OAuth or static key>"
        folder_id = "<folder ID>"
        zone      = "ru-central1-a"
    }
    
    	resource "yandex_function_scaling_policy" "my_scaling_policy" {
    		function_id = "are1samplefu********"
    		policy {
    			tag = "$latest"
    			zone_instances_limit = 2
    			zone_requests_limit  = 1
    	  	}
    	}
    

    For more information about the resources you can create using Terraform, see the provider documentation.

  2. Make sure that the configuration files are correct.

    1. In the command line, go to the directory where you created the configuration file.
    2. Run the check using the command:
      terraform plan
      

    If the configuration is described correctly, the terminal displays a list of created resources and their parameters. If there are errors in the configuration, Terraform points them out.

  3. Deploy the cloud resources.

    1. If the configuration doesn't contain any errors, run the command:
      terraform apply
      
    2. Confirm that you want to create the resources.

    Afterwards, all the necessary resources are created in the specified folder. You can check that the resources are there with the correct settings using the management console.

You can add scaling settings for a function using the setScalingPolicy.

You can add function scaling settings using the Yandex Cloud Toolkit plugin for the IDE family on the IntelliJ platform from JetBrains.

Deleting scaling settings

Management console
CLI
API
Yandex Cloud Toolkit
  1. In the management console, select the folder containing your function.
  2. Open Cloud Functions.
  3. Select a function.
  4. Under Version history, mouse over the version tag of the function (such as, $latest) which you wish to delete scaling settings for.
  5. In the pop-up window, click Change.
  6. To delete a scaling setting, set it equal to zero.
  7. Click Save.

To delete a function's scaling settings, run the command:

	yc serverless function remove-scaling-policy \
	  --id=d4eokpuol55h******** \
	  --tag=\$latest

Where:

  • --id: Function ID. To find out the ID, request a list of functions.
  • --tag: Function version tag.

You can delete scaling settings for a function using the removeScalingPolicy.

You can delete function scaling settings using the Yandex Cloud Toolkit plugin for the IDE family on the IntelliJ platform from JetBrains.

Was the article helpful?

Language / Region
© 2022 Yandex.Cloud LLC
In this article:
  • Viewing scaling settings
  • Adding scaling settings
  • Deleting scaling settings