1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

備忘録Advent Calendar 2023

Day 10

【AWS Lambda関数作成】selenium + AWS lambda開発環境の構築

Last updated at Posted at 2023-12-12

はじめに

AWSの開発環境の構築の備忘録です💁
初心者です😅
間違えてる部分多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇


環境構築はかなり苦労しました。
なので図にしてみました。
わかりづらい部分もあるかと思います。
ただ、図にするのは時間がかかってしまうのがデメリットですが、理解の落とし込みはかなりしやすいなと感じました。

🦁結論🦁

手順

  1. Cloud Shellを開く
  2. Pythonのバージョン確認
  3. Seleniumのインストール(バージョン3.141.0)
  4. CloudShell上で保存用ディレクトリを作成
  5. chromedriverをダウンロードして展開
  6. headless-chromiumをダウンロードして展開
  7. いらなくなったzipファイルの削除
  8. headlessディレクトリをzip化
  9. S3のバケット作成
  10. zipファイルをS3にコピーする
  11. Seleniumレイヤーの作成
  12. headlessレイヤーの作成
  13. 関数の作成
  14. 関数にレイヤーを追加

押さえておくべき点

  • 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以外の外部ツールやプログラムです。

全体図

スクリーンショット 2023-12-13 7.08.34.png


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」にて確認ができます。

スクリーンショット 2023-12-13 7.10.28.png

CloudShell上で保存用ディレクトリを作成

CloudShell上で保存用ディレクトリを作成

mkdir headless

スクリーンショット 2023-12-13 7.11.46.png



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 .

スクリーンショット 2023-12-13 7.25.53.png



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 .

スクリーンショット 2023-12-13 7.13.27.png



いらなくなったzipファイルの削除

chromedriverとheadless-chromiumのいらなくなったzipファイルを削除

rm chromedriver.zip
rm headless-chromium.zip

スクリーンショット 2023-12-13 7.15.14.png

※zip化ができてるかは「ls」にて確認ができます。


headlessディレクトリをzip化

homeディレクトリに戻り、headlessディレクトリをzip化

cd
zip -r headless headless

スクリーンショット 2023-12-13 7.15.57.png



S3のバケット作成

バケットの作成を選択。
AWS リージョンを「アジアパシフィック(東京)ap-northeast-1」を選択。
パケット名を入力(今回は「selenium-work」と入力)

その他はデフォルトのままでOK。
バケットを作成を選択。


スクリーンショット 2023-12-13 7.18.33.png


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

スクリーンショット 2023-12-13 7.19.53.png



Seleniumレイヤーの作成

AWSの検索メニューで「 lambda」と入力して「AWS Lambda」の画面を開く。
ハンバーガーメニューから「レイヤー」を選択。
レイヤーの作成を選択。
「名前」を作成(今回は「selenium-layer」と入力)
「Amazon S3 からファイルをアップロードする」を選択。
Amazon S3 のリンク URLを貼り付ける(今回は「s3://selenium-work/python.zip」を貼り付ける)
x86_64を選択。
互換性のあるランタイム - オプションは「Python3.7」を選択。
作成を選択。


スクリーンショット 2023-12-13 7.20.49.png



headlessレイヤーの作成

レイヤーの作成を選択。
「名前」を作成(今回は「headless-layer」と入力)
「Amazon S3 からファイルをアップロードする」を選択。
Amazon S3 のリンク URLを貼り付ける(今回は「s3://selenium-work/headless.zip」を貼り付ける)
x86_64を選択。
互換性のあるランタイム - オプションは「Python3.7」を選択。
作成を選択。


スクリーンショット 2023-12-13 7.21.47.png



関数の作成

ハンバーガーメニューから「関数」を選択。
「関数を作成」を選択。
「一から作成」を選択。
関数名を入力(今回は「scraper」とします)
ランタイムは「Python3.7」を選択。
アーキテクチャは「x86_64」を選択。
「関数の作成」を選択。


関数にレイヤーを追加

※「selenium-layer」と「headless-layer」の2回分を実装が必要。
関数の作成が完了したら、下の方にある「レイヤー」から「レイヤーの追加」を選択。
レイヤーソースは「カスタムレイヤー」を選択。
バージョンは最新のものを選択。
追加を選択。


スクリーンショット 2023-12-13 7.22.23.png



設定をする

設定の中の「一般設定」をクリック。
「編集」をクリック。
メモリを「256」MBに変更する。
タイムアウトを5分にする(コードの内容によって変更)

参考にしたサイト📗

AWS Lambda PythonでSeleniumを使える環境を構築する


AWS Lambda関数作成 セクション リンク

  1. AWSアカウントの作成
  2. AWSの開発環境の構築
  3. Lambda関数の開発とデバッグ
  4. IAMロールの作成と設定(途中まで作成したら、Step Functionsを設定する必要あり)
  5. AWS Step Functionsの設定とデバッグ(完了後、IAMの権限にStep Functionsを追加)
  6. API Gateway(発火API)の設定とデバッグ
  7. API Gateway(状態維持API)の設定とデバッグ
  8. Python(local環境)の開発とデバック
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?