【AWS Lambda】Pythonのseleniumで定期実行する
AWS Lambdaを利用することでPythonのプログラムを定期実行することが可能になります。
本記事ではAWS LambdaにPythonプログラムをデプロイ、定期実行までの設定を行う方法を解説します。
AWSにサインイン
自身のアカウントでサインインします。
地域を選択
東京リージョンを選択します。
Cloud9で環境作成
Cloud9にアクセス
cloud9と入力してCloud9をクリックします。
Create environment
Create environmentをクリックします。
環境名を入力します。
Configure settingsはデフォルトのままでNext Stepをクリックします。
Review画面でCreate environmentをクリックします。
Pythonバージョン確認
Cloud9上でpython -Vを入力してPython3.7であることを確認します。
ライブラリのインストール
Cloud9上で個人的によく使用しているライブラリをインストールしています。インストールするライブラリはご自身の環境に合わせてインストールしてください。
pip install selenium==3.141.0 -t python/lib/python3.7/site-packages
pip install pandas -t python/lib/python3.7/site-packages
pip install tweepy -t python/lib/python3.7/site-packages
pip install beautifulsoup4 -t python/lib/python3.7/site-packages
pip install oauth2client -t python/lib/python3.7/site-packages
pip install gspread -t python/lib/python3.7/site-packages
pip install pytz -t python/lib/python3.7/site-packages
pip install Pillow -t python/lib/python3.7/site-packages
chromedriver、headless-chromiumのインストール
Cloud9上で保存用ディレクトリを作成します。
mkdir -p headless/python/bin
カレントディレクトリを変更します。
cd headless/python/bin
headless-chromiumをインストールします。
curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
ファイルを展開してzipを削除します。
unzip -o headless-chromium.zip -d .
rm headless-chromium.zip
chromedriverをインストールします。
curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
ファイルを展開してzipを削除します。
unzip -o chromedriver.zip -d .
rm chromedriver.zip
python、headlessフォルダをローカル環境にダウンロード
selenium等のライブラリが入っているpythonフォルダおよびchromedriver、headless-chromiumが入っているheadlessフォルダをダウンロードします。
AWS lambdaにライブラリ、chromedriver・headless-chromiumをアップロード
lambdaにアクセス
lambdaと入力してLambdaをクリックします
レイヤーをクリック
レイヤーをクリックします。
headless(chromedriver、headless-chromium)レイヤーの作成
レイヤーの作成をクリックします。
名前:headless
.zipファイルをアップロードにチェックし、headless.zipをアップロード
ランタイム:Python3.7
作成をクリックします。
いずれかの方法でライブラリ用のレイヤーを作成してください
ライブラリ用レイヤーの作成①
レイヤーの作成をクリックします。
名前:selenium
.zipファイルをアップロードにチェックし、python.zipをアップロード
ランタイム:Python3.7
作成をクリックします。
Amazon S3によるライブラリ用レイヤーの作成(50MBを超える場合)②
S3をクリックします。
バケットを作成をクリックします。
バケット名を入力してバケットを作成をクリックします。
作成したバケットをクリックします。
アップロードをクリックします。
アップロードするフォルダ(画像はzipだが、展開しているPythonフォルダ)をドラッグ&ドロップしてアップロードをクリックします。
アップロードしたファイル(画像はzipだが、展開しているPythonフォルダ)をクリックします。
オブジェクトURLをコピーします。
レイヤーの作成をクリックします。
名前:selenium(python-libraryとなっていますが、後述の内容に合わせてseleniumとします。)
Amazon S3からファイルをアップロードするにチェックし、python.zipをアップロード
ランタイム:Python3.7
作成をクリックします。
AWS lambda selenium動作確認
関数を選択
関数をクリックします。
関数の作成
関数の作成をクリックします。
関数名:test
ランタイム:python3.7
レイヤーを追加
レイヤーの追加をクリックします。
カスタムレイヤーにチェック
カスタムレイヤー:headless
バージョン:適用したいバージョン(今回は1)
カスタムレイヤーにチェック
カスタムレイヤー:selenium
バージョン:適用したいバージョン(今回は1)
いずれかの方法でコードをデプロイしてください
コードの記入後Deployクリック①
lambda_function.pyに動作させたいコードを記述します。
テスト用として使用したコードを下記に記載します。
# python配下自動でimport
from selenium import webdriver
def lambda_handler(event, context):
URL = "https://news.yahoo.co.jp/"
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--hide-scrollbars")
options.add_argument("--single-process")
options.add_argument("--ignore-certificate-errors")
options.add_argument("--window-size=880x996")
options.add_argument("--no-sandbox")
options.add_argument("--homedir=/tmp")
options.binary_location = "/opt/headless/python/bin/headless-chromium"
#ブラウザの定義
browser = webdriver.Chrome(
"/opt/headless/python/bin/chromedriver",
options=options
)
browser.get(URL)
title = browser.title
browser.close()
return title
ローカル環境のファイルをアップロード②
ファイルのアップロード方法は
①フォルダをzip化
②アップロード元 > .zipファイル
③zipファイル選択
です。
基本設定の変更
設定タブから編集をクリックします。
メモリ:256MB(メモリ不足の場合は増やしてください。)
タイムアウト:3分3秒
動作テスト
Testをクリックします。
適当にイベント名を入力して作成をクリックします。
もう一度Testをクリックします。
正常に実行できることを確認します。
定期実行設定
設定方法
トリガーを追加をクリックします。
CloudWatch Eventsをクリックします。
新規ルールの作成にチェック
ルール名:rule-1hour
スケジュール式:rate(1 hour)
追加をクリックします。
こちらでは1時間ごとに定期実行するように設定しています。
定期実行のログ確認
モニタリングタブ > ログ > 1時間を選択
直近1時間のログが確認できます。
これで設定した間隔でPythonのプログラムが動作するようになりました。
以上でAWS LambdaへのPythonプログラムのデプロイは完了です。
良かったら他の記事も見てください。
Discussion