diff --git a/.projen/tasks.json b/.projen/tasks.json index 4b60ec6..c07da45 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -191,6 +191,9 @@ "steps": [ { "spawn": "docgen" + }, + { + "exec": "cp src/layer.Dockerfile lib/layer.Dockerfile" } ] }, diff --git a/.projenrc.ts b/.projenrc.ts index 2bd6675..1ddd90b 100644 --- a/.projenrc.ts +++ b/.projenrc.ts @@ -42,6 +42,7 @@ const project = new awscdk.AwsCdkConstructLibrary({ }, }); +project.projectBuild.postCompileTask.exec('cp src/layer.Dockerfile lib/layer.Dockerfile'); project.addPackageIgnore('.tmp'); // required to run integ tests project.projectBuild.testTask.exec('npm ci', { cwd: join('example', 'lambda') }); diff --git a/API.md b/API.md index 92519e4..10e5031 100644 --- a/API.md +++ b/API.md @@ -1231,6 +1231,7 @@ const llrtFunctionProps: LlrtFunctionProps = { ... } | llrtBinaryPath | string | A custom relative path to use as a local LLRT bootstrap binary. | | llrtBinaryType | LlrtBinaryType | The type of LLRT bundle to use. | | llrtVersion | string | The version of LLRT. | +| useLambdaLayer | boolean | If `true` then the LLRT runtime will be built in a layer that can be shared amongst other `LLrtFunction`s that utilize the same `llrtBinaryType`, `llrtVersion` and `architecture`. | --- @@ -2203,6 +2204,21 @@ See https://github.com/awslabs/llrt/releases --- +##### `useLambdaLayer`Optional + +```typescript +public readonly useLambdaLayer: boolean; +``` + +- *Type:* boolean +- *Default:* false + +If `true` then the LLRT runtime will be built in a layer that can be shared amongst other `LLrtFunction`s that utilize the same `llrtBinaryType`, `llrtVersion` and `architecture`. + +This feature cannot be used with `llrtBinaryPath` and if both are set a ValidationError will be thrown. + +--- + ## Enums diff --git a/README.md b/README.md index c5ee14a..3b61597 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,11 @@ If you are already using `NodejsFunction` construct, you should be able to just > [!WARNING] > LLRT is currently experimental and not fully compatible with Node.js. You should expect some trial and errors to use LLRT with your existing code. -If you want to upgrade the LLRT version, remove the `.tmp` directory, which contains the cache of LLRT binary fetched from GitHub (only applicable when you set `llrtVersion` to `latest` (default)). +### LLRT version + +By default the latest version of LLRT is fetched from GitHub (unless you set `llrtVersion`). This LLRT binary is cached, in a `.tmp` directory or inside a docker image if you set `useLambdaLayer`. + +If you want to upgrade the LLRT version you will need to remove the `.tmp` directory or remove the docker images (the images can be identified during the cdk build e.g. `docker.io/library/cdk-926fb3006b78cf5a5efe8e6485491147c08a50b8ada8272a6761a8ddc85b2aec:latest` and can be removed using `docker image rm `). ### Setting platform=browser @@ -84,5 +88,17 @@ const handler = new LlrtFunction(this, 'Handler', { }); ``` +### LLRT Layer + +By default, CDK Lambda LLRT bundles the LLRT bootstrap binary directly in your lambda function. +If you want to package the binary in a separate layer that can be shared amongst functions then set `llrtLayer` to `true`. + +```ts +const handler = new LlrtFunction(this, 'Handler', { + entry: 'lambda/index.ts', + llrtLayer: true +}); +``` + ## Examples See [example](./example/README.md) for examples to use `LlrtFunction` construct. diff --git a/example/index.ts b/example/index.ts index 771d87d..f08c586 100644 --- a/example/index.ts +++ b/example/index.ts @@ -98,6 +98,22 @@ class LlrtFunctionTestStack extends Stack { const resource = api.root.addResource('ssr'); resource.addMethod('GET', new LambdaIntegration(handler)); } + + { + // multiple lambda functions using a shared layer + new Array(3).fill(0).map((_, i) => { + const handler = new LlrtFunction(this, `LayerHandler${i}`, { + entry: '../example/lambda/s3.ts', + useLambdaLayer: true, + }); + handler.addToRolePolicy( + new PolicyStatement({ + actions: ['s3:ListAllMyBuckets'], + resources: ['*'], + }) + ); + }) + } } } diff --git a/src/layer.Dockerfile b/src/layer.Dockerfile new file mode 100644 index 0000000..3d7989f --- /dev/null +++ b/src/layer.Dockerfile @@ -0,0 +1,8 @@ +# Used to build assets when useLambdaLayer is true. Downloads the LLRT runtime +# specified by the URL argument and expands it to the /assets folder +FROM alpine + +ARG URL=https://github.com/awslabs/llrt/releases/latest/download/llrt-lambda-x64.zip + +RUN wget -O llrt_temp.zip ${URL} && \ + unzip llrt_temp.zip -d /asset \ No newline at end of file diff --git a/src/llrt-function.ts b/src/llrt-function.ts index 3dc07cf..f17e8bb 100644 --- a/src/llrt-function.ts +++ b/src/llrt-function.ts @@ -1,6 +1,6 @@ import { posix } from 'path'; -import { CfnResource } from 'aws-cdk-lib'; -import { Architecture, Runtime, RuntimeFamily } from 'aws-cdk-lib/aws-lambda'; +import { CfnResource, Stack } from 'aws-cdk-lib'; +import { Architecture, Code, ILayerVersion, LayerVersion, Runtime, RuntimeFamily } from 'aws-cdk-lib/aws-lambda'; import { ICommandHooks, NodejsFunction, NodejsFunctionProps, OutputFormat } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; @@ -46,12 +46,26 @@ export interface LlrtFunctionProps extends NodejsFunctionProps { * @default - If this option is not provided, the LLRT binary is downloaded from GitHub and cached in the .tmp directory. */ readonly llrtBinaryPath?: string; + + /** + * If `true` then the LLRT runtime will be built in a layer that can be shared amongst + * other `LLrtFunction`s that utilize the same `llrtBinaryType`, `llrtVersion` and `architecture`. + * + * This feature cannot be used with `llrtBinaryPath` and if both are set a ValidationError will be thrown. + * + * @default - false + */ + readonly useLambdaLayer?: boolean; } export class LlrtFunction extends NodejsFunction { constructor(scope: Construct, id: string, props: LlrtFunctionProps) { + if (props.useLambdaLayer && props.llrtBinaryPath) { + throw new Error("useLambdaLayer not supported with llrtBinaryPath"); + } + const version = props.llrtVersion ?? 'latest'; - const arch = props.architecture == Architecture.ARM_64 ? 'arm64' : 'x64'; + const arch = props.architecture?.name == Architecture.ARM_64.name ? 'arm64' : 'x64'; const binaryType = props.llrtBinaryType ?? LlrtBinaryType.STANDARD; let binaryName: string; @@ -117,18 +131,26 @@ export class LlrtFunction extends NodejsFunction { const cacheDir = `.tmp/llrt/${version}/${arch}/${binaryType}`; const { commandHooks: originalCommandHooks, ...otherBundlingProps } = props.bundling ?? {}; - const afterBundlingCommandHook: ICommandHooks['afterBundling'] = (i, o) => !props.llrtBinaryPath ? [ + const afterBundlingCommandHook: ICommandHooks['afterBundling'] = (i, o) => { + // If useLambdaLayer then we'll package the llrt binary with docker later + if (props.useLambdaLayer) return []; + // Copy llrt binary from llrtBinaryPath + if (props.llrtBinaryPath) return [ + `cp ${posix.join(i, props.llrtBinaryPath)} ${posix.join(o, 'bootstrap')}`, + ]; // Download llrt binary from GitHub release and cache it - `if [ ! -e ${posix.join(i, cacheDir, 'bootstrap')} ]; then - mkdir -p ${posix.join(i, cacheDir)} - cd ${posix.join(i, cacheDir)} - curl -L -o llrt_temp.zip ${binaryUrl} - unzip llrt_temp.zip - rm -rf llrt_temp.zip - cd - - fi`, - `cp ${posix.join(i, cacheDir, 'bootstrap')} ${o}`, - ] : [`cp ${posix.join(i, props.llrtBinaryPath)} ${posix.join(o, 'bootstrap')}`]; + return [ + `if [ ! -e ${posix.join(i, cacheDir, 'bootstrap')} ]; then + mkdir -p ${posix.join(i, cacheDir)} + cd ${posix.join(i, cacheDir)} + curl -L -o llrt_temp.zip ${binaryUrl} + unzip llrt_temp.zip + rm -rf llrt_temp.zip + cd - + fi`, + `cp ${posix.join(i, cacheDir, 'bootstrap')} ${o}`, + ]; + } super(scope, id, { // set this to remove an unnecessary environment variable. @@ -154,6 +176,32 @@ export class LlrtFunction extends NodejsFunction { }, }); + if (props.useLambdaLayer) { + this.ensureLayer(binaryUrl, binaryName, version); + } + (this.node.defaultChild as CfnResource).addPropertyOverride('Runtime', 'provided.al2023'); } + + private ensureLayer(binaryUrl: string, binaryName: string, version: string) { + const id = `${binaryName.replace("lambda", "layer")}-${version}`; + + let layer = Stack.of(this).node.tryFindChild(id) as ILayerVersion; + + if (!layer) { + layer = new LayerVersion(Stack.of(this), id, { + code: Code.fromDockerBuild(__dirname, { + buildArgs: { + URL: binaryUrl, + }, + file: "layer.Dockerfile", + }), + compatibleArchitectures: [ + this.architecture, + ], + }); + } + + this.addLayers(layer); + } } diff --git a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.assets.json b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.assets.json index 456f80f..1dd9026 100644 --- a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.assets.json +++ b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.assets.json @@ -14,16 +14,16 @@ } } }, - "286c6bf5a2eda8d84fa67fd1004371db925b13e33838d7fc46026ffaad295c90": { + "5ab45ed51a21459ad67b9118a974fd3fbff643528f51f4fefc0ea1d472a8ec23": { "displayName": "LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976 Template", "source": { "path": "LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.template.json", "packaging": "file" }, "destinations": { - "current_account-current_region-734aaede": { + "current_account-current_region-d4e8dd96": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "286c6bf5a2eda8d84fa67fd1004371db925b13e33838d7fc46026ffaad295c90.json", + "objectKey": "5ab45ed51a21459ad67b9118a974fd3fbff643528f51f4fefc0ea1d472a8ec23.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.template.json b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.template.json index 64edb0c..0244bec 100644 --- a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.template.json +++ b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestDefaultTestDeployAssertF3D2B976.template.json @@ -27,7 +27,7 @@ } }, "flattenResponse": "false", - "salt": "1758002050156" + "salt": "1764777304507" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -272,6 +272,86 @@ ] } ] + }, + { + "Action": [ + "lambda:Invoke" + ], + "Effect": "Allow", + "Resource": [ + "*" + ] + }, + { + "Action": [ + "lambda:InvokeFunction" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":lambda:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":function:", + { + "Fn::ImportValue": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerHandler66021063E725CB82" + } + ] + ] + } + ] + }, + { + "Action": [ + "lambda:Invoke" + ], + "Effect": "Allow", + "Resource": [ + "*" + ] + }, + { + "Action": [ + "lambda:InvokeFunction" + ], + "Effect": "Allow", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":lambda:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":function:", + { + "Fn::ImportValue": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerArmHandler9147865BF5CAED2B" + } + ] + ] + } + ] } ] } @@ -334,7 +414,7 @@ } }, "flattenResponse": "false", - "salt": "1758002050157" + "salt": "1764777304507" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -381,7 +461,7 @@ } }, "flattenResponse": "false", - "salt": "1758002050158" + "salt": "1764777304507" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -428,7 +508,7 @@ } }, "flattenResponse": "false", - "salt": "1758002050158" + "salt": "1764777304508" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -475,7 +555,7 @@ } }, "flattenResponse": "false", - "salt": "1758002050158" + "salt": "1764777304508" }, "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete" @@ -494,6 +574,100 @@ ] } } + }, + "LambdaInvoke805b2b3b09077c2b42bb6bec7de55543": { + "Type": "Custom::DeployAssert@SdkCallLambdainvoke", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81HandlerCD40AE9F", + "Arn" + ] + }, + "service": "Lambda", + "api": "invoke", + "expected": "{\"$ObjectLike\":{\"StatusCode\":200}}", + "parameters": { + "FunctionName": { + "Fn::Join": [ + "", + [ + "\"", + { + "Fn::ImportValue": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerHandler66021063E725CB82" + }, + "\"" + ] + ] + } + }, + "flattenResponse": "false", + "salt": "1764777304508" + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "LambdaInvoke805b2b3b09077c2b42bb6bec7de55543Invoke51E422E0": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": { + "Fn::ImportValue": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerHandler66021063E725CB82" + }, + "Principal": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81Role37ABCE73", + "Arn" + ] + } + } + }, + "LambdaInvoke622289161fa9b53fc725450a74439357": { + "Type": "Custom::DeployAssert@SdkCallLambdainvoke", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81HandlerCD40AE9F", + "Arn" + ] + }, + "service": "Lambda", + "api": "invoke", + "expected": "{\"$ObjectLike\":{\"StatusCode\":200}}", + "parameters": { + "FunctionName": { + "Fn::Join": [ + "", + [ + "\"", + { + "Fn::ImportValue": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerArmHandler9147865BF5CAED2B" + }, + "\"" + ] + ] + } + }, + "flattenResponse": "false", + "salt": "1764777304508" + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "LambdaInvoke622289161fa9b53fc725450a74439357InvokeC4A55C37": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": { + "Fn::ImportValue": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerArmHandler9147865BF5CAED2B" + }, + "Principal": { + "Fn::GetAtt": [ + "SingletonFunction1488541a7b23466481b69b4408076b81Role37ABCE73", + "Arn" + ] + } + } } }, "Outputs": { @@ -536,6 +710,22 @@ "assertion" ] } + }, + "AssertionResultsLambdaInvoke805b2b3b09077c2b42bb6bec7de55543": { + "Value": { + "Fn::GetAtt": [ + "LambdaInvoke805b2b3b09077c2b42bb6bec7de55543", + "assertion" + ] + } + }, + "AssertionResultsLambdaInvoke622289161fa9b53fc725450a74439357": { + "Value": { + "Fn::GetAtt": [ + "LambdaInvoke622289161fa9b53fc725450a74439357", + "assertion" + ] + } } }, "Mappings": { diff --git a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.assets.json b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.assets.json index 66a5de4..2553136 100644 --- a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.assets.json +++ b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.assets.json @@ -71,16 +71,58 @@ } } }, - "05bb58bcc960462b09fcbf4131babbd603268ca596c6aa408003857ffa68a93e": { + "531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399": { + "displayName": "LayerHandler/Code", + "source": { + "path": "asset.531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region-2e040283": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f": { + "displayName": "llrt-layer-x64-latest/Code", + "source": { + "path": "asset.9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region-b7f9d7e7": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8": { + "displayName": "llrt-layer-arm64-latest/Code", + "source": { + "path": "asset.52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8", + "packaging": "zip" + }, + "destinations": { + "current_account-current_region-2a1898f7": { + "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", + "objectKey": "52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8.zip", + "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" + } + } + }, + "8a89c38ae4a66b4ffedc3afd04a4fa563e7a69ea4840f03a68756a9367f366e8": { "displayName": "LlrtFunctionIntegTestTarget Template", "source": { "path": "LlrtFunctionIntegTestTarget.template.json", "packaging": "file" }, "destinations": { - "current_account-current_region-368e1903": { + "current_account-current_region-175984d9": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}", - "objectKey": "05bb58bcc960462b09fcbf4131babbd603268ca596c6aa408003857ffa68a93e.json", + "objectKey": "8a89c38ae4a66b4ffedc3afd04a4fa563e7a69ea4840f03a68756a9367f366e8.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-${AWS::Region}" } } diff --git a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.template.json b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.template.json index ce7fb41..5c645bb 100644 --- a/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.template.json +++ b/test/integ.llrt-function.js.snapshot/LlrtFunctionIntegTestTarget.template.json @@ -472,6 +472,235 @@ }, "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain" + }, + "LayerHandlerServiceRoleCB6A82DD": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "LayerHandlerServiceRoleDefaultPolicy17846BDC": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:ListAllMyBuckets", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "LayerHandlerServiceRoleDefaultPolicy17846BDC", + "Roles": [ + { + "Ref": "LayerHandlerServiceRoleCB6A82DD" + } + ] + } + }, + "LayerHandler66021063": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399.zip" + }, + "Handler": "index.handler", + "Layers": [ + { + "Ref": "llrtlayerx64latest9C10C861" + } + ], + "Role": { + "Fn::GetAtt": [ + "LayerHandlerServiceRoleCB6A82DD", + "Arn" + ] + }, + "Runtime": "provided.al2023" + }, + "DependsOn": [ + "LayerHandlerServiceRoleDefaultPolicy17846BDC", + "LayerHandlerServiceRoleCB6A82DD" + ] + }, + "LayerHandlerLogGroupAEFCA328": { + "Type": "AWS::Logs::LogGroup", + "Properties": { + "LogGroupName": { + "Fn::Join": [ + "", + [ + "/aws/lambda/", + { + "Ref": "LayerHandler66021063" + } + ] + ] + }, + "RetentionInDays": 731 + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "llrtlayerx64latest9C10C861": { + "Type": "AWS::Lambda::LayerVersion", + "Properties": { + "CompatibleArchitectures": [ + "x86_64" + ], + "Content": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f.zip" + } + } + }, + "LayerArmHandlerServiceRole78659E75": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "LayerArmHandlerServiceRoleDefaultPolicy4B1C6409": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:ListAllMyBuckets", + "Effect": "Allow", + "Resource": "*" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "LayerArmHandlerServiceRoleDefaultPolicy4B1C6409", + "Roles": [ + { + "Ref": "LayerArmHandlerServiceRole78659E75" + } + ] + } + }, + "LayerArmHandler9147865B": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "arm64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399.zip" + }, + "Handler": "index.handler", + "Layers": [ + { + "Ref": "llrtlayerarm64latest0E433E1F" + } + ], + "Role": { + "Fn::GetAtt": [ + "LayerArmHandlerServiceRole78659E75", + "Arn" + ] + }, + "Runtime": "provided.al2023" + }, + "DependsOn": [ + "LayerArmHandlerServiceRoleDefaultPolicy4B1C6409", + "LayerArmHandlerServiceRole78659E75" + ] + }, + "LayerArmHandlerLogGroupB4C9642E": { + "Type": "AWS::Logs::LogGroup", + "Properties": { + "LogGroupName": { + "Fn::Join": [ + "", + [ + "/aws/lambda/", + { + "Ref": "LayerArmHandler9147865B" + } + ] + ] + }, + "RetentionInDays": 731 + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "llrtlayerarm64latest0E433E1F": { + "Type": "AWS::Lambda::LayerVersion", + "Properties": { + "CompatibleArchitectures": [ + "arm64" + ], + "Content": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8.zip" + } + } } }, "Outputs": { @@ -514,6 +743,22 @@ "Export": { "Name": "LlrtFunctionIntegTestTarget:ExportsOutputRefCustomBinaryHandler641A933E54DF1A2A" } + }, + "ExportsOutputRefLayerHandler66021063E725CB82": { + "Value": { + "Ref": "LayerHandler66021063" + }, + "Export": { + "Name": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerHandler66021063E725CB82" + } + }, + "ExportsOutputRefLayerArmHandler9147865BF5CAED2B": { + "Value": { + "Ref": "LayerArmHandler9147865B" + }, + "Export": { + "Name": "LlrtFunctionIntegTestTarget:ExportsOutputRefLayerArmHandler9147865BF5CAED2B" + } } }, "Parameters": { diff --git a/test/integ.llrt-function.js.snapshot/asset.52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8/bootstrap b/test/integ.llrt-function.js.snapshot/asset.52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8/bootstrap new file mode 100755 index 0000000..a261b89 Binary files /dev/null and b/test/integ.llrt-function.js.snapshot/asset.52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8/bootstrap differ diff --git a/test/integ.llrt-function.js.snapshot/asset.531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399/index.mjs b/test/integ.llrt-function.js.snapshot/asset.531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399/index.mjs new file mode 100644 index 0000000..604f484 --- /dev/null +++ b/test/integ.llrt-function.js.snapshot/asset.531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399/index.mjs @@ -0,0 +1 @@ +import{ListBucketsCommand as t,S3Client as e}from"@aws-sdk/client-s3";var o=new e({}),c=async(s,r)=>{let n=await o.send(new t({}));console.log(n)};export{c as handler}; diff --git a/test/integ.llrt-function.js.snapshot/asset.9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f/bootstrap b/test/integ.llrt-function.js.snapshot/asset.9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f/bootstrap new file mode 100755 index 0000000..47e6ca1 Binary files /dev/null and b/test/integ.llrt-function.js.snapshot/asset.9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f/bootstrap differ diff --git a/test/integ.llrt-function.js.snapshot/manifest.json b/test/integ.llrt-function.js.snapshot/manifest.json index 16f422c..8eeb929 100644 --- a/test/integ.llrt-function.js.snapshot/manifest.json +++ b/test/integ.llrt-function.js.snapshot/manifest.json @@ -18,7 +18,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/05bb58bcc960462b09fcbf4131babbd603268ca596c6aa408003857ffa68a93e.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/8a89c38ae4a66b4ffedc3afd04a4fa563e7a69ea4840f03a68756a9367f366e8.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -758,6 +758,341 @@ "data": "CustomBinaryHandlerLogGroupE89296DF" } ], + "/LlrtFunctionIntegTestTarget/LayerHandler": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "awsSdkConnectionReuse": false, + "runtime": "*", + "entry": "*", + "depsLockFilePath": "*", + "bundling": { + "target": "*", + "format": "esm", + "minify": true, + "commandHooks": "*", + "forceDockerBundling": "*", + "externalModules": "*" + }, + "code": "*", + "handler": "*" + } + }, + { + "type": "aws:cdk:analytics:construct", + "data": { + "awsSdkConnectionReuse": false, + "runtime": "*", + "entry": "*", + "depsLockFilePath": "*", + "bundling": { + "target": "*", + "format": "esm", + "minify": true, + "commandHooks": "*", + "forceDockerBundling": "*", + "externalModules": "*" + } + } + }, + { + "type": "aws:cdk:analytics:method", + "data": {} + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addToPrincipalPolicy": [ + {} + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerHandlerServiceRoleCB6A82DD" + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/DefaultPolicy": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachToRole": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachToRole": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addStatements": [ + {} + ] + } + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerHandlerServiceRoleDefaultPolicy17846BDC" + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerHandler66021063" + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/LogGroup": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "logGroupName": "*" + } + } + ], + "/LlrtFunctionIntegTestTarget/LayerHandler/LogGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerHandlerLogGroupAEFCA328" + } + ], + "/LlrtFunctionIntegTestTarget/llrt-layer-x64-latest": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "code": "*", + "compatibleArchitectures": "*" + } + } + ], + "/LlrtFunctionIntegTestTarget/llrt-layer-x64-latest/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "llrtlayerx64latest9C10C861", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_REPLACE" + ] + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "awsSdkConnectionReuse": false, + "runtime": "*", + "architecture": "*", + "entry": "*", + "depsLockFilePath": "*", + "bundling": { + "target": "*", + "format": "esm", + "minify": true, + "commandHooks": "*", + "forceDockerBundling": "*", + "externalModules": "*" + }, + "code": "*", + "handler": "*" + } + }, + { + "type": "aws:cdk:analytics:construct", + "data": { + "awsSdkConnectionReuse": false, + "runtime": "*", + "architecture": "*", + "entry": "*", + "depsLockFilePath": "*", + "bundling": { + "target": "*", + "format": "esm", + "minify": true, + "commandHooks": "*", + "forceDockerBundling": "*", + "externalModules": "*" + } + } + }, + { + "type": "aws:cdk:analytics:method", + "data": {} + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "assumedBy": { + "principalAccount": "*", + "assumeRoleAction": "*" + }, + "managedPolicies": [ + { + "managedPolicyArn": "*" + } + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addToPrincipalPolicy": [ + {} + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachInlinePolicy": [ + "*" + ] + } + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/ImportServiceRole": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerArmHandlerServiceRole78659E75" + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/DefaultPolicy": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachToRole": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "attachToRole": [ + "*" + ] + } + }, + { + "type": "aws:cdk:analytics:method", + "data": { + "addStatements": [ + {} + ] + } + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/DefaultPolicy/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerArmHandlerServiceRoleDefaultPolicy4B1C6409" + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerArmHandler9147865B" + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/LogGroup": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "logGroupName": "*" + } + } + ], + "/LlrtFunctionIntegTestTarget/LayerArmHandler/LogGroup/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "LayerArmHandlerLogGroupB4C9642E" + } + ], + "/LlrtFunctionIntegTestTarget/llrt-layer-arm64-latest": [ + { + "type": "aws:cdk:analytics:construct", + "data": { + "code": "*", + "compatibleArchitectures": "*" + } + } + ], + "/LlrtFunctionIntegTestTarget/llrt-layer-arm64-latest/Resource": [ + { + "type": "aws:cdk:logicalId", + "data": "llrtlayerarm64latest0E433E1F" + } + ], "/LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"Handler886CB40B\"}": [ { "type": "aws:cdk:logicalId", @@ -788,6 +1123,18 @@ "data": "ExportsOutputRefCustomBinaryHandler641A933E54DF1A2A" } ], + "/LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"LayerHandler66021063\"}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputRefLayerHandler66021063E725CB82" + } + ], + "/LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"LayerArmHandler9147865B\"}": [ + { + "type": "aws:cdk:logicalId", + "data": "ExportsOutputRefLayerArmHandler9147865BF5CAED2B" + } + ], "/LlrtFunctionIntegTestTarget/BootstrapVersion": [ { "type": "aws:cdk:logicalId", @@ -820,7 +1167,7 @@ "validateOnSynth": false, "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/286c6bf5a2eda8d84fa67fd1004371db925b13e33838d7fc46026ffaad295c90.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/5ab45ed51a21459ad67b9118a974fd3fbff643528f51f4fefc0ea1d472a8ec23.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ @@ -1015,6 +1362,70 @@ "data": "AssertionResultsLambdaInvoke69a3388d6e311c7b828bebf747d408cc" } ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/Default": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/Default/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdaInvoke805b2b3b09077c2b42bb6bec7de55543" + } + ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/Invoke": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdaInvoke805b2b3b09077c2b42bb6bec7de55543Invoke51E422E0" + } + ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/AssertionResults": [ + { + "type": "aws:cdk:logicalId", + "data": "AssertionResultsLambdaInvoke805b2b3b09077c2b42bb6bec7de55543" + } + ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/Default": [ + { + "type": "aws:cdk:analytics:construct", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + }, + { + "type": "aws:cdk:analytics:method", + "data": "*" + } + ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/Default/Default": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdaInvoke622289161fa9b53fc725450a74439357" + } + ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/Invoke": [ + { + "type": "aws:cdk:logicalId", + "data": "LambdaInvoke622289161fa9b53fc725450a74439357InvokeC4A55C37" + } + ], + "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/AssertionResults": [ + { + "type": "aws:cdk:logicalId", + "data": "AssertionResultsLambdaInvoke622289161fa9b53fc725450a74439357" + } + ], "/LlrtFunctionIntegTest/DefaultTest/DeployAssert/BootstrapVersion": [ { "type": "aws:cdk:logicalId", diff --git a/test/integ.llrt-function.js.snapshot/tree.json b/test/integ.llrt-function.js.snapshot/tree.json index 25dd6b6..015476d 100644 --- a/test/integ.llrt-function.js.snapshot/tree.json +++ b/test/integ.llrt-function.js.snapshot/tree.json @@ -1 +1 @@ -{"version":"tree-0.1","tree":{"id":"App","path":"","constructInfo":{"fqn":"aws-cdk-lib.App","version":"2.215.0"},"children":{"LlrtFunctionIntegTestTarget":{"id":"LlrtFunctionIntegTestTarget","path":"LlrtFunctionIntegTestTarget","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.215.0"},"children":{"Handler":{"id":"Handler","path":"LlrtFunctionIntegTestTarget/Handler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"HandlerServiceRoleDefaultPolicyCBD0CC91","roles":[{"Ref":"HandlerServiceRoleFCDC14AE"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/Handler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/Handler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/Handler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"0d077c4f0f614ee0dabf2c844841f52bd406132de209b3a3b8770cb0cbece261.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["HandlerServiceRoleFCDC14AE","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/Handler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"Handler886CB40B"}]]},"retentionInDays":731}}}}}}},"ArmHandler":{"id":"ArmHandler","path":"LlrtFunctionIntegTestTarget/ArmHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","architecture":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","architecture":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"ArmHandlerServiceRoleDefaultPolicyB9B1C47C","roles":[{"Ref":"ArmHandlerServiceRole413AC94A"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/ArmHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/ArmHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/ArmHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"architectures":["arm64"],"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"3f0df07c5f0a1a9557efff2713b8a732630ff0c9c6bc561edf6fd42d2777d26d.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["ArmHandlerServiceRole413AC94A","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/ArmHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"ArmHandler7C85DE11"}]]},"retentionInDays":731}}}}}}},"FullBinaryHandler":{"id":"FullBinaryHandler","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"FullBinaryHandlerServiceRoleDefaultPolicy6A254230","roles":[{"Ref":"FullBinaryHandlerServiceRole27DAC75C"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"c9fcdd092984e282b07b3ddcf6becfb1a639caa786e54270dac65ba7f97fdce2.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["FullBinaryHandlerServiceRole27DAC75C","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"FullBinaryHandler1600ED15"}]]},"retentionInDays":731}}}}}}},"NoSdkBinaryHandler":{"id":"NoSdkBinaryHandler","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"NoSdkBinaryHandlerServiceRoleDefaultPolicyDC9BBD8B","roles":[{"Ref":"NoSdkBinaryHandlerServiceRole8CABE201"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"2c91bb8cca67d923aaf45645a9b893320a3af82f20d0b0264bcc743dd5a641c9.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["NoSdkBinaryHandlerServiceRole8CABE201","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"NoSdkBinaryHandler3ED82436"}]]},"retentionInDays":731}}}}}}},"CustomBinaryHandler":{"id":"CustomBinaryHandler","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"CustomBinaryHandlerServiceRoleDefaultPolicyED2FBAA6","roles":[{"Ref":"CustomBinaryHandlerServiceRoleCF90F487"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"ca6b96daba04d69ad843da425b485f310a2ac068a6864b4892995ebdcadabecf.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["CustomBinaryHandlerServiceRoleCF90F487","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"CustomBinaryHandler641A933E"}]]},"retentionInDays":731}}}}}}},"Exports":{"id":"Exports","path":"LlrtFunctionIntegTestTarget/Exports","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"},"children":{"Output{\"Ref\":\"Handler886CB40B\"}":{"id":"Output{\"Ref\":\"Handler886CB40B\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"Handler886CB40B\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"ArmHandler7C85DE11\"}":{"id":"Output{\"Ref\":\"ArmHandler7C85DE11\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"ArmHandler7C85DE11\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"FullBinaryHandler1600ED15\"}":{"id":"Output{\"Ref\":\"FullBinaryHandler1600ED15\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"FullBinaryHandler1600ED15\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"NoSdkBinaryHandler3ED82436\"}":{"id":"Output{\"Ref\":\"NoSdkBinaryHandler3ED82436\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"NoSdkBinaryHandler3ED82436\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"CustomBinaryHandler641A933E\"}":{"id":"Output{\"Ref\":\"CustomBinaryHandler641A933E\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"CustomBinaryHandler641A933E\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"LlrtFunctionIntegTestTarget/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.215.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"LlrtFunctionIntegTestTarget/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.215.0"}}}},"LlrtFunctionIntegTest":{"id":"LlrtFunctionIntegTest","path":"LlrtFunctionIntegTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"2.159.0-alpha.0"},"children":{"DefaultTest":{"id":"DefaultTest","path":"LlrtFunctionIntegTest/DefaultTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"2.159.0-alpha.0"},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.215.0"},"children":{"LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5":{"id":"LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"SingletonFunction1488541a7b23466481b69b4408076b81":{"id":"SingletonFunction1488541a7b23466481b69b4408076b81","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"},"children":{"Staging":{"id":"Staging","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"Role":{"id":"Role","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"Handler":{"id":"Handler","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"2.215.0"}},"LambdaInvoke997059d943474e43661f387022a21092":{"id":"LambdaInvoke997059d943474e43661f387022a21092","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvoke240c9f0a69de9952748e2df8d156da40":{"id":"LambdaInvoke240c9f0a69de9952748e2df8d156da40","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c":{"id":"LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvoke69a3388d6e311c7b828bebf747d408cc":{"id":"LambdaInvoke69a3388d6e311c7b828bebf747d408cc","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.215.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.215.0"}}}}}}}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}}} \ No newline at end of file +{"version":"tree-0.1","tree":{"id":"App","path":"","constructInfo":{"fqn":"aws-cdk-lib.App","version":"2.215.0"},"children":{"LlrtFunctionIntegTestTarget":{"id":"LlrtFunctionIntegTestTarget","path":"LlrtFunctionIntegTestTarget","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.215.0"},"children":{"Handler":{"id":"Handler","path":"LlrtFunctionIntegTestTarget/Handler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"HandlerServiceRoleDefaultPolicyCBD0CC91","roles":[{"Ref":"HandlerServiceRoleFCDC14AE"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/Handler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/Handler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/Handler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"0d077c4f0f614ee0dabf2c844841f52bd406132de209b3a3b8770cb0cbece261.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["HandlerServiceRoleFCDC14AE","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/Handler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/Handler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"Handler886CB40B"}]]},"retentionInDays":731}}}}}}},"ArmHandler":{"id":"ArmHandler","path":"LlrtFunctionIntegTestTarget/ArmHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","architecture":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","architecture":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"ArmHandlerServiceRoleDefaultPolicyB9B1C47C","roles":[{"Ref":"ArmHandlerServiceRole413AC94A"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/ArmHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/ArmHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/ArmHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"architectures":["arm64"],"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"3f0df07c5f0a1a9557efff2713b8a732630ff0c9c6bc561edf6fd42d2777d26d.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["ArmHandlerServiceRole413AC94A","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/ArmHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/ArmHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"ArmHandler7C85DE11"}]]},"retentionInDays":731}}}}}}},"FullBinaryHandler":{"id":"FullBinaryHandler","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"FullBinaryHandlerServiceRoleDefaultPolicy6A254230","roles":[{"Ref":"FullBinaryHandlerServiceRole27DAC75C"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"c9fcdd092984e282b07b3ddcf6becfb1a639caa786e54270dac65ba7f97fdce2.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["FullBinaryHandlerServiceRole27DAC75C","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/FullBinaryHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"FullBinaryHandler1600ED15"}]]},"retentionInDays":731}}}}}}},"NoSdkBinaryHandler":{"id":"NoSdkBinaryHandler","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"NoSdkBinaryHandlerServiceRoleDefaultPolicyDC9BBD8B","roles":[{"Ref":"NoSdkBinaryHandlerServiceRole8CABE201"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"2c91bb8cca67d923aaf45645a9b893320a3af82f20d0b0264bcc743dd5a641c9.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["NoSdkBinaryHandlerServiceRole8CABE201","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/NoSdkBinaryHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"NoSdkBinaryHandler3ED82436"}]]},"retentionInDays":731}}}}}}},"CustomBinaryHandler":{"id":"CustomBinaryHandler","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"CustomBinaryHandlerServiceRoleDefaultPolicyED2FBAA6","roles":[{"Ref":"CustomBinaryHandlerServiceRoleCF90F487"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"ca6b96daba04d69ad843da425b485f310a2ac068a6864b4892995ebdcadabecf.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["CustomBinaryHandlerServiceRoleCF90F487","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/CustomBinaryHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"CustomBinaryHandler641A933E"}]]},"retentionInDays":731}}}}}}},"LayerHandler":{"id":"LayerHandler","path":"LlrtFunctionIntegTestTarget/LayerHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}},{}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"LayerHandlerServiceRoleDefaultPolicy17846BDC","roles":[{"Ref":"LayerHandlerServiceRoleCB6A82DD"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/LayerHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/LayerHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/LayerHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399.zip"},"handler":"index.handler","layers":[{"Ref":"llrtlayerx64latest9C10C861"}],"role":{"Fn::GetAtt":["LayerHandlerServiceRoleCB6A82DD","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/LayerHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"LayerHandler66021063"}]]},"retentionInDays":731}}}}}}},"llrt-layer-x64-latest":{"id":"llrt-layer-x64-latest","path":"LlrtFunctionIntegTestTarget/llrt-layer-x64-latest","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.LayerVersion","version":"2.215.0","metadata":[{"code":"*","compatibleArchitectures":"*"}]},"children":{"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/llrt-layer-x64-latest/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/llrt-layer-x64-latest/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/llrt-layer-x64-latest/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/llrt-layer-x64-latest/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnLayerVersion","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::LayerVersion","aws:cdk:cloudformation:props":{"compatibleArchitectures":["x86_64"],"content":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"9a3fcb668160409d2849f5a3c82a6e8bed06831e6b89970752ad53e82fdd565f.zip"}}}}}},"LayerArmHandler":{"id":"LayerArmHandler","path":"LlrtFunctionIntegTestTarget/LayerArmHandler","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.215.0","metadata":[{"awsSdkConnectionReuse":false,"runtime":"*","architecture":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"},"code":"*","handler":"*"},{"awsSdkConnectionReuse":false,"runtime":"*","architecture":"*","entry":"*","depsLockFilePath":"*","bundling":{"target":"*","format":"esm","minify":true,"commandHooks":"*","forceDockerBundling":"*","externalModules":"*"}},{}]},"children":{"ServiceRole":{"id":"ServiceRole","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.215.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.215.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}}},"DefaultPolicy":{"id":"DefaultPolicy","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/DefaultPolicy","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.215.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/ServiceRole/DefaultPolicy/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"s3:ListAllMyBuckets","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"LayerArmHandlerServiceRoleDefaultPolicy4B1C6409","roles":[{"Ref":"LayerArmHandlerServiceRole78659E75"}]}}}}}}},"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"architectures":["arm64"],"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"531eb4a72df0dad25daeaccc31c78c676a5616a85798d42e05d8aaa5df5d3399.zip"},"handler":"index.handler","layers":[{"Ref":"llrtlayerarm64latest0E433E1F"}],"role":{"Fn::GetAtt":["LayerArmHandlerServiceRole78659E75","Arn"]},"runtime":"nodejs20.x"}}},"LogGroup":{"id":"LogGroup","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.215.0","metadata":[{"logGroupName":"*"}]},"children":{"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/LayerArmHandler/LogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"logGroupName":{"Fn::Join":["",["/aws/lambda/",{"Ref":"LayerArmHandler9147865B"}]]},"retentionInDays":731}}}}}}},"llrt-layer-arm64-latest":{"id":"llrt-layer-arm64-latest","path":"LlrtFunctionIntegTestTarget/llrt-layer-arm64-latest","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.LayerVersion","version":"2.215.0","metadata":[{"code":"*","compatibleArchitectures":"*"}]},"children":{"Code":{"id":"Code","path":"LlrtFunctionIntegTestTarget/llrt-layer-arm64-latest/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.215.0"},"children":{"Stage":{"id":"Stage","path":"LlrtFunctionIntegTestTarget/llrt-layer-arm64-latest/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"AssetBucket":{"id":"AssetBucket","path":"LlrtFunctionIntegTestTarget/llrt-layer-arm64-latest/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.215.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"LlrtFunctionIntegTestTarget/llrt-layer-arm64-latest/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnLayerVersion","version":"2.215.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::LayerVersion","aws:cdk:cloudformation:props":{"compatibleArchitectures":["arm64"],"content":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"52d6a9bf141495dafa8797c991df4839adf1e5780f14bfa263ff6a7c8312e4f8.zip"}}}}}},"Exports":{"id":"Exports","path":"LlrtFunctionIntegTestTarget/Exports","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"},"children":{"Output{\"Ref\":\"Handler886CB40B\"}":{"id":"Output{\"Ref\":\"Handler886CB40B\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"Handler886CB40B\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"ArmHandler7C85DE11\"}":{"id":"Output{\"Ref\":\"ArmHandler7C85DE11\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"ArmHandler7C85DE11\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"FullBinaryHandler1600ED15\"}":{"id":"Output{\"Ref\":\"FullBinaryHandler1600ED15\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"FullBinaryHandler1600ED15\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"NoSdkBinaryHandler3ED82436\"}":{"id":"Output{\"Ref\":\"NoSdkBinaryHandler3ED82436\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"NoSdkBinaryHandler3ED82436\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"CustomBinaryHandler641A933E\"}":{"id":"Output{\"Ref\":\"CustomBinaryHandler641A933E\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"CustomBinaryHandler641A933E\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"LayerHandler66021063\"}":{"id":"Output{\"Ref\":\"LayerHandler66021063\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"LayerHandler66021063\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}},"Output{\"Ref\":\"LayerArmHandler9147865B\"}":{"id":"Output{\"Ref\":\"LayerArmHandler9147865B\"}","path":"LlrtFunctionIntegTestTarget/Exports/Output{\"Ref\":\"LayerArmHandler9147865B\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"LlrtFunctionIntegTestTarget/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.215.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"LlrtFunctionIntegTestTarget/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.215.0"}}}},"LlrtFunctionIntegTest":{"id":"LlrtFunctionIntegTest","path":"LlrtFunctionIntegTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"2.159.0-alpha.0"},"children":{"DefaultTest":{"id":"DefaultTest","path":"LlrtFunctionIntegTest/DefaultTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"2.159.0-alpha.0"},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.215.0"},"children":{"LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5":{"id":"LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke35ae3a38b93bc81e7b95e90f43eeaec5/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"SingletonFunction1488541a7b23466481b69b4408076b81":{"id":"SingletonFunction1488541a7b23466481b69b4408076b81","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"},"children":{"Staging":{"id":"Staging","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.215.0"}},"Role":{"id":"Role","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"Handler":{"id":"Handler","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"2.215.0"}},"LambdaInvoke997059d943474e43661f387022a21092":{"id":"LambdaInvoke997059d943474e43661f387022a21092","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke997059d943474e43661f387022a21092/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvoke240c9f0a69de9952748e2df8d156da40":{"id":"LambdaInvoke240c9f0a69de9952748e2df8d156da40","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke240c9f0a69de9952748e2df8d156da40/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c":{"id":"LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvokebff0124bbd4116de1f88fc631eeb9a9c/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvoke69a3388d6e311c7b828bebf747d408cc":{"id":"LambdaInvoke69a3388d6e311c7b828bebf747d408cc","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke69a3388d6e311c7b828bebf747d408cc/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvoke805b2b3b09077c2b42bb6bec7de55543":{"id":"LambdaInvoke805b2b3b09077c2b42bb6bec7de55543","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke805b2b3b09077c2b42bb6bec7de55543/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"LambdaInvoke622289161fa9b53fc725450a74439357":{"id":"LambdaInvoke622289161fa9b53fc725450a74439357","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.159.0-alpha.0"},"children":{"SdkProvider":{"id":"SdkProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/SdkProvider","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.159.0-alpha.0"},"children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}},"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/Default","constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.215.0","metadata":["*","*","*"]},"children":{"Default":{"id":"Default","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}}}},"Invoke":{"id":"Invoke","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.215.0"}},"AssertionResults":{"id":"AssertionResults","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/LambdaInvoke622289161fa9b53fc725450a74439357/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.215.0"}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.215.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"LlrtFunctionIntegTest/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.215.0"}}}}}}}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}}} \ No newline at end of file diff --git a/test/integ.llrt-function.ts b/test/integ.llrt-function.ts index f00c51f..cb5ae3d 100644 --- a/test/integ.llrt-function.ts +++ b/test/integ.llrt-function.ts @@ -104,6 +104,37 @@ class TestStack extends Stack { ); this.handlers.push(handler); } + + { + const handler = new LlrtFunction(this, 'LayerHandler', { + entry: '../example/lambda/s3.ts', + depsLockFilePath: '../example/lambda/package-lock.json', + useLambdaLayer: true, + }); + handler.addToRolePolicy( + new PolicyStatement({ + actions: ['s3:ListAllMyBuckets'], + resources: ['*'], + }), + ); + this.handlers.push(handler); + } + + { + const handler = new LlrtFunction(this, 'LayerArmHandler', { + architecture: Architecture.ARM_64, + entry: '../example/lambda/s3.ts', + depsLockFilePath: '../example/lambda/package-lock.json', + useLambdaLayer: true, + }); + handler.addToRolePolicy( + new PolicyStatement({ + actions: ['s3:ListAllMyBuckets'], + resources: ['*'], + }), + ); + this.handlers.push(handler); + } } }