背景
Python のPillow を利用したLambda FunctionをLocalでは問題なく実行できるのにcdkでDeployしたら以下
のようまエラーではまってました。
cannot import name '_imaging' from 'PIL' (/var/task/PIL/__init__.py)
最初にDeployした方法(エラー再現パタン)
- cdk の指定
create_func = lambda.Function(self, "createFunction",
code=lambda.Code.asset('functions/artifacts'),
handler="create.lambda_handler",
runtime=lambda.Runtime.PYTHON_3_8,
environment=environment,
tracing=lambda.Tracing.ACTIVE,
timeout=core.Duration.seconds(29),
memory_size=512
)
- Deploy コマンド
$ rm -rf functions/artifacts
$ cp -a functions/src functions/artifacts
$ pip install -r functions/artifacts/requirements.txt -t functions/artifacts/
$ cdk deploy --require-approval never
成功パタン以下の方法で対応できた
- cdk の指定
create_func = lambda.Function(self, "createFunction",
code=lambda.Code.from_asset('functions/src',
bundling=core.BundlingOptions(
image=lambda.Runtime.PYTHON_3_8.bundling_docker_image,
command=[ 'bash', '-c', 'pip install -r requirements.txt -t /asset-output && cp -a . /asset-output'],
)
),
handler="create.lambda_handler",
runtime=lambda.Runtime.PYTHON_3_8,
environment=environment,
tracing=lambda.Tracing.ACTIVE,
timeout=core.Duration.seconds(
29),
memory_size=512
)
- Deploy コマンド
$ cdk deploy --require-approval never