LoginSignup
1
0

Python3.11×Lambda×Seleniumを動かす方法(docker-selenium-lambda)

Posted at

はじめに

Python3.7がLambdaで利用できなくなるということで、新しくPython3.xのバージョンアップを行ってSeleniumを動かうための環境を作ったので、メモを残しておきます。

変更前のLambdaの環境

環境はこんな感じ

  • Python3.7
  • SeleniumとWebDriverはLayerで追加
    image.png

実現したい環境

  • Python3.11
  • Seleniumを動かす環境
    ※本当はRequestとBeautifulSoupで処理したほうが早いと思ったけど、
     今の機能を踏襲する意味で変更しないこととしました。

Python3.8以降へそのまま移行できない理由

調べてみるとヒットしますが、Python3.7以前と3.8以降では動くOSが違うようです。
image.png
引用元:Lambda ランタイム

そのままLayerの考え方で作り込んでも動かないという背景があるので、大きく作り変える必要があります。

実現するために使おうとしているもの

以下のGitHubで登録されているリポジトリを利用して、Lambdaの関数登録を行います。
GitHub:docker-selenium-lambda

設定の大まかな手順

  1. ローカルマシンにDockerをインストールする
  2. Node.jsをインストールする(インストールされていなかったら実施する)
  3. AWS上でIam設定を行う
  4. コマンドプロンプトでLambdaをデプロイできる設定を行う
  5. サーバーレスフレームワーク(Serverless FW)をインストールする
  6. プログラムをローカルに取得し、デプロイする
  7. デプロイしたプログラムを動かしてみる

ローカルマシンにDockerをインストールする

Dockerとはなにかと言うことは今回省略して、設定内容だけ残しておきます。
一応説明しているサイトはこちら。
https://knowledge.sakura.ad.jp/13265/

以下Docker本家サイトへアクセスし、該当OSのセットアップファイルをダウンロードする
https://www.docker.com/get-started/
image.png

インストール環境し開いてみるとこんな感じ
image.png

左下のResource Server runningとなっていたらOKです。
なっていなかったら再度実行してみてください。

Node.jsをインストールする(インストールされていなかったら実施する)

今回実現するためには、ローカルマシンへServerlessをインストールします。
image.png

インストールは数分で終わります「

AWS上でIAM設定を行う

プログラムをLambdaへ反映するのに必要な強さの権限を保持しておきます。

とりあえず反映が目的だったのですべての権限をFullAccessにしていますが、これは最低限必要な権限へ変更することをおすすめします。
image.png

設定した権限一覧

  • AmazonEC2ContainerRegistryFullAccess
  • AmazonElasticContainerRegistryPublicFullAccess
  • AmazonS3FullAccess
  • AWSCloudFormationFullAccess
  • AWSCloudFormationReadOnlyAccess
  • AWSCodeDeployRoleForCloudFormation
  • AWSDeepRacerCloudFormationAccessPolicy
  • AWSLambda_FullAccess
  • CloudWatchLogsFullAccess
  • IAMFullAccess

また、このあとのLambdaへのプログラム反映については、上の方にあるアクセスキーは必要なってくるので、未作成の場合は作成しておいてください。
image.png

コマンドプロンプトでLambdaをデプロイできる設定を行う

コマンドプロンプトを使ってプログラムをLambdaへ配置する準備をしていきます。

[事前準備]
コマンドプロンプトからAWSを操作するためのツールをインストールします。
AWS CLI:AWSコマンドラインインターフェース

image.png

コマンドプロンプトを立ち上げた上で、下記コマンドを入力しAWSの設定を行います。

aws configure

入力するのは、以下3点です。
image.png

  • Access Key ID(アクセスキーID)
     →上で作成したアクセスキー
  • Secret Access Key(秘密鍵)
     →アクセスキーを作成した時に一緒に登録されるキー
  • Default region name(デフォルトのリージョン名)
     →基本は東京リージョンで良いと思うので「ap-northeast-1」でOK
    ※Default output formatは入力しなくてOKです

サーバーレスフレームワーク(Serverless FW)をインストールする

Lambdaをサーバーレスフレームワークで構築するために、serverlessを利用してセットアップします。
(すでにインストール済みだった場合は、この手順をスキップしてください)

npm install -g serverless

プログラムをローカルに取得し、デプロイする

ローカルにGitHubで公開されているプログラムを取得&展開します。

$ sls create --template-url "https://github.com/umihico/docker-selenium-lambda/tree/main" --path docker-selenium-lambda && cd $_

上記コマンドにてプログラムが取得できたら、今度は実際にデプロイします。

$ sls deploy

エラー原因は多岐にわたりますが、つまづくポイントとしてはIAM設定がミスしがちです。
まずは、上記で記載した権限を付与してみてください。

デプロイしたプログラムを動かしてみる

下記コマンドで実際のでもプログラムを動かすことができます。

$ sls invoke --function demo

デモプログラムは以下サイトの情報をスクレイピングして表示するというシンプルなものです。
https://example.com/

内容がうまく表示されるか確認してみてください。

エラーの場合は、再度手順を踏んでもらうか、こちらへコメントいただければわかる範囲で追記していきます!

しておいたほうが良い設定

初期設定だとLambdaのメモリ利用サイズが非常に大きくなっています。
1回動かしてみて、実際に利用するメモリサイズに合わせて修正することをおすすめします。
image.png

このサイズが大きいと1回あたりの実行費用が高くなるため、費用がかかってしまいます。

変更するには、右の編集ボタンから入って、下図赤枠部分を更新&保存することで設定されます。
image.png

最後に

Layer利用からDockerからのデプロイに変わると、手順が大きく変わるので分かりづらいですよね。

ですが、一回やってみるとなんとなくコツが掴めると思いますので、ぜひチャレンジしてみてください!

1
0
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
0