【備忘録】Colimaでmac環境にdockerをセットアップして、CDK Lambdaでバンドルできるようにする

はじめに

とりあえず動いたので、その過程を備忘録として記載する。

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/>":
無料相談実施中
AWSを使用したサーバーレスアプリケーションの構築
サーバーレス開発内製化、AWSへの移行等
様々な課題について無料でご相談お受けいたします。
最新情報をチェックしよう!