はじめに
前回Part1をご覧になった方々、ありがとうございます。
本記事は、AWS Lambdaを触るのが初めてというPythonエンジニアの皆さんにも参考になるよう、画像を使いながら手順を一つ一つ解説していくので、ぜひお付き合いください。
なお、本記事で扱うコードは『【スクレイピング】Yahoo!天気予報をスクレイピングして定期ツイートする方法Part1【Python, AWS Lambda, Twitter API】』でお披露目したものになりますが、実際に皆さんが扱うコードは別のものでも動くように解説していきますので、本記事が初めてだという方にもわかりやすい内容となっております。
(わかりにくかったらすみません。)
STEP1 AWS Lambdaを開き、関数を作成する
※AWSへの登録、支払い情報の設定はあらかじめ済ましておいてください。
AWSのサービス検索で「Lambda」と打つと、Lambdaのウェルカムページ(1枚目画像)またはLambdaのダッシュボード(2枚目画像)が表示されます。
これら画面にある「関数の作成」というボタンを押しましょう。
すると、以下のような基本設定画面に遷移するはずです。
こちらの画面では、任意の関数の名前とランタイム(使用する言語)を設定します。今回はPythonを使用するので、ランタイムのセレクトは「Python 3.9」とします。
作成を済ませると、次は以下のようなデフォルトコードが書かれてる画面に遷移します。
Lambdaでは、このコードのタブ「lambda_function.py」という.pyファイルを読み込み、同ファイルを実行することで機能するようになっています。
ということで、コードのimport json
以下を前回のコードまたはご自身が扱いたいコードに書き換えておきましょう。
ただし!Lambdaは「lambda_function.py」の最後尾に書かれている
def handler_name(event, context):
...
return some_value
という関数を読み込むことで機能します。
これはいわゆる「run()」「main()」のような役割を担うもので、これがないとLambdaは機能しません。ゆえに、この関数内に皆さんが実行したい関数を呼び出すトリガー関数的なものを書くようにしてください。
前回のコードをコピペした方はif __name__ == "__main__":...
部分を消すだけで機能します。
STEP2 パッケージのインストール(ローカル環境)
ローカルではコマンドラインから以下のように実行し、コードにimportするだけで簡単にパッケージをインストールできました。
pip install bs4 requests requests_oauthlib
しかし、LambdaはAWS環境内で動くので、パッケージを“インストールする”というよりかは、“パッケージのありかを教えてあげる”ということをしなくてなりません。(まあ同義ですが)
そこで、まずはローカルで
以下のようにコマンドを実行してください。
#cdでコードのあるのディレクトリに移る
cd hoge
#mkdirでパッケージ群を収納するディレクトリを作成
#ディレクトリ名は「python」にしてください
mkdir python
#cdでpythonディレクトリに移る
cd python
#pythonディレクトリでインストールする
pip install bs4 requests requests_oauthlib -t .
このように実行すると、コードのあるhoge直下のpythonフォルダに以下の画像のようなパッケージ群がインストールされます。
このpip install ... -t .
の「-t」とは「target」の略で、“-tの後ろに書くディレクトリにインストールして”という操作ができます。「.」とは“現在のディレクトリの場所”を表していて、すなわち先ほどのコマンドは「hoge/pythonディレクトリにbs4 requests requests_oauthlibをインストールする」という意味になります。
pythonディレクトリにパッケージ群をインストールできたら、このフォルダを.zipに圧縮し、名前を「layer.zip」としてください。
STEP3 パッケージのインストール(Lambda環境へ)
Lambdaの画面に戻ります。
次に、Lambdaのサイドメニューから「レイヤー」を選択し、遷移先の「レイヤーの作成」というボタンをクリックしてください。
すると、レイヤー設定画面に遷移します。
「レイヤー」とは、Lambdaにおけるパッケージインストール先のようなものです。つまり、先ほどローカルで作成したパッケージ群圧縮ファイル「layer.zip」をここでアップロードすることで、ようやく環境が整うことになります。
この画面では、「任意のレイヤー名」「任意のレイヤーの説明文」「パッケージ群のアップロード」「ランタイムの設定」を編集します。名前や説明文は適当で構いません。「アップロード」ボタンをクリックし、先ほどの「layer.zip」を選択します。次に、今回はPython環境で動かすので、「ランタイム」からPython系を選択してください。
STEP4 レイヤーの追加
レイヤーの作成が完了したら、コードのある画面に戻り、「レイヤーの追加」をクリックしましょう。
すると、レイヤーの選択画面に遷移するので、ここで「カスタムレイヤー」を選択、「先ほど作成したレイヤー」を選択、「バージョン1」を選択して、追加を完了します。
ちなみに、レイヤーはいつでもバージョンアップが可能なので、作成済みのレイヤー画面から追加パッケージをアップロードすることもできます。(その際は、過去のバージョンを引き継ぐことはできないので、必ずローカルで過去のパッケージもインストールされているか確認してください。)
STEP5 稼働環境の設定
あともう少しで定期ツイートのプログラムを走らせることができますが、もう少しだけお付き合いください。
Lambdaはデフォルトでタイムアウトを3秒に設定されています。これでは今回のプログラムを走らせることができないので、次はタイムアウト秒数を増やしましょう。
設定タブの一般設定から、「編集」をクリックしてください。
すると、いろいろな設定を提案されますが、ここではタイムアウトを任意の秒数に設定するだけで大丈夫です。もしものことを考えて、今回は最大値の15分0秒に設定。
STEP6 テスト
ここまで設定できればPythonプログラムを走らせるには十分なので、あとはこっちのもんです。
ひとまず、テストタブから「テスト」をクリックして正常に作動するか確認してみてください。
ここでエラーログなどが出ていなければ成功です。
Twitterタイムラインを見てみましょう。
正常に稼働しているようですね。
STEP7 定期実行の設定
テストで正常にプログラムを走らせたのを確認したら、最後に行うことは“実行タイミングの設定”のみです。
コードが写っている画面の「トリガーを追加」というボタンをクリックしてください。
「トリガー」とは、いわば引き金のことです。この画面ではどんな条件(リクエスト)でこのプログラムを動かすか
という設定を行います。
今回は“毎朝6時になったら実行”というトリガーを作ってみましょう。
EventBridgeというソースを選択してください。
すると、以下のような画面に遷移します。この画面では、EventBridgeが動くためのルールを設定します。
「新規ルールを作成」を選択、「任意のルール名」を入力、「任意の説明文を入力」、「スケジュール式」を選択し、スケジュール式cronを書き込みましょう。
今回の毎朝6時(UTCでは21時)に実行させるスケジュール式cronは「cron(0 21 * * ? *)」となります。いろいろ細かいことは省きますが、cronの説明を聞きたい方は以下を参照してください。
cronの書き方を学ぶ
UTC時間とJST時間について
さいごに
AWS Lambdaの定期実行設定、お疲れ様でした。
前回の記事からご覧になってくださった方々、今回の記事が初めてという方々、ありがとうございます。
さて、自分がPython, AWSを触り始めた時はほぼ独学で、エラー分を頼りにググること以外に対処法がなかったという経験をしました。おそらく、この記事に辿り着いた皆さんの中にも同じ境遇の方々がいらっしゃるのではないかと思います。そういう人たちのために少しでも役に立てたのなら幸いです。
最後になりますが、私はTwitterも細々とやっておりますので、よかったらフォロー&コメントいただけると幸いです!
Twitterアカウントはこちら