Help us understand the problem. What is going on with this article?

cloud9からlambdaを動かす際の注意点(No module named ~のエラーなど)

はじめに

AWS関連で、cloud9からlambdaを動かす際に少し躓いたことがあったのでその辺をまとめていきます。lambdaはサーバーレスでプログラムを実行してくれるので非常に便利で、私もスクレイピング等の定期実行のために使いはじめました。
この記事は主に初めてcloud9、lambdaを使う方向けになると思います。

実践

まず新しくcloud9の環境を作成。名前はexampleにしておきます。
2020-10-21 (1).png
これが終わると下のような画面に移ります。画面右に表示されている漢字の「入」のようなボタンをクリック、さらにCreate a new Lambda function(画像のオレンジ色の部分)をクリックしてlambda-functionを作成できます。
2020-10-21 (3).png
function名は適当に決めてあげて(ここではsample)、Select runtimeのところで使用する言語を選びます。(下の画像)今回はpythonを使ってスクレイピングに使用するBeautifulSoupライブラリのimportが成功するまでを書いていくので、「python3.6」を選びます。そのほかの設定は特にいじらなくて大丈夫だと思います。2020-10-21 (5).png
home/ec2-user/environmentにsampleディレクトリが出来ていると思います。
次にhome/ec2-user/environment/sample/sampleにあるlambda_function.pyを開いてみてください。ここにプログラムを実行していくコードを書いていくことになります。

lambda_function.py
from bs4 import BeautifulSoup

def lambda_handler(event, context):

    return 'success'

今回は練習なのでこれだけ書きます。bs4からBeautifulSoupをimportすることが出来ていたらsuccessが返ってきます。

ではbs4をinstallしていきます。
まずは

sudo pip install --upgrade pip

でpipを最新のバージョンにupgradeしましょう。

次に

pip install bs4

を実行。(Permission deniedのエラーが出るときは末尾に --userを付け加えます)

無事インストールが成功しました。

早速、lambda_functionを実行してみます。画面右のLocal Functions でsampleを選択し、Run the selected Lambda functionをクリックしましょう。
2020-10-21 (7).png

すると Unable to import module 'sample/lambda_function': No module named 'bs4'
とエラーが出てしまします。bs4のinstallは成功しているはずなのにbs4が見つからないと言われています。なぜでしょうか。

答えとしては、lambdaはサーバーレスで動くので、lambdaの作業用ファイル(sample)内で完結している必要がある(使用するライブラリはファイル内に入れておかなければならない)からです。
解決策するために

cd sample
pip install bs4 -t .

を実行します(-tとディレクトリ名でinstall先を指定)

もう一度lambda_functionを動かしてみてください
successと返ってきたら成功です。

最後にremoteにlambdaファイルをデプロイすれば終了です。(画面右上)
2020-10-21 (9).png
プログラムの定期実行を行いたいときはAmazon EventBridgeから設定することが出来ます。

おわりに

pipコマンドの -t は忘れそうだったので記事にしてみました。少額ですが実行時間に応じてお金がかかるので、実行時間が長く頻繁に動かすなら注意した方がいいですね。

yuto_hori
文系の大学3年生。プログラミング勉強中です。pythonやphpを使っています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away