LoginSignup
2
0

More than 1 year has passed since last update.

DockerでAmazonLinux環境を構築し、そこでインストールしたPythonライブラリをLambdaレイヤーにアップ

Posted at

前提

・Docker使える状態
・AWSサービス使える状態

①amazon linuxのイメージを取得

docker pull amazonlinux

②Dockerfileを作成

FROM amazonlinux:latest
RUN yum install -y python3 zip
RUN mkdir /home/deploy

③docker-compose.ymlを作成

docker-compose.yml
version: '2'
services:
  app:
    build: .
    volumes:
      - './deploy:/home/deploy'
    command: >
      bash -c "pip3 install -r /home/deploy/requirements.txt -t /home/deploy/python &&
      cd /home/deploy &&
      /usr/bin/zip -r bs4.zip python"

④ディレクトリを作成

今回は、Dockerfileとymlに記載したディレクトリ名と合わせてdeployというディレクトリと、その下にこちらは決め打ちのpythonというディレクトリを作成します。
image.png



image.png

⑤pip installするライブラリを記述したrequirement.txtを作成しdeployディレクトリ配下に置く。

今回はwebスクレイピングで使うbs4とrequestsを記述します。まずはbs4のみ。

requirements.text
bs4

⑥ディレクトリ構成の確認

$ tree
├── Dockerfile
├── deploy
│   ├── python
│   └── requirements.txt
└── docker-compose.yml

⑦Lambdaレイヤーにアップロードするパッケージを取得

下記をコマンド実行します。

docker-compose up --build

⑧もう一つのパッケージを作るために③と⑤を編集し⑦を実行(必要なパッケージが一つだけなら不要)

docker-compose.yml
version: '2'
services:
  app:
    build: .
    volumes:
      - './deploy:/home/deploy'
    command: >
      bash -c "pip3 install -r /home/deploy/requirements.txt -t /home/deploy/python &&
      cd /home/deploy &&
      /usr/bin/zip -r requests.zip python"


requirements.text
requests


docker-compose up --build

⑨レイヤーの作成

image.png



⑧までに作成したパッケージをアップロードします。
※ランタイムは3.7以下にします。3.8以上はamazonlinux2でないといけないので本記事の対象外です。
image.png

⑩レイヤーの追加

先ほどの⑨で作ったレイヤーを動かしたいLambda関数に追加します。
種類はカスタムレイヤーで選択します。
image.png

⑪Lambdaを動かしてみる

まずはレイヤーを作らなかった時の失敗例をご覧ください。bs4やrequestsは元々Lambdaに用意されていないのでエラーになります。
image.png



続きましてレイヤーを追加した成功例です。今回はライブラリがimportできているので、目的の口コミスクレイピングが出来ています。
image.png
2
0
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
2
0