LoginSignup
1
1

More than 3 years have passed since last update.

DockerとAWS CLIを利用してAWS Layerを作成する

Last updated at Posted at 2019-07-13

DockerとAWS CLIを利用して任意のパッケージを含めたAWS LambdaのLayerを作成する手順のメモ。

Dockerコンテナ内でパッケージインストールからzip作成まで完結させるので、マシン環境を無闇に汚さずに済む、再現性に優れる、というメリットがある。

前提環境

$ bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
(中略)

$ docker version
Client:
 Version:           18.06.1-ce
 (中略)

$ aws --version
aws-cli/1.16.198 Python/3.6.8 Linux/4.14.123-86.109.amzn1.x86_64 botocore/1.12.188

手順

ここでは、Python3.7ランタイム向けのLayerを作成する手順を紹介する。
作業はすべて同一の作業パスで行う。

Dockerfile作成

以下のファイルをファイル名Dockerfileで作成。
ファイル内の[Package1] [Package2] ...部分にはインストールしてLayerに含めたいパッケージを記載。
例えばrequestslxmlの最新版を含めたい場合はpip install -t ./python requests lxml && \と書く。

FROM python:3.7
WORKDIR /work

CMD apt update && \
    apt install -y zip && \
    mkdir python && \
    pip install -t ./python [Package1] [Package2] ... && \
    zip -r ./zipdir/layer.zip python

zipファイル作成

以下のコマンドを実行してDockerfileを利用したイメージのビルドとコンテナ実行を行い、Layerにアップロードするzipファイルを作成。

$ docker build -t aws_layer_zip .
$ docker run -v "${PWD}":/work/zipdir aws_layer_zip

Layer作成

以下のコマンド実行を実行して、Layerにzipファイルをアップロード。

$ aws lambda publish-layer-version \
    --layer-name hoge-layer \
    --zip-file fileb://${PWD}/layer.zip \
    --compatible-runtimes python3.7

python3.7ランタイムのLambdaで利用可能なLayerが作成できた。

以上

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1