MENU
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
あらゆるモノにHackする、探究者の読み物。
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
  1. ホーム
  2. プログラミング
  3. 言語別
  4. Python
  5. AWSのLambdaのレイヤーアップロードのコツ

AWSのLambdaのレイヤーアップロードのコツ

2020 7/22
Python
2020-01-22 2020-07-22
Lambda

最近AWSのLambda & API GateWay の組み合わせでサクッとWebAPIを作るのが楽しいです。

で、Lambdaというと、ちょっとメンドクサイのが外部のライブラリ(Pythonではモジュール)を使いたい場合、関数毎に使いたいライブライファイルをバンドリングしてアップロードする必要があること。

が、あんまり気にしていなかったのですが、レイヤーという、一回アップロードしたモジュールは使いまわせるという便利な機能があることにやっと気づいて少し調べながら使ってみました。

一応この記事はPython3系のモジュールを、レイヤーで使うことを目的にしています。他のパターンの方は適宜読み替えてください。

目次

Lambdaの組み立てはCloud9経由が楽

Lambda編集画面

画像のようにLambdaのコンソールから直接コードを作っていっても問題ないのですが、Cloud9から直接Lambda関数を編集してデプロイできるので普段はそちらを使っています。

環境変数などをいじる必要があるときだけLambdaのコンソールに戻ってくる感じですね。

Cloud9側からLambdaをいじる

Cloud9からLambdaを編集

画像のようにコンソール右端にLambdaと連携するためのタブがあって、

「Lambda」にある関数を「Cloud9」にインポートすることも、
「 Cloud9 」で作ったソースを「 Lambda 」にアップロードすることも、
このタブから可能です。

本題のLambda「レイヤー」の作り方

「レイヤー」機能を簡単に説明すると、これまでLambda関数毎にモジュールをまとめて配置していたのが、レイヤーを使えば一度アップロードしたモジュール環境を複数のLambda関数に適用させることができるようになります。

普通に適当にアップロードしてLambda関数側の環境変数に「PYTHONPAT」「UPLOAD先のPATH」を指定するという方法でも問題なく使えるのですが、少しコツを覚えておくと、環境変数の設定なしでレイヤーが使えるようになります。

まずは適用させたいモジュールをバンドリング

Cloud9を使います。

Cloud9のenvironment直下に「python」という名前のフォルダを作成

cloud9のenvironment直下にpythonというフォルダを作成

次にbashを開いて今作ったばっかりの「python」フォルダに移動します。

$ cd python
pythonフォルダに移動

さらに続けて、レイヤーで使いたいPythonのモジュールをpipで「python」フォルダ直下にインストールしていきます。

今回は例として「requests」「bs4」「lxml」の3つのスクレイピング用モジュールをインストールしてみることにします。

コマンドは以下の通り。

$ python3 -m pip install requests -t .
$ python3 -m pip install bs4 -t .
$ python3 -m pip install lxml -t .

-t [ディレクトリ] は「指定ディレクトリにモジュールをインストールする」というコマンドです。

この時注意点として、cloud9では特に何も設定せずにbashからpipを使おうとするとpython2系のpipが発動してしまうことに注意です。

# ダメなパターン
$ pip install requests -t .

ですのでちょっと面倒ですが、かならず「python3 -m」に続けてコマンドを入れるようにすると間違いが起きないです。

モジュールをインストールしたらローカルにダウンロード

バンドリングしたモジュールをダウンロード

pythonフォルダ直下に各モジュールがインストールされた状態で「python」フォルダを右クリックして「Download」を選択します。

python.zip

ダウウンロード先のローカルフォルダに同名のファイルがなければ、「python.zip」としてダウウンロードが開始されます。

ダウンロードしたzipファイルをそのままレイヤーにアップロード

Lambdaのコンソールに移動します。

左側のタブから「Layers」を選択。

Layersタブを選択

さらに「レイヤーの作成」をクリック。

レイヤーの作成

適当な名前と、必要であれば説明、適当なランタイムを選択して、さっきダウンロードした「python.zip」を何も考えずアップロードすればレイヤーの作成完了です。

レイヤーアップロード

コツとは何だったのか?

コツと言っていたのは「python」というフォルダ名をつけてその中にモジュールをインストールした部分です。

こうすることによって、LambdaのディフォルトのPathが通っているディレクトリ「/opt/python」を狙い撃ちでモジュールをアップロードすることができます。

ですので、Lambda側で特に環境変数などの設定なしにレイヤーを適用させることが可能になります。

Python
AWS cloud9 Lambda Python
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』
人気記事
  • IQテストいくつか受けてみました
    ネット上で信憑性がありそうなIQテスト、5種類まとめて受けた結果…
  • hayate
    メルカリの商品を世界最速で購入するためだけのアラートツール
  • 【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング
  • Pythonファイルのexe化
    【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
  • Amazon Echo アレクサのコマンドまとめ
    AmazonEchoの使い方とできる事、アレクサへの指示コマンド一覧
最近の投稿
  • PyQt5 QListWidget の item削除でtextBoxのフォーカスが奪われる2023-03-05
  • WordPressからのメールが届かない時の調査と解決法2023-02-27
  • 保護中: メルカリアラートツール「疾風」v22022-12-01
  • 保護中: メルカリアラートツール【疾風】カスタマイズオプション一覧2021-03-22
  • 保護中: メルカリアラートツール【疾風】インストール手順2021-03-22
目次
目次