JavaでSelenium開発したプログラムをAWS Lambdaで動作させるサンプルプログラム
Java Seleniumで開発したWebSiteの自動処理プログラムをAWS Lambdaで動作させるコードの共有が目的です。
Seleniumの動作に必要な最低限のOptionのみを指定しています。
SeleniumプログラムをAWS Lambdaで動かすための多くの情報が溢れているのですが、私が参考にした際に色々と混乱した点があったため、このコードで整理し情報を共有したいと思ったのが公開の背景です。
Browser、DriverはAWS Lambda用にbuildしたものでなくても、リポジトリ公式パッケージで動作するので、ぜひ、ソフトウェア技術者の皆さんは参考にしてください。
AWS Lambdaで動くSeleniumプログラムのサンプルとして官報で公開されている「本日の官報」のPDFをダウンロードするプログラムを作っています。tmpフォルダに作ったサブフォルダにPDFファイルがダウンロードされます。
※ダウンロードしたPDFに対する処理は作っていないです。
KanpoWebOperationApp Classが官報のWebサイトに対する処理です。継承元ClassのAutoWebOperatorClassを通じてRemoteDriverを操作する処理が実行できます。
AWS Lambdaのhandler(通常、CMDで指定するClassとmethod)は、AwsLambdaRequestHandler::handleRequestです。
docker builして、docker runしてください。
# ビルド
docker build --provenance=false --platform=linux/arm64 -t autoweb:test-0.0.1 .
# Docker実行
docker run --rm --platform linux/arm64 -p 9000:8080 -it autoweb:test-0.0.1
# Docker実行したコンテナのLambdaを動かすイベントを発行(このイベントによってAwsLambdaRequestHandler::handleRequestが呼び出され、KanpoWebOperationAppを動かします。)
curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
AWS Lambdaに載せる方法はAWSのドキュメントコンテナイメージを使用した Java Lambda 関数のデプロイを参照してください。
AutoWebOperatorをextendsしたClassを作成し、そのクラスにWebSiteに対する自動処理を記載してください。
AutoWebOperator Classを通じてSeleniumWebDriverにアクセスできます。
デフォルトでChrome(Chromium)を使うように作っていますが、環境変数を設定すればFirefoxでも動作するような仕掛けを入れています。
このプログラムはMIT licenseです。 ロジック的なことは何もしていないし...