Skip to content

Commit cb28b11

Browse files
authored
feat(lambda): add AWS Lambda integration with 50 operations (#7216)
* feat(lambda): add AWS Lambda integration with 50 operations Adds an AWS Lambda block covering every major resource family: invocation, function CRUD, versions and aliases, resource-based permissions, event source mappings, reserved and provisioned concurrency, function URLs, asynchronous invocation configs, layers, tags, account settings, recursion detection, and runtime management. Tools run in-process through the shared internal tool-operation boundary using @aws-sdk/client-lambda. Request and response shapes are contract-bound, with shared response projections for the FunctionConfiguration, alias, event source mapping, function URL, provisioned concurrency, and layer types. Deployment packages are sourced from Amazon S3 or a container image URI; inline .zip upload is not supported. * chore(lambda): regenerate docs manifest for the new integration page * fix(lambda): let update operations clear collection-valued settings An empty list field coerced to undefined, so the AWS update command omitted the field and the previous value survived — there was no way to remove a function's layers, detach it from a VPC, or drop event source filters, response types, and source access configurations. A blank field still means "leave unchanged", since treating it as "clear" would wipe the setting on every update that left it empty. Clearing is now an explicit empty-array literal, documented in each field's description and placeholder. Also stops toSourceAccessConfigurations from folding an empty list back into an omitted field. * fix(lambda): stop the function timeout hijacking the tool request deadline The `timeout` param name is reserved: the shared tool executor reads `params.timeout` as its own operation deadline in milliseconds. A Lambda function timeout of 30 seconds therefore aborted the call after 30ms, so Create Function and Update Function Configuration failed whenever a timeout was set. Renamed to `functionTimeout`. Also tightens the boundary against documented AWS constraints and drops avoidable provider round-trips: - optional params supplied as null or an empty string are omitted rather than forwarded, so an empty qualifier no longer reaches AWS as `Qualifier: ''` - documented limits on functionName, qualifier, clientContext, statementId, action, and alias routing weights - source access configuration types are a closed enum, excluding VIRTUAL_HOST on update where AWS rejects it - cross-field checks: exactly one code source matched to packageType, runtime and handler required for a .zip package, an event source or Kafka bootstrap servers required, AT_TIMESTAMP paired with its timestamp, and masterRegion only alongside functionVersion ALL - architectures takes exactly one value, so it is no longer clearable - the block declares AuthMode.ApiKey, correcting a catalog entry that advertised the integration as needing no authentication Removes the unreachable non-ok branch from every transformResponse: the shared executor throws on any non-ok response before transformResponse runs. Raises the internal tool-operation registry test budget, whose cost scales with the number of registered tools. * fix(lambda): never send a half-configured VPC attachment Clearing only one of the two VPC lists produced `VpcConfig: { SubnetIds: [] }` with no security groups, because an empty array is truthy and the wrapper included each list independently. That is not a detach — it is an invalid partial attachment. A Lambda VPC attachment is a unit, so the contract now requires the two lists to be supplied together on Create Function and Update Function Configuration, naming the missing side. The wrapper defaults the other list to empty as well, so it cannot emit a one-sided config even if called directly.
1 parent a96ea5c commit cb28b11

130 files changed

Lines changed: 17376 additions & 11 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/docs/components/icons.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6843,6 +6843,32 @@ export function CloudFormationIcon(props: SVGProps<SVGSVGElement>) {
68436843
)
68446844
}
68456845

6846+
export function LambdaIcon(props: SVGProps<SVGSVGElement>) {
6847+
return (
6848+
<svg
6849+
{...props}
6850+
viewBox='5 5 70 70'
6851+
version='1.1'
6852+
xmlns='http://www.w3.org/2000/svg'
6853+
xmlnsXlink='http://www.w3.org/1999/xlink'
6854+
>
6855+
<g
6856+
id='Icon-Architecture/64/Arch_AWS-Lambda_64'
6857+
stroke='none'
6858+
strokeWidth='1'
6859+
fill='none'
6860+
fillRule='evenodd'
6861+
>
6862+
<path
6863+
d='M28.008,66 L15.591,66 L29.324,37.296 L35.546,50.106 L28.008,66 Z M30.22,34.553 C30.051,34.208 29.7,33.989 29.318,33.989 L29.315,33.989 C28.929,33.99 28.578,34.211 28.412,34.558 L13.098,66.569 C12.95,66.879 12.971,67.243 13.155,67.534 C13.337,67.824 13.658,68 14.002,68 L28.642,68 C29.03,68 29.382,67.777 29.548,67.428 L37.564,50.528 C37.693,50.254 37.692,49.937 37.559,49.665 L30.22,34.553 Z M64.995,66 L52.659,66 L32.867,24.57 C32.701,24.222 32.349,24 31.962,24 L23.89,24 L23.899,14 L39.72,14 L59.42,55.429 C59.586,55.777 59.939,56 60.326,56 L64.995,56 L64.995,66 Z M65.998,54 L60.96,54 L41.259,12.571 C41.094,12.223 40.741,12 40.353,12 L22.898,12 C22.345,12 21.896,12.447 21.895,12.999 L21.884,24.999 C21.884,25.265 21.989,25.519 22.178,25.707 C22.365,25.895 22.62,26 22.887,26 L31.329,26 L51.122,67.43 C51.289,67.778 51.639,68 52.026,68 L65.998,68 C66.552,68 67,67.552 67,67 L67,55 C67,54.448 66.552,54 65.998,54 L65.998,54 Z'
6864+
id='AWS-Lambda_Icon_64_Squid'
6865+
fill='currentColor'
6866+
/>
6867+
</g>
6868+
</svg>
6869+
)
6870+
}
6871+
68466872
export function AthenaIcon(props: SVGProps<SVGSVGElement>) {
68476873
return (
68486874
<svg

apps/docs/components/ui/icon-mapping.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ import {
132132
JupyterIcon,
133133
KalshiIcon,
134134
KetchIcon,
135+
LambdaIcon,
135136
LangsmithIcon,
136137
LatexIcon,
137138
LaunchDarklyIcon,
@@ -423,6 +424,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
423424
kalshi_v2: KalshiIcon,
424425
ketch: KetchIcon,
425426
knowledge: PackageSearchIcon,
427+
lambda: LambdaIcon,
426428
langsmith: LangsmithIcon,
427429
latex: LatexIcon,
428430
launchdarkly: LaunchDarklyIcon,

apps/docs/content/docs/en/integrations/lambda.mdx

Lines changed: 1220 additions & 0 deletions
Large diffs are not rendered by default.

apps/docs/content/docs/en/integrations/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
"kalshi",
139139
"ketch",
140140
"knowledge",
141+
"lambda",
141142
"langsmith",
142143
"latex",
143144
"launchdarkly",

0 commit comments

Comments
 (0)