Adding function scaling settings
You can set the following:
zone_instances_limit
: Number of function instances in the availability zone.zone_requests_limit
: Number of concurrent function calls in the availability zone.provisioned_instances_count
: Number of ready-to-go instances.concurrency
: Maximum number of calls processed concurrently by a single function instance. Available only in certain runtime environments. For more information, see Concurrent function instance calls.
Downtime of provisioned instances and runtime of the function in them are charged additionally.
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.
Note
Scaling settings take effect within five minutes after being configured.
- In the management console
, select the folder containing the function. - Select Cloud Functions.
- Select a function.
- To configure:
- Any scaling setting other than the number of calls processed concurrently by a single function instance (
concurrency
):- Under Version history, hover over the version tag (e.g.,
or$latest
) of the function you want to add scaling settings for. - In the pop-up window, click Add.
- 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.
- provisioned_instances_count: Number of provisioned instances.
- Click Save.
- Under Version history, hover over the version tag (e.g.,
- Number of calls processed concurrently by a single function instance (
concurrency
):- Go to the Editor tab.
- Under Additional settings, in the Concurrent function instance calls section, check Enable and enter the number of concurrent function instance calls.
- Click Save changes.
- Any scaling setting other than the number of calls processed concurrently by a single function instance (
To configure:
-
Any scaling setting other than the number of calls processed concurrently by a single function instance (
concurrency
), run this command:yc serverless function set-scaling-policy \ --id=<function_ID> \ --tag=\$latest \ --zone-instances-limit=1 \ --zone-requests-limit=2 \ --provisioned-instances-count=3
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.--provisioned-instances-count
: Number of ready-to-go instances.
Result:
function_id: d4eokpuol55h******** tag: $latest zone_instances_limit: "1" zone_requests_limit: "2" provisioned_instances_count: "3"
-
Number of calls processed concurrently by a single function instance (
concurrency
), run this command:yc serverless function version create \ --function-name=<function_name> \ --runtime <runtime_environment> \ --entrypoint <entry_point> \ --memory 128m \ --concurrency 2 \ --execution-timeout 3s \ --source-path <path_to_ZIP_archive>
Where:
--function-name
: Name of the function whose version you want to create.--runtime
: Function runtime environment.--entrypoint
: Entry point in the following format:<file_name_without_extension>.<listener_name>
.--memory
: Amount of RAM.--concurrency
: Maximum number of calls processed concurrently by a single function instance.--execution-timeout
: Maximum function running time before the timeout is reached.--source-path
: ZIP archive with the function code and required dependencies.
Result:
done (1s) id: d4evvn8obisa******** function_id: d4elpv8pft63******** created_at: "2020-08-01T19:09:19.531Z" runtime: nodejs18 entrypoint: index.handler resources: memory: "134217728" execution_timeout: 3s image_size: "4096" status: ACTIVE tags: - $latest log_options: folder_id: b1g681qpemb4******** concurrency: "2"
Terraform
For more information about the provider resources, see the documentation on the Terraform
If you change the configuration files, Terraform automatically detects 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:
-
In the configuration file, describe the parameters of the resources you want to create:
yandex_function
: Description of the function being created and its source code.name
: Function name.user_hash
: Any string to identify the function version. When the function changes, update this string, too. The function will update when this string is updated.runtime
: Function runtime environment.entrypoint
: Entry point in the following format:<file_name_without_extension>.<listener_name>
.memory
: Amount of memory allocated for the function, in MB.concurrency
: Maximum number of calls processed concurrently by a single function instance.execution_timeout
: Maximum function running time before the timeout is reached.service_account_id
: ID of the service account to call the function under.content
: Function source code.content.0.zip_filename
: Name of the ZIP archive containing the function source code.
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.
Here is an example of the configuration file structure:
provider "yandex" { token = "<service_account_OAuth_token_or_static_key>" folder_id = "<folder_ID>" zone = "ru-central1-a" } resource "yandex_function" "test-function" { name = "<function_name>" user_hash = "<hash>" runtime = "<runtime_environment>" entrypoint = "<entry_point>" memory = "128" concurrency = "2" execution_timeout = "10" service_account_id = "<service_account_ID>" content { zip_filename = "<path_to_ZIP_archive>" } } resource "yandex_function_scaling_policy" "my_scaling_policy" { function_id = "<function_ID>" policy { tag = "$latest" zone_instances_limit = 2 zone_requests_limit = 1 } }
For more information about resource parameters, see yandex_function
and yandex_function_scaling_policy . -
Check the configuration using this command:
terraform validate
If the configuration is correct, you will get this message:
Success! The configuration is valid.
-
Run this command:
terraform plan
The terminal will display a list of resources with parameters. No changes will be made at this step. If the configuration contains any errors, Terraform will point them out.
-
Apply the configuration changes:
terraform apply
-
Confirm the changes: type
yes
into the terminal and press Enter.
You can check that the scaling settings are added using the management console
yc serverless function list-scaling-policies <function_name_or_ID>
yc serverless function version get <version_ID>
To configure any function scaling setting other than the number of calls processed concurrently by a single function instance (concurrency
), use the setScalingPolicy REST API method for the Function resource or the FunctionService/SetScalingPolicy gRPC API call.
To set the number of calls processed concurrently by a single function instance (concurrency
), create a function version using the createVersion REST API method for the Function resource or the FunctionService/CreateVersion gRPC API call. Add the concurrency
field to the request body.
You can configure any function scaling setting other than the number of calls processed concurrently by a single function instance (concurrency
) using the Yandex Cloud Toolkit plugin