ホームページ >バックエンド開発 >Python チュートリアル >DockerでAWSレイヤーを作成します。

DockerでAWSレイヤーを作成します。

Barbara Streisand
Barbara Streisandオリジナル
2024-11-07 10:21:02444ブラウズ

Creating AWS layer with Docker.

ラムダ関数用に AWS でレイヤーを作成する必要があり、このレイヤーにはその操作にいくつかの SO 依存関係があるため、問題が発生した場合、これについては aws ドキュメントを参照してください。不十分な場合があります。

したがって、この場合、必要な層に不足しているバイナリをビルドできます。

この例では、Python 3.x と Pdf2Image ライブラリを使用してデモを作成します

前提条件

  • Docker インストール
  • Python 3.x
  • AWS CLI 設定 (オプション)
  • AWS Lambda にアクセスする

1. 環境を整える

mkdir lambda-layer
cd lambda-layer
mkdir python
cd python

2. Python の依存関係のインストール

pip3 install [your_dependencies] \
    --platform manylinux2014_x86_64 \
    --target . \
    --only-binary=:all: \
    --implementation cp \
    --python-version [TU_VERSION_PYTHON] \
    --no-deps

pdf2image の例:

pip3 install pdf2image Pillow \
    --platform manylinux2014_x86_64 \
    --target . \
    --only-binary=:all: \
    --implementation cp \
    --python-version 3.10 \
    --no-deps

3. Dockerfile ベース

FROM ubuntu:22.04 as builder

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    python3.10 \
    python3-pip \
    binutils \
    zip \
    [TUS_PAQUETES_ADICIONALES] \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*


WORKDIR /lambda
RUN mkdir -p /opt/python/lib/python3.10/site-packages/bin

COPY python/ /opt/python/lib/python3.10/site-packages/

RUN cp [TUS_BINARIOS] /opt/python/lib/python3.10/site-packages/bin/ && \
    chmod 755 /opt/python/lib/python3.10/site-packages/bin/*

RUN cd /opt && zip -r9 /lambda/layer.zip python/

FROM alpine:3.18
COPY --from=builder /lambda/layer.zip /
CMD ["/bin/sh"]

4. ビルドと抽出

# image build
docker build -t lambda-layer .

# extract layer.zip
docker run --rm -v "$(pwd)":/out lambda-layer cp /layer.zip /out/

5. レイヤーの使用

前の手順の後、いつものようにレイヤーをアップロードし、プロジェクトにインポートできます

import os
import sys

#Configuring paths
SITE_PACKAGES = '/opt/python/lib/python3.10/site-packages'
BIN_DIR = os.path.join(SITE_PACKAGES, 'bin')
os.environ['PATH'] = f"{BIN_DIR}:{os.environ['PATH']}"
sys.path.append(SITE_PACKAGES)

#importing dependencies
from pdf2image import [your_import]

def lambda_handler(event, context):
    try:
        # your code here
        return {
            'statusCode': 200,
            'body': 'Success'
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'body': f'Error: {str(e)}'
        }

参考文献

  • AWS Lambda レイヤーのドキュメント
  • Python パッケージ管理
  • Docker ドキュメント

以上がDockerでAWSレイヤーを作成します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。