Skip to content

Commit 13b8a0d

Browse files
dfanglsimonrw
authored andcommitted
Fix provisioned concurrency set on Lambda alias (#12592)
1 parent 12cf5f9 commit 13b8a0d

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed

localstack-core/localstack/services/lambda_/invocation/counting_service.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,15 @@ def get_invocation_lease(
156156
provisioned_concurrency_config = function.provisioned_concurrency_configs.get(
157157
function_version.id.qualifier
158158
)
159+
if not provisioned_concurrency_config:
160+
# check if any aliases point to the current version, and check the provisioned concurrency config
161+
# for them. There can be only one config for a version, not matter if defined on the alias or version itself.
162+
for alias in function.aliases.values():
163+
if alias.function_version == function_version.id.qualifier:
164+
provisioned_concurrency_config = (
165+
function.provisioned_concurrency_configs.get(alias.name)
166+
)
167+
break
159168
if provisioned_concurrency_config:
160169
available_provisioned_concurrency = (
161170
provisioned_concurrency_config.provisioned_concurrent_executions

tests/aws/services/lambda_/test_lambda.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2539,6 +2539,59 @@ def test_provisioned_concurrency(self, create_lambda_function, snapshot, aws_cli
25392539
result2 = json.load(invoke_result2["Payload"])
25402540
assert result2 == "on-demand"
25412541

2542+
@markers.aws.validated
2543+
def test_provisioned_concurrency_on_alias(self, create_lambda_function, snapshot, aws_client):
2544+
"""
2545+
Tests provisioned concurrency created and invoked using an alias
2546+
"""
2547+
# TODO add test that you cannot set provisioned concurrency on both alias and version it points to
2548+
# TODO can you set provisioned concurrency on multiple aliases pointing to the same function version?
2549+
min_concurrent_executions = 10 + 5
2550+
check_concurrency_quota(aws_client, min_concurrent_executions)
2551+
2552+
func_name = f"test_lambda_{short_uid()}"
2553+
alias_name = "live"
2554+
2555+
create_lambda_function(
2556+
func_name=func_name,
2557+
handler_file=TEST_LAMBDA_INVOCATION_TYPE,
2558+
runtime=Runtime.python3_12,
2559+
client=aws_client.lambda_,
2560+
)
2561+
2562+
v1 = aws_client.lambda_.publish_version(FunctionName=func_name)
2563+
aws_client.lambda_.create_alias(
2564+
FunctionName=func_name, Name=alias_name, FunctionVersion=v1["Version"]
2565+
)
2566+
2567+
put_provisioned = aws_client.lambda_.put_provisioned_concurrency_config(
2568+
FunctionName=func_name, Qualifier=alias_name, ProvisionedConcurrentExecutions=5
2569+
)
2570+
snapshot.match("put_provisioned_5", put_provisioned)
2571+
2572+
get_provisioned_prewait = aws_client.lambda_.get_provisioned_concurrency_config(
2573+
FunctionName=func_name, Qualifier=alias_name
2574+
)
2575+
2576+
snapshot.match("get_provisioned_prewait", get_provisioned_prewait)
2577+
assert wait_until(concurrency_update_done(aws_client.lambda_, func_name, alias_name))
2578+
get_provisioned_postwait = aws_client.lambda_.get_provisioned_concurrency_config(
2579+
FunctionName=func_name, Qualifier=alias_name
2580+
)
2581+
snapshot.match("get_provisioned_postwait", get_provisioned_postwait)
2582+
2583+
invoke_result1 = aws_client.lambda_.invoke(FunctionName=func_name, Qualifier=alias_name)
2584+
result1 = json.load(invoke_result1["Payload"])
2585+
assert result1 == "provisioned-concurrency"
2586+
2587+
invoke_result1 = aws_client.lambda_.invoke(FunctionName=func_name, Qualifier=v1["Version"])
2588+
result1 = json.load(invoke_result1["Payload"])
2589+
assert result1 == "provisioned-concurrency"
2590+
2591+
invoke_result2 = aws_client.lambda_.invoke(FunctionName=func_name, Qualifier="$LATEST")
2592+
result2 = json.load(invoke_result2["Payload"])
2593+
assert result2 == "on-demand"
2594+
25422595
@markers.aws.validated
25432596
def test_lambda_provisioned_concurrency_scheduling(
25442597
self, snapshot, create_lambda_function, aws_client

tests/aws/services/lambda_/test_lambda.snapshot.json

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4463,5 +4463,43 @@
44634463
}
44644464
}
44654465
}
4466+
},
4467+
"tests/aws/services/lambda_/test_lambda.py::TestLambdaConcurrency::test_provisioned_concurrency_on_alias": {
4468+
"recorded-date": "07-05-2025, 09:26:54",
4469+
"recorded-content": {
4470+
"put_provisioned_5": {
4471+
"AllocatedProvisionedConcurrentExecutions": 0,
4472+
"AvailableProvisionedConcurrentExecutions": 0,
4473+
"LastModified": "date",
4474+
"RequestedProvisionedConcurrentExecutions": 5,
4475+
"Status": "IN_PROGRESS",
4476+
"ResponseMetadata": {
4477+
"HTTPHeaders": {},
4478+
"HTTPStatusCode": 202
4479+
}
4480+
},
4481+
"get_provisioned_prewait": {
4482+
"AllocatedProvisionedConcurrentExecutions": 0,
4483+
"AvailableProvisionedConcurrentExecutions": 0,
4484+
"LastModified": "date",
4485+
"RequestedProvisionedConcurrentExecutions": 5,
4486+
"Status": "IN_PROGRESS",
4487+
"ResponseMetadata": {
4488+
"HTTPHeaders": {},
4489+
"HTTPStatusCode": 200
4490+
}
4491+
},
4492+
"get_provisioned_postwait": {
4493+
"AllocatedProvisionedConcurrentExecutions": 5,
4494+
"AvailableProvisionedConcurrentExecutions": 5,
4495+
"LastModified": "date",
4496+
"RequestedProvisionedConcurrentExecutions": 5,
4497+
"Status": "READY",
4498+
"ResponseMetadata": {
4499+
"HTTPHeaders": {},
4500+
"HTTPStatusCode": 200
4501+
}
4502+
}
4503+
}
44664504
}
44674505
}

tests/aws/services/lambda_/test_lambda.validation.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@
7474
"tests/aws/services/lambda_/test_lambda.py::TestLambdaConcurrency::test_provisioned_concurrency": {
7575
"last_validated_date": "2024-04-08T17:04:20+00:00"
7676
},
77+
"tests/aws/services/lambda_/test_lambda.py::TestLambdaConcurrency::test_provisioned_concurrency_on_alias": {
78+
"last_validated_date": "2025-05-07T09:26:54+00:00"
79+
},
7780
"tests/aws/services/lambda_/test_lambda.py::TestLambdaConcurrency::test_reserved_concurrency": {
7881
"last_validated_date": "2024-04-08T17:08:10+00:00"
7982
},

0 commit comments

Comments
 (0)