はじめに
とりあえず動いたので、その過程を備忘録として記載する。
macでDocker Desktop使えない事情があったので、Colimaを使ってみた。
Rancher Desktopを最初に試したが、おそらくDNS関連でエラーに発生したので今回は見送り。
今回のマスト条件 は下記。
- CDKにてLambdaを依存パッケージ込みでデプロイしたいときに、バンドリングをするためにdockerが必要
Colima
めっちゃ簡単。
ただし詳細は分かってない。(そもそもdocker自体が、、)
ググるとそこそこ記事がヒットするが、リポジトリのREADME.mdと少し異なる内容だったりしたので、素直にREADMEを参考にした。
インストール
brew install colima
brew install docker
起動
colima start
# 一応、確認
docker context list
動作確認
docker run -t -i ubuntu:14.04 /bin/bash
動作は問題なさそう。
CDK lambda コードのバンドル
CDKコード
from aws_cdk import (
BundlingOptions,
Stack,
aws_lambda as lambda_,
)
from constructs import Construct
class DemoCdkLambdaStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
lambda_.Function(
self, 'DemoCdkLambdaFunction',
runtime=lambda_.Runtime.PYTHON_3_9,
code=lambda_.Code.from_asset(
'lambda',
bundling=BundlingOptions(
image=lambda_.Runtime.PYTHON_3_9.bundling_image,
command=["bash", "-c", "pip install -r requirements.txt -t /asset-output && cp -au . /asset-output"],
)
),
handler='app.lambda_handler',
)
cdk synth
でバンドルされるので、問題なければdockerも普通に動く。
ちょっと補足。
- dockerが必要な理由は、
requirements.txt
に記載されている依存パッケージを含めてlambdaにデプロイしたいから - このデプロイパッケージの作成の際に、コンテナが利用されている(参考、参考2)
あとがき
Colima でできなかったら、OrbStack
も試す予定だった。これは正式リリースでは有料になるみたいだが。。でもかなり使いやすそうな気がしている。
finch
もAWS互換が期待できそうなのでよいかもしれない。
lambda-python-alpha
ではつかえそうな感じがする。(参考)
おまけ
他の作業時のエラーログの抜粋だが、利用しているimageはecrのpublicイメージみたい。
Unable to find image 'public.ecr.aws/sam/build-python3.9:latest' locally
docker: Error response from daemon: Get "<https://public.ecr.aws/v2/>":