diff --git a/packages/@aws-cdk/aws-lambda-python/README.md b/packages/@aws-cdk/aws-lambda-python/README.md index ffd19568aa5dc..21979939b582c 100644 --- a/packages/@aws-cdk/aws-lambda-python/README.md +++ b/packages/@aws-cdk/aws-lambda-python/README.md @@ -36,6 +36,32 @@ new PythonFunction(this, 'MyFunction', { }); ``` +Custom Docker images for bundling dependencies can be specified by specifying additional `buildImageOptions`. If using a custom Docker image, please ensure that the dependencies are stored at `/var/dependencies` within the Docker image for them to be bundled into the Lambda asset. + +A different bundling Docker image `Dockerfile.build` can be specified as: + +```ts +new PythonFunction(this, 'MyFunction', { + ... + dockerBuildImageOptions: { + file: "Dockerfile.build", + }, +}); +``` + +All bundling images are passed in the `IMAGE` Docker build arg that specifies the correct AWS SAM build image based on the runtime of the function. Additional build args can be specified as: + +```ts +new PythonFunction(this, 'MyFunction', { + ... + dockerBuildImageOptions: { + buildArgs: { + HTTPS_PROXY: 'https://127.0.0.1:3001', + }, + }, +}); +``` + All other properties of `lambda.Function` are supported, see also the [AWS Lambda construct library](https://github.com/aws/aws-cdk/tree/master/packages/%40aws-cdk/aws-lambda). ## Module Dependencies @@ -44,9 +70,9 @@ If `requirements.txt` or `Pipfile` exists at the entry path, the construct will all required modules in a [Lambda compatible Docker container](https://gallery.ecr.aws/sam/build-python3.7) according to the `runtime`. -Python bundles are only recreated and published when a file in a source directory has changed. +Python bundles are only recreated and published when a file in a source directory has changed. Therefore (and as a general best-practice), it is highly recommended to commit a lockfile with a -list of all transitive dependencies and their exact versions. +list of all transitive dependencies and their exact versions. This will ensure that when any dependency version is updated, the bundle asset is recreated and uploaded. To that end, we recommend using [`pipenv`] or [`poetry`] which has lockfile support. diff --git a/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts b/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts index 0c2b4bf624786..4c587c6067709 100644 --- a/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts +++ b/packages/@aws-cdk/aws-lambda-python/lib/bundling.ts @@ -71,13 +71,23 @@ export interface BundlingOptions { * @default - based on `assetHashType` */ readonly assetHash?: string; + + /** + * Bundling Docker image options to use. If no options are provided, the default bundling image + * will be used. This is useful for specifying a custom Docker image for bundling. Additionally, + * the correct AWS SAM build image based on the runtime of the function will be passed as the build arg + * `IMAGE` to the Docker image. + * + * @default - uses default bundling. + */ + readonly buildImageOptions?: cdk.DockerBuildOptions; } /** * Produce bundled Lambda asset code */ export function bundle(options: BundlingOptions): lambda.Code { - const { entry, runtime, outputPathSuffix } = options; + const { entry, runtime, outputPathSuffix, buildImageOptions } = options; const stagedir = cdk.FileSystem.mkdtemp('python-bundling-'); const hasDeps = stageDependencies(entry, stagedir); @@ -97,12 +107,20 @@ export function bundle(options: BundlingOptions): lambda.Code { // copy Dockerfile to workdir fs.copyFileSync(path.join(__dirname, dockerfile), path.join(stagedir, dockerfile)); + // if custom build Dockerfile is provided, copy it to workdir + if (buildImageOptions?.file) { + fs.copyFileSync(path.join(entry, buildImageOptions.file), path.join(stagedir, buildImageOptions.file)); + } + + const buildArgs = { + IMAGE: runtime.bundlingImage.image, + ...buildImageOptions?.buildArgs, + }; const image = cdk.DockerImage.fromBuild(stagedir, { - buildArgs: { - IMAGE: runtime.bundlingImage.image, - }, file: dockerfile, + ...buildImageOptions, + buildArgs, }); return lambda.Code.fromAsset(entry, { diff --git a/packages/@aws-cdk/aws-lambda-python/lib/function.ts b/packages/@aws-cdk/aws-lambda-python/lib/function.ts index 733c115c0383d..97d82f067eac0 100644 --- a/packages/@aws-cdk/aws-lambda-python/lib/function.ts +++ b/packages/@aws-cdk/aws-lambda-python/lib/function.ts @@ -1,7 +1,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as lambda from '@aws-cdk/aws-lambda'; -import { AssetHashType } from '@aws-cdk/core'; +import { AssetHashType, DockerBuildOptions } from '@aws-cdk/core'; import { bundle } from './bundling'; // keep this import separate from other imports to reduce chance for merge conflicts with v2-main @@ -77,6 +77,12 @@ export interface PythonFunctionProps extends lambda.FunctionOptions { * @default - based on `assetHashType` */ readonly assetHash?: string; + + /** Custom build options for the bundling Docker image. + * + * @default - uses default bundling image and options. + */ + readonly dockerBuildImageOptions?: DockerBuildOptions; } /** @@ -112,6 +118,7 @@ export class PythonFunction extends lambda.Function { outputPathSuffix: '.', assetHashType: props.assetHashType, assetHash: props.assetHash, + buildImageOptions: props.dockerBuildImageOptions, }), handler: `${index.slice(0, -3)}.${handler}`, }); diff --git a/packages/@aws-cdk/aws-lambda-python/lib/layer.ts b/packages/@aws-cdk/aws-lambda-python/lib/layer.ts index 1a9684e224580..9382b5698f128 100644 --- a/packages/@aws-cdk/aws-lambda-python/lib/layer.ts +++ b/packages/@aws-cdk/aws-lambda-python/lib/layer.ts @@ -1,5 +1,6 @@ import * as path from 'path'; import * as lambda from '@aws-cdk/aws-lambda'; +import { DockerBuildOptions } from '@aws-cdk/core'; import { bundle } from './bundling'; // keep this import separate from other imports to reduce chance for merge conflicts with v2-main @@ -21,6 +22,12 @@ export interface PythonLayerVersionProps extends lambda.LayerVersionOptions { * @default - All runtimes are supported. */ readonly compatibleRuntimes?: lambda.Runtime[]; + + /** Custom build options for the bundling Docker image. + * + * @default - uses default bundling image and options. + */ + readonly dockerBuildImageOptions?: DockerBuildOptions; } /** @@ -50,6 +57,7 @@ export class PythonLayerVersion extends lambda.LayerVersion { entry, runtime, outputPathSuffix: 'python', + buildImageOptions: props.dockerBuildImageOptions, }), }); } diff --git a/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts b/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts index 712852023a367..0792891278fdd 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts +++ b/packages/@aws-cdk/aws-lambda-python/test/bundling.test.ts @@ -1,7 +1,7 @@ import * as fs from 'fs'; import * as path from 'path'; import { Code, Runtime } from '@aws-cdk/aws-lambda'; -import { FileSystem } from '@aws-cdk/core'; +import { DockerImage, FileSystem } from '@aws-cdk/core'; import { stageDependencies, bundle } from '../lib/bundling'; jest.spyOn(Code, 'fromAsset'); @@ -19,8 +19,17 @@ jest.mock('child_process', () => ({ }), })); +// Mock DockerImage.fromAsset() to avoid building the image +let fromBuildMock: jest.SpyInstance; beforeEach(() => { jest.clearAllMocks(); + + fromBuildMock = jest.spyOn(DockerImage, 'fromBuild').mockReturnValue({ + image: 'built-image', + cp: () => 'dest-path', + run: () => {}, + toJSON: () => 'built-image', + }); }); test('Bundling a function without dependencies', () => { @@ -139,3 +148,29 @@ describe('Dependency detection', () => { expect(stageDependencies(sourcedir, '/dummy')).toEqual(false); }); }); + +test('Bundling Docker with custom bundling image', () => { + const entry = path.join(__dirname, 'lambda-handler-custom-build-docker-image'); + bundle({ + entry, + runtime: Runtime.PYTHON_3_7, + outputPathSuffix: '.', + buildImageOptions: { + buildArgs: { + HELLO: 'WORLD', + IMAGE: Runtime.PYTHON_3_7.bundlingImage.image, + }, + file: 'Dockerfile.build', + }, + }); + + expect(fromBuildMock).toHaveBeenCalledWith(expect.stringContaining('python-bundling'), + expect.objectContaining({ + buildArgs: expect.objectContaining({ + HELLO: 'WORLD', + IMAGE: Runtime.PYTHON_3_7.bundlingImage.image, + }), + file: expect.stringContaining('Dockerfile.build'), + }), + ); +}); diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.custom-build.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.custom-build.expected.json new file mode 100644 index 0000000000000..a6c06bedf41e0 --- /dev/null +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.custom-build.expected.json @@ -0,0 +1,113 @@ +{ + "Resources": { + "myhandlerServiceRole77891068": { + "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" + ] + ] + } + ] + } + }, + "myhandlerD202FA8E": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "S3Bucket": { + "Ref": "AssetParameters8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9dS3Bucket0D7ED7BA" + }, + "S3Key": { + "Fn::Join": [ + "", + [ + { + "Fn::Select": [ + 0, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParameters8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9dS3VersionKey5CD58274" + } + ] + } + ] + }, + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "||", + { + "Ref": "AssetParameters8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9dS3VersionKey5CD58274" + } + ] + } + ] + } + ] + ] + } + }, + "Role": { + "Fn::GetAtt": [ + "myhandlerServiceRole77891068", + "Arn" + ] + }, + "Handler": "index.handler", + "Runtime": "python3.8" + }, + "DependsOn": [ + "myhandlerServiceRole77891068" + ] + } + }, + "Parameters": { + "AssetParameters8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9dS3Bucket0D7ED7BA": { + "Type": "String", + "Description": "S3 bucket for asset \"8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9d\"" + }, + "AssetParameters8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9dS3VersionKey5CD58274": { + "Type": "String", + "Description": "S3 key for asset version \"8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9d\"" + }, + "AssetParameters8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9dArtifactHash3FD1FF77": { + "Type": "String", + "Description": "Artifact hash for asset \"8fc4fd4f1abe3a706b6b352735cbfd7feb66aca750b63d920c6f018e9d665b9d\"" + } + }, + "Outputs": { + "FunctionArn": { + "Value": { + "Fn::GetAtt": [ + "myhandlerD202FA8E", + "Arn" + ] + } + } + } +} \ No newline at end of file diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.custom-build.ts b/packages/@aws-cdk/aws-lambda-python/test/integ.function.custom-build.ts new file mode 100644 index 0000000000000..8323111981cb5 --- /dev/null +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.custom-build.ts @@ -0,0 +1,30 @@ +import * as path from 'path'; +import { Runtime } from '@aws-cdk/aws-lambda'; +import { App, CfnOutput, Stack, StackProps } from '@aws-cdk/core'; +import { Construct } from 'constructs'; +import * as lambda from '../lib'; + +/* + * Stack verification steps: + * * aws lambda invoke --function-name --invocation-type Event --payload '"OK"' response.json + */ + +class TestStack extends Stack { + constructor(scope: Construct, id: string, props?: StackProps) { + super(scope, id, props); + + const fn = new lambda.PythonFunction(this, 'my_handler', { + entry: path.join(__dirname, 'lambda-handler-custom-build-docker-image'), + runtime: Runtime.PYTHON_3_8, + dockerBuildImageOptions: { file: 'Dockerfile.build' }, + }); + + new CfnOutput(this, 'FunctionArn', { + value: fn.functionArn, + }); + } +} + +const app = new App(); +new TestStack(app, 'cdk-integ-lambda-python'); +app.synth(); diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.expected.json index e48b9c2e0ad92..e5b4fedf07162 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.expected.json +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.expected.json @@ -36,7 +36,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3Bucket383ED51E" + "Ref": "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3BucketFE74C9CC" }, "S3Key": { "Fn::Join": [ @@ -49,7 +49,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3VersionKeyA520554C" + "Ref": "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3VersionKey30510788" } ] } @@ -62,7 +62,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3VersionKeyA520554C" + "Ref": "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3VersionKey30510788" } ] } @@ -87,17 +87,17 @@ } }, "Parameters": { - "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3Bucket383ED51E": { + "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3BucketFE74C9CC": { "Type": "String", - "Description": "S3 bucket for asset \"fc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2\"" + "Description": "S3 bucket for asset \"34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827\"" }, - "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3VersionKeyA520554C": { + "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3VersionKey30510788": { "Type": "String", - "Description": "S3 key for asset version \"fc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2\"" + "Description": "S3 key for asset version \"34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827\"" }, - "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2ArtifactHashB863A6ED": { + "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827ArtifactHash4101408A": { "Type": "String", - "Description": "Artifact hash for asset \"fc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2\"" + "Description": "Artifact hash for asset \"34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.pipenv.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.pipenv.expected.json index 2b64c7f650529..b8b02c0cd1a50 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.pipenv.expected.json +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.pipenv.expected.json @@ -36,7 +36,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46S3Bucket84213B6F" + "Ref": "AssetParameters060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30S3Bucket44B9F314" }, "S3Key": { "Fn::Join": [ @@ -49,7 +49,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46S3VersionKeyC495D2FD" + "Ref": "AssetParameters060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30S3VersionKeyA9EAA01D" } ] } @@ -62,7 +62,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46S3VersionKeyC495D2FD" + "Ref": "AssetParameters060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30S3VersionKeyA9EAA01D" } ] } @@ -121,7 +121,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335S3Bucket1E236877" + "Ref": "AssetParameters57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90S3Bucket010097A5" }, "S3Key": { "Fn::Join": [ @@ -134,7 +134,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335S3VersionKeyD0D6DBBF" + "Ref": "AssetParameters57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90S3VersionKeyB170DCA5" } ] } @@ -147,7 +147,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335S3VersionKeyD0D6DBBF" + "Ref": "AssetParameters57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90S3VersionKeyB170DCA5" } ] } @@ -206,7 +206,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888S3BucketC4EB0B32" + "Ref": "AssetParameterse26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8S3Bucket468C0DA4" }, "S3Key": { "Fn::Join": [ @@ -219,7 +219,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888S3VersionKeyB8755D2B" + "Ref": "AssetParameterse26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8S3VersionKey324C33AC" } ] } @@ -232,7 +232,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888S3VersionKeyB8755D2B" + "Ref": "AssetParameterse26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8S3VersionKey324C33AC" } ] } @@ -257,41 +257,41 @@ } }, "Parameters": { - "AssetParameters2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46S3Bucket84213B6F": { + "AssetParameters060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30S3Bucket44B9F314": { "Type": "String", - "Description": "S3 bucket for asset \"2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46\"" + "Description": "S3 bucket for asset \"060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30\"" }, - "AssetParameters2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46S3VersionKeyC495D2FD": { + "AssetParameters060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30S3VersionKeyA9EAA01D": { "Type": "String", - "Description": "S3 key for asset version \"2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46\"" + "Description": "S3 key for asset version \"060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30\"" }, - "AssetParameters2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46ArtifactHashBBA8D438": { + "AssetParameters060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30ArtifactHash26368392": { "Type": "String", - "Description": "Artifact hash for asset \"2f7cfa4e9b9d7c70c9af6f1820a340c116a1e139fcac4dde381f541331ba5e46\"" + "Description": "Artifact hash for asset \"060416259f6efcc0d90c40cfa79ab314fa8ad5fae054b63160cd2ba3d9c17f30\"" }, - "AssetParameters7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335S3Bucket1E236877": { + "AssetParameters57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90S3Bucket010097A5": { "Type": "String", - "Description": "S3 bucket for asset \"7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335\"" + "Description": "S3 bucket for asset \"57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90\"" }, - "AssetParameters7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335S3VersionKeyD0D6DBBF": { + "AssetParameters57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90S3VersionKeyB170DCA5": { "Type": "String", - "Description": "S3 key for asset version \"7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335\"" + "Description": "S3 key for asset version \"57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90\"" }, - "AssetParameters7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335ArtifactHash3C95A517": { + "AssetParameters57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90ArtifactHashC214E02A": { "Type": "String", - "Description": "Artifact hash for asset \"7157876e6cb8bea4bc3b6e272edab8a4d202a0be6bdcecf33b95008fbacc2335\"" + "Description": "Artifact hash for asset \"57dd62453f00b5514d0290b0ec3c5d5283745eea9a3c57da85b320ab536e9b90\"" }, - "AssetParameters1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888S3BucketC4EB0B32": { + "AssetParameterse26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8S3Bucket468C0DA4": { "Type": "String", - "Description": "S3 bucket for asset \"1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888\"" + "Description": "S3 bucket for asset \"e26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8\"" }, - "AssetParameters1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888S3VersionKeyB8755D2B": { + "AssetParameterse26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8S3VersionKey324C33AC": { "Type": "String", - "Description": "S3 key for asset version \"1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888\"" + "Description": "S3 key for asset version \"e26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8\"" }, - "AssetParameters1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888ArtifactHash46327689": { + "AssetParameterse26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8ArtifactHashE334EBCF": { "Type": "String", - "Description": "Artifact hash for asset \"1d8b9cdbaaf7c36dc94604966b3b1f6fb2a972fbddc5cfd62fef7a7a8efd5888\"" + "Description": "Artifact hash for asset \"e26b3d31d86d2b4711dae853b396b9917104885fa0bd302aeb42a17c111b46f8\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.poetry.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.poetry.expected.json index 6e305994bd801..f411579a6afe8 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.poetry.expected.json +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.poetry.expected.json @@ -36,7 +36,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3S3Bucket666BD1AB" + "Ref": "AssetParameters5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaefS3Bucket259463A5" }, "S3Key": { "Fn::Join": [ @@ -49,7 +49,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3S3VersionKeyA31B2B4A" + "Ref": "AssetParameters5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaefS3VersionKeyB62E5139" } ] } @@ -62,7 +62,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3S3VersionKeyA31B2B4A" + "Ref": "AssetParameters5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaefS3VersionKeyB62E5139" } ] } @@ -121,7 +121,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764S3BucketFA6FBCEA" + "Ref": "AssetParameters9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951S3BucketDEEAA5B1" }, "S3Key": { "Fn::Join": [ @@ -134,7 +134,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764S3VersionKey55B7E38F" + "Ref": "AssetParameters9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951S3VersionKey0A6B0137" } ] } @@ -147,7 +147,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764S3VersionKey55B7E38F" + "Ref": "AssetParameters9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951S3VersionKey0A6B0137" } ] } @@ -206,7 +206,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0S3BucketC2F9D441" + "Ref": "AssetParametersd1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9aS3Bucket87E5DFE4" }, "S3Key": { "Fn::Join": [ @@ -219,7 +219,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0S3VersionKeyB53188B8" + "Ref": "AssetParametersd1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9aS3VersionKey4EA02523" } ] } @@ -232,7 +232,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0S3VersionKeyB53188B8" + "Ref": "AssetParametersd1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9aS3VersionKey4EA02523" } ] } @@ -257,41 +257,41 @@ } }, "Parameters": { - "AssetParameters5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3S3Bucket666BD1AB": { + "AssetParameters5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaefS3Bucket259463A5": { "Type": "String", - "Description": "S3 bucket for asset \"5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3\"" + "Description": "S3 bucket for asset \"5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaef\"" }, - "AssetParameters5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3S3VersionKeyA31B2B4A": { + "AssetParameters5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaefS3VersionKeyB62E5139": { "Type": "String", - "Description": "S3 key for asset version \"5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3\"" + "Description": "S3 key for asset version \"5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaef\"" }, - "AssetParameters5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3ArtifactHash8BEEBB0C": { + "AssetParameters5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaefArtifactHash056B1637": { "Type": "String", - "Description": "Artifact hash for asset \"5e3cce416e15bd5ddb77e3ffc9fa3d8f5eac73b0db8c1db7ae3d7f6197c0ecb3\"" + "Description": "Artifact hash for asset \"5a887af6c2bed84e4e6a1ac9a111fc619b3e6a4dac131d62b057378fc7e6eaef\"" }, - "AssetParameters12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764S3BucketFA6FBCEA": { + "AssetParameters9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951S3BucketDEEAA5B1": { "Type": "String", - "Description": "S3 bucket for asset \"12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764\"" + "Description": "S3 bucket for asset \"9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951\"" }, - "AssetParameters12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764S3VersionKey55B7E38F": { + "AssetParameters9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951S3VersionKey0A6B0137": { "Type": "String", - "Description": "S3 key for asset version \"12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764\"" + "Description": "S3 key for asset version \"9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951\"" }, - "AssetParameters12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764ArtifactHashF654A092": { + "AssetParameters9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951ArtifactHash2ECB06BD": { "Type": "String", - "Description": "Artifact hash for asset \"12a01ed3f74f4bee61a4c67c4ca842472390f70c4b8bdd2cceb033abe16d7764\"" + "Description": "Artifact hash for asset \"9e459eefe171d8c91bbc7f4ae00e0a8d00798cb64f5c3cb04f34b95bf9f83951\"" }, - "AssetParameters22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0S3BucketC2F9D441": { + "AssetParametersd1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9aS3Bucket87E5DFE4": { "Type": "String", - "Description": "S3 bucket for asset \"22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0\"" + "Description": "S3 bucket for asset \"d1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9a\"" }, - "AssetParameters22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0S3VersionKeyB53188B8": { + "AssetParametersd1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9aS3VersionKey4EA02523": { "Type": "String", - "Description": "S3 key for asset version \"22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0\"" + "Description": "S3 key for asset version \"d1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9a\"" }, - "AssetParameters22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0ArtifactHash63D0E537": { + "AssetParametersd1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9aArtifactHashA0F71311": { "Type": "String", - "Description": "Artifact hash for asset \"22d2bf270f7c8f776322a3bad39e8c690cbaa95a442ae2fec419b259df5632f0\"" + "Description": "Artifact hash for asset \"d1e640fbfe5bef6567af5a74e147138d4df47ca433d3a7ad3ec448784708ae9a\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.project.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.project.expected.json index 0e27a16d95cac..6c7734f4cb6d6 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.project.expected.json +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.project.expected.json @@ -5,7 +5,7 @@ "Properties": { "Content": { "S3Bucket": { - "Ref": "AssetParameterse6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137S3Bucket3B546DC9" + "Ref": "AssetParametersc91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380aS3Bucket09330132" }, "S3Key": { "Fn::Join": [ @@ -18,7 +18,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameterse6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137S3VersionKeyAB88DB86" + "Ref": "AssetParametersc91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380aS3VersionKey7375479A" } ] } @@ -31,7 +31,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameterse6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137S3VersionKeyAB88DB86" + "Ref": "AssetParametersc91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380aS3VersionKey7375479A" } ] } @@ -82,7 +82,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856S3Bucket091DB419" + "Ref": "AssetParameters99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587S3Bucket8E4264F3" }, "S3Key": { "Fn::Join": [ @@ -95,7 +95,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856S3VersionKey635CFDCB" + "Ref": "AssetParameters99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587S3VersionKey5049A4C4" } ] } @@ -108,7 +108,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856S3VersionKey635CFDCB" + "Ref": "AssetParameters99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587S3VersionKey5049A4C4" } ] } @@ -138,29 +138,29 @@ } }, "Parameters": { - "AssetParameterse6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137S3Bucket3B546DC9": { + "AssetParametersc91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380aS3Bucket09330132": { "Type": "String", - "Description": "S3 bucket for asset \"e6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137\"" + "Description": "S3 bucket for asset \"c91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380a\"" }, - "AssetParameterse6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137S3VersionKeyAB88DB86": { + "AssetParametersc91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380aS3VersionKey7375479A": { "Type": "String", - "Description": "S3 key for asset version \"e6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137\"" + "Description": "S3 key for asset version \"c91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380a\"" }, - "AssetParameterse6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137ArtifactHashE6CFFE39": { + "AssetParametersc91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380aArtifactHashACE48BE6": { "Type": "String", - "Description": "Artifact hash for asset \"e6dde8a412edfc6d967ce7244c803ebd6523ebc30b4c5562919028c6edf8f137\"" + "Description": "Artifact hash for asset \"c91907690d0522d77e1a9c3f8b58b4ea97c1418857bc50bcdd4392b8b5c0380a\"" }, - "AssetParameters4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856S3Bucket091DB419": { + "AssetParameters99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587S3Bucket8E4264F3": { "Type": "String", - "Description": "S3 bucket for asset \"4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856\"" + "Description": "S3 bucket for asset \"99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587\"" }, - "AssetParameters4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856S3VersionKey635CFDCB": { + "AssetParameters99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587S3VersionKey5049A4C4": { "Type": "String", - "Description": "S3 key for asset version \"4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856\"" + "Description": "S3 key for asset version \"99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587\"" }, - "AssetParameters4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856ArtifactHashB70D4FAA": { + "AssetParameters99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587ArtifactHash554AB349": { "Type": "String", - "Description": "Artifact hash for asset \"4364b96840104e125d2c47166f8bada01e9a636f3c23d4cddf681c685d494856\"" + "Description": "Artifact hash for asset \"99f0d86a238f8e5cc62dd7c05c2fcaf755dde1ffcf0bb10a828c3ae046450587\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.py38.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.py38.expected.json index 41d154158be8a..279a8636693fa 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.py38.expected.json +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.py38.expected.json @@ -36,7 +36,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParametersc3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526dS3Bucket2D6AE647" + "Ref": "AssetParametersf6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31bS3BucketF2CACD07" }, "S3Key": { "Fn::Join": [ @@ -49,7 +49,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersc3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526dS3VersionKeyF8CA384F" + "Ref": "AssetParametersf6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31bS3VersionKey03DF1D1C" } ] } @@ -62,7 +62,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersc3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526dS3VersionKeyF8CA384F" + "Ref": "AssetParametersf6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31bS3VersionKey03DF1D1C" } ] } @@ -87,17 +87,17 @@ } }, "Parameters": { - "AssetParametersc3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526dS3Bucket2D6AE647": { + "AssetParametersf6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31bS3BucketF2CACD07": { "Type": "String", - "Description": "S3 bucket for asset \"c3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526d\"" + "Description": "S3 bucket for asset \"f6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31b\"" }, - "AssetParametersc3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526dS3VersionKeyF8CA384F": { + "AssetParametersf6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31bS3VersionKey03DF1D1C": { "Type": "String", - "Description": "S3 key for asset version \"c3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526d\"" + "Description": "S3 key for asset version \"f6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31b\"" }, - "AssetParametersc3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526dArtifactHash8B92B092": { + "AssetParametersf6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31bArtifactHash2846F667": { "Type": "String", - "Description": "Artifact hash for asset \"c3efdfac6089b6c2ee8dce3aac310085091823af614fce0fb5e42799930f526d\"" + "Description": "Artifact hash for asset \"f6e478202d95e889201de9b1defc9e695088c757f83b3f9f607c433b16fff31b\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.requirements.removed.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.requirements.removed.expected.json index eb7fc23f146c9..cc8cfab7cde3e 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.requirements.removed.expected.json +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.requirements.removed.expected.json @@ -36,7 +36,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParametersdf0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563S3Bucket1ACC1E9E" + "Ref": "AssetParameters88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bcS3BucketAF31E7AE" }, "S3Key": { "Fn::Join": [ @@ -49,7 +49,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersdf0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563S3VersionKeyEA6BC868" + "Ref": "AssetParameters88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bcS3VersionKeyB6DDEAAA" } ] } @@ -62,7 +62,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersdf0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563S3VersionKeyEA6BC868" + "Ref": "AssetParameters88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bcS3VersionKeyB6DDEAAA" } ] } @@ -87,17 +87,17 @@ } }, "Parameters": { - "AssetParametersdf0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563S3Bucket1ACC1E9E": { + "AssetParameters88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bcS3BucketAF31E7AE": { "Type": "String", - "Description": "S3 bucket for asset \"df0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563\"" + "Description": "S3 bucket for asset \"88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bc\"" }, - "AssetParametersdf0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563S3VersionKeyEA6BC868": { + "AssetParameters88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bcS3VersionKeyB6DDEAAA": { "Type": "String", - "Description": "S3 key for asset version \"df0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563\"" + "Description": "S3 key for asset version \"88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bc\"" }, - "AssetParametersdf0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563ArtifactHash887C8025": { + "AssetParameters88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bcArtifactHash5887CAA2": { "Type": "String", - "Description": "Artifact hash for asset \"df0fb94d329926d232a09d16076d3eee0200e6a945f32ff69a97ba787087d563\"" + "Description": "Artifact hash for asset \"88e6e463c78b23914ee1e7812e328654051d412df8aab9c411597133c27b52bc\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/aws-lambda-python/test/integ.function.vpc.expected.json b/packages/@aws-cdk/aws-lambda-python/test/integ.function.vpc.expected.json index 99705bba839a3..a60c1cbdbf370 100644 --- a/packages/@aws-cdk/aws-lambda-python/test/integ.function.vpc.expected.json +++ b/packages/@aws-cdk/aws-lambda-python/test/integ.function.vpc.expected.json @@ -296,7 +296,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3Bucket383ED51E" + "Ref": "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3BucketFE74C9CC" }, "S3Key": { "Fn::Join": [ @@ -309,7 +309,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3VersionKeyA520554C" + "Ref": "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3VersionKey30510788" } ] } @@ -322,7 +322,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3VersionKeyA520554C" + "Ref": "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3VersionKey30510788" } ] } @@ -368,17 +368,17 @@ } }, "Parameters": { - "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3Bucket383ED51E": { + "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3BucketFE74C9CC": { "Type": "String", - "Description": "S3 bucket for asset \"fc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2\"" + "Description": "S3 bucket for asset \"34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827\"" }, - "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2S3VersionKeyA520554C": { + "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827S3VersionKey30510788": { "Type": "String", - "Description": "S3 key for asset version \"fc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2\"" + "Description": "S3 key for asset version \"34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827\"" }, - "AssetParametersfc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2ArtifactHashB863A6ED": { + "AssetParameters34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827ArtifactHash4101408A": { "Type": "String", - "Description": "Artifact hash for asset \"fc7bfbf72c74b955f7bc25d2bb123c0eeec9557cda17481146d51672768907b2\"" + "Description": "Artifact hash for asset \"34f9ffc1c991e92e034e5fbb7b7bea70e4a6a868250c3643c1d680d6a5532827\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/Dockerfile.build b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/Dockerfile.build new file mode 100644 index 0000000000000..c8f2f3bb20e19 --- /dev/null +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/Dockerfile.build @@ -0,0 +1,17 @@ +# The correct AWS SAM build image based on the runtime of the function will be +# passed as build arg. The default allows to do `docker build .` when testing. +ARG IMAGE=public.ecr.aws/sam/build-python3.7 +FROM $IMAGE + +# Ensure rsync is installed +RUN yum -q list installed rsync &>/dev/null || yum install -y rsync + +# Upgrade pip (required by cryptography v3.4 and above, which is a dependency of poetry) +RUN pip install --upgrade pip + +# Install the dependencies in a cacheable layer +WORKDIR /var/dependencies +COPY requirements.txt ./ +RUN [ -f 'requirements.txt' ] && pip install -r requirements.txt -t .; + +CMD [ "python" ] diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/index.py b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/index.py new file mode 100644 index 0000000000000..c033f37560534 --- /dev/null +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/index.py @@ -0,0 +1,11 @@ +import requests +from PIL import Image + +def handler(event, context): + response = requests.get('https://a0.awsstatic.com/main/images/logos/aws_smile-header-desktop-en-white_59x35.png', stream=True) + img = Image.open(response.raw) + + print(response.status_code) + print(img.size) + + return response.status_code diff --git a/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/requirements.txt b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/requirements.txt new file mode 100644 index 0000000000000..10fdedeb59ab2 --- /dev/null +++ b/packages/@aws-cdk/aws-lambda-python/test/lambda-handler-custom-build-docker-image/requirements.txt @@ -0,0 +1,9 @@ +# Lock versions of pip packages +certifi==2020.6.20 +chardet==3.0.4 +idna==2.10 +urllib3==1.25.11 +# Requests used by this lambda +requests==2.23.0 +# Pillow 6.x so that python 2.7 and 3.x can both use this fixture +pillow==6.2.2