Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion localstack-core/localstack/services/lambda_/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@

LOG = logging.getLogger(__name__)

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-_]+"
LAMBDA_DEFAULT_TIMEOUT = 3
LAMBDA_DEFAULT_MEMORY_SIZE = 128

Expand Down Expand Up @@ -852,6 +853,30 @@ def _validate_layers(self, new_layers: list[str], region: str, account_id: str):
)
visited_layers[layer_arn] = layer_version_arn

def _validate_capacity_provider_config(
self, capacity_provider_config: CapacityProviderConfig, context: RequestContext
):
if not capacity_provider_config.get("LambdaManagedInstancesCapacityProviderConfig"):
raise ValidationException(
"1 validation error detected: Value null at 'capacityProviderConfig.lambdaManagedInstancesCapacityProviderConfig' failed to satisfy constraint: Member must not be null"
)

capacity_provider_arn = capacity_provider_config.get(
"LambdaManagedInstancesCapacityProviderConfig", {}
).get("CapacityProviderArn")
if not capacity_provider_arn:
raise ValidationException(
"1 validation error detected: Value null at 'capacityProviderConfig.lambdaManagedInstancesCapacityProviderConfig.capacityProviderArn' failed to satisfy constraint: Member must not be null"
)

if not re.match(CAPACITY_PROVIDER_ARN_NAME, capacity_provider_arn):
raise ValidationException(
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}"
)

capacity_provider_name = capacity_provider_arn.split(":")[-1]
self.get_capacity_provider(context, capacity_provider_name)

@staticmethod
def map_layers(new_layers: list[str]) -> list[LayerVersion]:
layers = []
Expand Down Expand Up @@ -1028,11 +1053,12 @@ def create_function(
# Runtime management controls are not available when providing a custom image
runtime_version_config = None

# TODO: validations and figure out in which order
capacity_provider_config = None
memory_size = request.get("MemorySize", LAMBDA_DEFAULT_MEMORY_SIZE)
if "CapacityProviderConfig" in request:
capacity_provider_config = request["CapacityProviderConfig"]
self._validate_capacity_provider_config(capacity_provider_config, context)

default_config = CapacityProviderConfig(
LambdaManagedInstancesCapacityProviderConfig=LambdaManagedInstancesCapacityProviderConfig(
ExecutionEnvironmentMemoryGiBPerVCpu=2.0,
Expand Down
Loading