Amazon LambdaでSeleniumを動かすために、やり方を調べました。
目次
「aws lambda chromedriver python」でググってみた
「aws lambda chromedriver python」でググってみた。
参考元1:【AWS Lambda】でseleniumを使ってスクレイピングをサーバーレスで行う~前編~
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgwJTkwQVdTJTIwTGFtYmRhJUUzJTgwJTkxJUUzJTgxJUE3c2VsZW5pdW0lRTMlODIlOTIlRTQlQkQlQkYlRTMlODElQTMlRTMlODElQTYlRTMlODIlQjklRTMlODIlQUYlRTMlODMlQUMlRTMlODIlQTQlRTMlODMlOTQlRTMlODMlQjMlRTMlODIlQjAlRTMlODIlOTIlRTMlODIlQjUlRTMlODMlQkMlRTMlODMlOTAlRTMlODMlQkMlRTMlODMlQUMlRTMlODIlQjklRTMlODElQTclRTglQTElOEMlRTMlODElODYlRUYlQkQlOUUlRTUlODklOEQlRTclQjclQTglRUYlQkQlOUUmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWE3OTQ4OWI0MzFlOTJmZGFlOGQ4ODc5ZjEwNGI0N2Yx&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBpY2hpaGFyYS1kZXZlbG9wbWVudCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9MDhlZjgyMzE0Zjk0OWE4OTNmZGQwMDZjNzNhMjJhYWM&blend-x=142&blend-y=486&blend-mode=normal&s=f67d101d4e74d011558f39f9ca363600)
参考元2:AWS Lambda(Python)でSelenium + Headless Chromeの実行
![](https://cdn.masakimisawa.com/wp-content/uploads/2020/04/02045342/selenium_logo.png)
参考元3:AWS Lambda(Python)でSelenium + Headless Chromeの実行
![](https://cdn.masakimisawa.com/wp-content/uploads/2020/04/02045342/selenium_logo.png)
アップロードする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月時点)
![](https://create-it-myself.com/wp-content/uploads/research-howto-run-selenium-on-aws-lambda-image01-1024x121.png)
- コンテナイメージの場合、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を動かすことができました。
その方法を以下のブログにまとめたので、よろしければご覧ください。
![](https://create-it-myself.com/wp-content/uploads/howto-run-selenium-with-aws-lambda-functions-EC-160x90.png)
参考元
- 【AWS Lambda】でseleniumを使ってスクレイピングをサーバーレスで行う~前編~
- AWS Lambda(Python)でSelenium + Headless Chromeの実行
- AWS Lambda PythonでSeleniumとheadless-chromiumを使ってスクレイピングする方法
- (AWS公式ドキュメント)Lambda の開始方法
- Lambda レイヤーの作成と共有
以上!
コメント