はじめに
AWSの開発環境の構築の備忘録です💁
初心者です😅
間違えてる部分多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇
環境構築はかなり苦労しました。
なので図にしてみました。
わかりづらい部分もあるかと思います。
ただ、図にするのは時間がかかってしまうのがデメリットですが、理解の落とし込みはかなりしやすいなと感じました。
🦁結論🦁
手順
- Cloud Shellを開く
- Pythonのバージョン確認
- Seleniumのインストール(バージョン3.141.0)
- CloudShell上で保存用ディレクトリを作成
- chromedriverをダウンロードして展開
- headless-chromiumをダウンロードして展開
- いらなくなったzipファイルの削除
- headlessディレクトリをzip化
- S3のバケット作成
- zipファイルをS3にコピーする
- Seleniumレイヤーの作成
- headlessレイヤーの作成
- 関数の作成
- 関数にレイヤーを追加
押さえておくべき点
- AWS Lambda関数にseleniumなどを使う場合に手順を踏んでimportする必要がある。
- AWSサーバーを活用するスクレイピングはheadlessモードで行う。
- pipは「pip3」を使う。
- Pythonパッケージ(selenium)の保存先は./python/lib/python3.7/site-packages
注意点
- Pythonパッケージ(pypl)にあるものはディレクトリが指定されてる(./python/lib/python3.7/site-packages)
- Pythonパッケージ以外のものはホームディレクトリに新しくディレクトリを作成する(Chrome driver,dockerなど)
- ファイルサイズは直接アップロードする場合には50MB(ZIP形式)、解凍後のサイズで250MBまで
- Pythonパッケージ(selenium)の保存先は./python/lib/python3.7/site-packages
前提🙊
- アカウントの作成が完了してる
やり方がわからない方は コチラ🐒
今回、importが必要なもの
Pythonパッケージ
- 「selenium 3.141」
Pythonパッケージ外のもの
- 「chromedriver 2.43」
- 「headless-chromium v1.0.0-55」
バージョンはこの組み合わせが良さそうです。
もし他にもある場合、教えていただけると助かります!
Pythonパッケージとは
- PyPI(Python Package Index)に存在しているものはPythonパッケージと呼ばれます。
- PythonのライブラリはPythonパッケージの一部であり、例としてrequestsやseleniumなどがあります。
- “Chrome driver” や “headless-chromium” など、Googleが提供しているものやDockerなどは、Pythonパッケージではなく、Python以外の外部ツールやプログラムです。
全体図
Cloud Shellを開く
AWSの検索バーで「AWS CloudShell」と検索して起動する。
Pythonのバージョン確認
python3 --version
Python 3の場合、バージョンはPython 3.7となってるはずです。
今回はこのまま利用します。
Seleniumのインストール(バージョン3.141.0)
CloudShell上でpipを利用して、 ./python/lib/python3.7/site-packages 配下にSeleniumをダウンロードします。
pip3 install selenium==3.141.0 -t ./python/lib/python3.7/site-packages --use-feature=2020-resolver
Pythonディレクトリをローカル環境にDLできるようにzip化します。
zip -r python python
※zip化ができてるかは「ls」にて確認ができます。
CloudShell上で保存用ディレクトリを作成
CloudShell上で保存用ディレクトリを作成
mkdir headless
chromedriverをダウンロードして展開
chromedriverのバージョンは2.43を利用(headless-chromiumのchromeバージョンとの互換性のため)
curl -SL https://chromedriver.storage.googleapis.com/2.43/chromedriver_linux64.zip > chromedriver.zip
chromedriverを展開
unzip -o chromedriver.zip -d .
headless-chromiumをダウンロードして展開
curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-55/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
headless-chromiumを展開
unzip -o headless-chromium.zip -d .
いらなくなったzipファイルの削除
chromedriverとheadless-chromiumのいらなくなったzipファイルを削除
rm chromedriver.zip
rm headless-chromium.zip
※zip化ができてるかは「ls」にて確認ができます。
headlessディレクトリをzip化
homeディレクトリに戻り、headlessディレクトリをzip化
cd
zip -r headless headless
S3のバケット作成
バケットの作成を選択。
AWS リージョンを「アジアパシフィック(東京)ap-northeast-1」を選択。
パケット名を入力(今回は「selenium-work」と入力)
その他はデフォルトのままでOK。
バケットを作成を選択。
zipファイルをS3にコピーする
zip化したファイル(python.zip, headless.zip)を、CloudShellからS3へコピーを行う。
aws s3 cp python.zip s3://selenium-work
aws s3 cp headless.zip s3://selenium-work
Seleniumレイヤーの作成
AWSの検索メニューで「 lambda」と入力して「AWS Lambda」の画面を開く。
ハンバーガーメニューから「レイヤー」を選択。
レイヤーの作成を選択。
「名前」を作成(今回は「selenium-layer」と入力)
「Amazon S3 からファイルをアップロードする」を選択。
Amazon S3 のリンク URLを貼り付ける(今回は「s3://selenium-work/python.zip」を貼り付ける)
x86_64を選択。
互換性のあるランタイム - オプションは「Python3.7」を選択。
作成を選択。
headlessレイヤーの作成
レイヤーの作成を選択。
「名前」を作成(今回は「headless-layer」と入力)
「Amazon S3 からファイルをアップロードする」を選択。
Amazon S3 のリンク URLを貼り付ける(今回は「s3://selenium-work/headless.zip」を貼り付ける)
x86_64を選択。
互換性のあるランタイム - オプションは「Python3.7」を選択。
作成を選択。
関数の作成
ハンバーガーメニューから「関数」を選択。
「関数を作成」を選択。
「一から作成」を選択。
関数名を入力(今回は「scraper」とします)
ランタイムは「Python3.7」を選択。
アーキテクチャは「x86_64」を選択。
「関数の作成」を選択。
関数にレイヤーを追加
※「selenium-layer」と「headless-layer」の2回分を実装が必要。
関数の作成が完了したら、下の方にある「レイヤー」から「レイヤーの追加」を選択。
レイヤーソースは「カスタムレイヤー」を選択。
バージョンは最新のものを選択。
追加を選択。
設定をする
設定の中の「一般設定」をクリック。
「編集」をクリック。
メモリを「256」MBに変更する。
タイムアウトを5分にする(コードの内容によって変更)
参考にしたサイト📗
AWS Lambda PythonでSeleniumを使える環境を構築する
AWS Lambda関数作成 セクション リンク