Skip to content

Instantly share code, notes, and snippets.

@sheep-snow
Last active March 6, 2025 05:43
Show Gist options
  • Select an option

  • Save sheep-snow/b3338006a9849ea80217c68a7bd6fa88 to your computer and use it in GitHub Desktop.

Select an option

Save sheep-snow/b3338006a9849ea80217c68a7bd6fa88 to your computer and use it in GitHub Desktop.
using-uv-with-python-lambda-image-on-ecr-public-repo
# AWS Lambda 関数の公式コンテナイメージ https://gallery.ecr.aws/lambda/python で
# uv https://docs.astral.sh/uv/ を使って python パッケージ管理と実行を可能にする最小限の例
FROM public.ecr.aws/lambda/python:3.12
# uv を公式イメージからCOPYする方法でインストールする
# https://docs.astral.sh/uv/guides/integration/docker/#installing-uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
ENV PATH="/app/.venv/bin:$PATH"
# AWS Lambda は書込可能なディレクトリが `/tmp` 配下だけなので uv の cache も同ディレクトリ配下を使うように変更する
# https://docs.astral.sh/uv/configuration/environment/
ENV UV_CACHE_DIR=/tmp/.uv_cache
# uv の lockfile からプロジェクトの python パッケージ をインストールする
COPY pyproject.toml uv.lock ${LAMBDA_TASK_ROOT}/
RUN uv sync
# Lambda関数のコード `./src/` をイメージに含める
COPY src/ ${LAMBDA_TASK_ROOT}/
# AWS Lambda イメージのデフォルトのエントリーポイント `lambda-entrypoint.sh` を
# uv の仮想環境で実行させることで sync したパッケージが利用可能なコンテキストでLambdaを実行させる
ENTRYPOINT ["uv", "run", "/lambda-entrypoint.sh"]
# `lambda-entrypoint.sh` に `./src/lambda_handler.py` の `handler(event, context)` を
# Lambda関数のエントリーポイントとして指定する例。プロジェクトに合わせてお好みで
# CMD ["lambda_handler.handler"]
@sheep-snow
Copy link
Copy Markdown
Author

build example.

$ time docker build -t test . --no-cache
[+] Building 16.1s (12/12) FINISHED                                                                                                                                                                                           docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                                                    0.0s
 => => transferring dockerfile: 1.56kB                                                                                                                                                                                                  0.0s
 => [internal] load metadata for ghcr.io/astral-sh/uv:latest                                                                                                                                                                            1.4s
 => [internal] load metadata for public.ecr.aws/lambda/python:3.12                                                                                                                                                                      1.3s
 => [internal] load .dockerignore                                                                                                                                                                                                       0.0s
 => => transferring context: 2B                                                                                                                                                                                                         0.0s
 => FROM ghcr.io/astral-sh/uv:latest@sha256:cd828bfd850cf2ce73e5c294bbec67010949f8814b2b2ac245ab98e0433bee1c                                                                                                                            2.3s
 => => resolve ghcr.io/astral-sh/uv:latest@sha256:cd828bfd850cf2ce73e5c294bbec67010949f8814b2b2ac245ab98e0433bee1c                                                                                                                      0.0s
 => => sha256:cd828bfd850cf2ce73e5c294bbec67010949f8814b2b2ac245ab98e0433bee1c 1.61kB / 1.61kB                                                                                                                                          0.0s
 => => sha256:14d2902f9e884bf09e7f9eaee89a9a62e966924c6109413307349ed92d527600 860B / 860B                                                                                                                                              0.0s
 => => sha256:30a44a9a79fe2a107ba68a27178b76d7b1ae7e17b8e45c95dacf147d4a5a19eb 1.49kB / 1.49kB                                                                                                                                          0.0s
 => => sha256:1221a073c9446529ff28f9aacf9a3d9e54d65b8a40741b239e725f380c876109 11.77MB / 11.77MB                                                                                                                                        1.5s
 => => sha256:e0452f81a14c1db676fe87864d8766612eb2a1db87413c2edfe1c23dcbee6bba 211.90kB / 211.90kB                                                                                                                                      1.3s
 => => sha256:839875f8a357c397d321838e0ba2c6f6e9be4b45318e24c9aab59ccdc1e721ba 94B / 94B                                                                                                                                                1.8s
 => => extracting sha256:1221a073c9446529ff28f9aacf9a3d9e54d65b8a40741b239e725f380c876109                                                                                                                                               0.3s
 => => extracting sha256:e0452f81a14c1db676fe87864d8766612eb2a1db87413c2edfe1c23dcbee6bba                                                                                                                                               0.1s
 => => extracting sha256:839875f8a357c397d321838e0ba2c6f6e9be4b45318e24c9aab59ccdc1e721ba                                                                                                                                               0.0s
 => [stage-0 1/5] FROM public.ecr.aws/lambda/python:3.12@sha256:0a3d34a8310dc339ea7afeb64725df5685da2e6f335dc9287cbc0cddc4a159f2                                                                                                       10.1s
 => => resolve public.ecr.aws/lambda/python:3.12@sha256:0a3d34a8310dc339ea7afeb64725df5685da2e6f335dc9287cbc0cddc4a159f2                                                                                                                0.0s
 => => sha256:0a3d34a8310dc339ea7afeb64725df5685da2e6f335dc9287cbc0cddc4a159f2 772B / 772B                                                                                                                                              0.0s
 => => sha256:23f8cbc7b6fa9c026d55591ee3e645bc5385dc148e145ffb65726785d4b2f46f 416B / 416B                                                                                                                                              0.3s
 => => sha256:9fedba3e18c21a1f3fd55a766be36ccaa81f9b5a280e1f033aff446a05c0a3a1 1.58kB / 1.58kB                                                                                                                                          0.0s
 => => sha256:0f1aa3257dc1540c9e8c18249c1f548861af272ac9418829ac94bf86731dbb15 4.38kB / 4.38kB                                                                                                                                          0.0s
 => => sha256:63dd019f112a839076dffd8cda46d125e09b4712e94c5bb8b4fd006e180aab28 35.80MB / 35.80MB                                                                                                                                        0.8s
 => => sha256:9dff4bf94d846cd15a8f1f3c1c6a7f41c0a430213c3c26584043cc7a095fdec4 88.00kB / 88.00kB                                                                                                                                        0.4s
 => => sha256:28f305d0bd679f87775aabdc0ed6afe49040843d7bb23a7412fd30320df41d6c 2.68MB / 2.68MB                                                                                                                                          0.5s
 => => sha256:256f6e93aff0212946b239cf62e18d3cecd02495ca72726a782baecdf5842420 14.15kB / 14.15kB                                                                                                                                        0.6s
 => => sha256:004ad8307fb8fa7a5177d19f19e9815748b02135a7a3b7fb87ea02c2bd44030c 143.61MB / 143.61MB                                                                                                                                      2.1s
 => => extracting sha256:63dd019f112a839076dffd8cda46d125e09b4712e94c5bb8b4fd006e180aab28                                                                                                                                               2.3s
 => => extracting sha256:9dff4bf94d846cd15a8f1f3c1c6a7f41c0a430213c3c26584043cc7a095fdec4                                                                                                                                               0.0s
 => => extracting sha256:23f8cbc7b6fa9c026d55591ee3e645bc5385dc148e145ffb65726785d4b2f46f                                                                                                                                               0.0s
 => => extracting sha256:28f305d0bd679f87775aabdc0ed6afe49040843d7bb23a7412fd30320df41d6c                                                                                                                                               0.1s
 => => extracting sha256:004ad8307fb8fa7a5177d19f19e9815748b02135a7a3b7fb87ea02c2bd44030c                                                                                                                                               6.3s
 => => extracting sha256:256f6e93aff0212946b239cf62e18d3cecd02495ca72726a782baecdf5842420                                                                                                                                               0.0s
 => [internal] load build context                                                                                                                                                                                                       0.0s
 => => transferring context: 5.22kB                                                                                                                                                                                                     0.0s
 => [stage-0 2/5] COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv                                                                                                                                                                   2.8s
 => [stage-0 3/5] COPY pyproject.toml uv.lock /var/task/                                                                                                                                                                                0.0s
 => [stage-0 4/5] RUN uv sync                                                                                                                                                                                                           1.0s
 => [stage-0 5/5] COPY src/ /var/task/                                                                                                                                                                                                  0.0s
 => exporting to image                                                                                                                                                                                                                  0.6s
 => => exporting layers                                                                                                                                                                                                                 0.6s
 => => writing image sha256:c5caea6b81007691e74e4625884c6b2c35a16a9373195233c4f6b3a83bf67526                                                                                                                                            0.0s
 => => naming to docker.io/library/test                                                                                                                                                                                                 0.0s

real    0m16.287s
user    0m0.224s
sys     0m0.100s
$ 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment