Amazon LambdaでSeleniumを動かすために、やり方を調べました。
目次
「aws lambda chromedriver python」でググってみた
「aws lambda chromedriver python」でググってみた。
参考元1:【AWS Lambda】でseleniumを使ってスクレイピングをサーバーレスで行う~前編~
参考元2:AWS Lambda(Python)でSelenium + Headless Chromeの実行
参考元3:AWS Lambda(Python)でSelenium + Headless Chromeの実行
アップロードするlambadフォルダ内に含んでもよいのですが、
AWS Lambda PythonでSeleniumとheadless-chromiumを使ってスクレイピングする方法
ChromeDriverとHeadless-chromiumだけでもLambdaのデプロイサイズ上限である50MBになってしまうので、今回はLambda Layersを利用したいと思います。
「aws lambda 環境構築」でググってみた
「aws lambda 環境構築」でググってみた。
参考元4:Lambda の開始方法
Lambda の開始方法
デプロイパッケージを使用して、関数コードを Lambda にデプロイします。Lambda では、次の 2 種類のデプロイパッケージがサポートされます。
(AWS公式ドキュメント)Lambda の開始方法
・関数コードとその依存関係を含む .zip ファイルアーカイブ。
・Open Container Initiative (OCI) の仕様に準拠したコンテナーイメージ。
AWS Lambda関数の設定画面から読み解く
AWS Lamdaの関数作成ページでLamda関数の作成方法は以下の4パターンがある。(2021年12月時点)
- コンテナイメージの場合、Amazon ECRイメージのURIが必要。
- 一から作成の場合、選択できるPythonのバージョンは「Python 3.9」以外にもPython3.6,3.7,3.8もある。Ladbaレイヤを作る場合は、このバージョンに合わせて作る必要がある。
AWS Lambdaレイヤについて
参考元5:Lambda レイヤーの作成と共有
Lambda レイヤーは、追加のコードやデータを含めることができる .zip ファイルアーカイブです。レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。レイヤーは、.zip ファイルアーカイブとしてデプロイされた Lambda 関数でのみ使用できます。
Lambda ランタイムごとに、PATH 変数に /opt ディレクトリ内の特定のフォルダが含まれます。レイヤー .zip ファイルアーカイブに同じフォルダ構造を定義すると、関数コードはパスを指定しなくても、レイヤーコンテンツにアクセスできます。
Pythonは以下のパスであれば、特にPATH変数にパスを追加しなくても使える。
Lambda レイヤーの作成と共有
・python
・python/lib/python3.9/site-packages (サイトディレクトリ)
まとめ
AWS Lambdaではサーバレスのため、直接接続して環境をセットアップすることはできない。
セットアップするには以下の2通りのやり方で対応する必要がありそう。
- Lamda LayerにZIPファイルをアーカイブする。
- コンテナイメージから作成する。
コンテナイメージから作るには、事前にAWS ECS上に環境をセットアップしてそれをイメージ化する必要があるため、1の「Lamda LayerにZIPファイルをアーカイブする」方法が良さそう。
1の「Lamda LayerにZIPファイルをアーカイブする」方法としては、Cloud9を使う方法、DockerでPython環境を立ち上げてそれをZIP化する方法があるみたい。
Cloud9はAWSのサービスみたいなので、Cloud9でLamda LayerにZIPファイルを作成することにする。
本調査の結果、AWS Lambda関数でSeleniumを動かすことができました。
その方法を以下のブログにまとめたので、よろしければご覧ください。
参考元
- 【AWS Lambda】でseleniumを使ってスクレイピングをサーバーレスで行う~前編~
- AWS Lambda(Python)でSelenium + Headless Chromeの実行
- AWS Lambda PythonでSeleniumとheadless-chromiumを使ってスクレイピングする方法
- (AWS公式ドキュメント)Lambda の開始方法
- Lambda レイヤーの作成と共有
以上!
コメント