Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit d9e4186

Browse files
authored
Lambda: Validate capacity provider in create_function (#13445)
1 parent 1924fe9 commit d9e4186

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

localstack-core/localstack/services/lambda_/provider.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@
255255

256256
LOG = logging.getLogger(__name__)
257257

258+
CAPACITY_PROVIDER_ARN_NAME = "arn:aws[a-zA-Z-]*:lambda:(eusc-)?[a-z]{2}((-gov)|(-iso([a-z]?)))?-[a-z]+-\\d{1}:\\d{12}:capacity-provider:[a-zA-Z0-9-_]+"
258259
LAMBDA_DEFAULT_TIMEOUT = 3
259260
LAMBDA_DEFAULT_MEMORY_SIZE = 128
260261

@@ -853,6 +854,30 @@ def _validate_layers(self, new_layers: list[str], region: str, account_id: str):
853854
)
854855
visited_layers[layer_arn] = layer_version_arn
855856

857+
def _validate_capacity_provider_config(
858+
self, capacity_provider_config: CapacityProviderConfig, context: RequestContext
859+
):
860+
if not capacity_provider_config.get("LambdaManagedInstancesCapacityProviderConfig"):
861+
raise ValidationException(
862+
"1 validation error detected: Value null at 'capacityProviderConfig.lambdaManagedInstancesCapacityProviderConfig' failed to satisfy constraint: Member must not be null"
863+
)
864+
865+
capacity_provider_arn = capacity_provider_config.get(
866+
"LambdaManagedInstancesCapacityProviderConfig", {}
867+
).get("CapacityProviderArn")
868+
if not capacity_provider_arn:
869+
raise ValidationException(
870+
"1 validation error detected: Value null at 'capacityProviderConfig.lambdaManagedInstancesCapacityProviderConfig.capacityProviderArn' failed to satisfy constraint: Member must not be null"
871+
)
872+
873+
if not re.match(CAPACITY_PROVIDER_ARN_NAME, capacity_provider_arn):
874+
raise ValidationException(
875+
f"1 validation error detected: Value '{capacity_provider_arn}' at 'capacityProviderConfig.lambdaManagedInstancesCapacityProviderConfig.capacityProviderArn' failed to satisfy constraint: Member must satisfy regular expression pattern: {CAPACITY_PROVIDER_ARN_NAME}"
876+
)
877+
878+
capacity_provider_name = capacity_provider_arn.split(":")[-1]
879+
self.get_capacity_provider(context, capacity_provider_name)
880+
856881
@staticmethod
857882
def map_layers(new_layers: list[str]) -> list[LayerVersion]:
858883
layers = []
@@ -1029,11 +1054,12 @@ def create_function(
10291054
# Runtime management controls are not available when providing a custom image
10301055
runtime_version_config = None
10311056

1032-
# TODO: validations and figure out in which order
10331057
capacity_provider_config = None
10341058
memory_size = request.get("MemorySize", LAMBDA_DEFAULT_MEMORY_SIZE)
10351059
if "CapacityProviderConfig" in request:
10361060
capacity_provider_config = request["CapacityProviderConfig"]
1061+
self._validate_capacity_provider_config(capacity_provider_config, context)
1062+
10371063
default_config = CapacityProviderConfig(
10381064
LambdaManagedInstancesCapacityProviderConfig=LambdaManagedInstancesCapacityProviderConfig(
10391065
ExecutionEnvironmentMemoryGiBPerVCpu=2.0,

0 commit comments

Comments
 (0)