🌐

【AWS Lambda】Pythonのseleniumで定期実行する

2022/07/22に公開

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