Chrome headlessをLambdaで動かす際の依存解消にCodebuildを使う


はじめに

AWS LambdaでSeleniumを動かしたいというところに以下の記事を発見
https://qiita.com/nabehide/items/754eb7b7e9fff9a1047d

seleniumの依存を解消するのにどのみちAWSなのだからと、Codebuildで環境レスを試す

前提

  • CodeBuildから読めるソースコード保持先(CodeCommit、Github等)
  • CodeBuild結果の出力先S3
    • 注意 すべてのリージョンは揃えておくこと
  • CodeBuildを設定できるだけのIAM権限

ソースの準備

  • ビルドスペックをソースディレクトリルートに用意
    serverless-chromeとchromedriver、pip(selenium)はこれで依存解決をする。
buildspec.yml
version: 0.2

phases:
  install:
    commands:
      - mkdir -p bin/
      - pip install --upgrade pip

  pre_build:
    commands:
      - pip install -r requirements.txt -t .
      - curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip -o headless-chromium.zip
      - unzip headless-chromium.zip -d bin/
      - rm headless-chromium.zip
      - curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip -o chromedriver.zip
      - unzip chromedriver.zip -d bin/
      - rm chromedriver.zip

  post_build:
    commands:
      - rm -rf .git/
      - rm .gitignore

artifacts:
  type: zip
  files:
- '**/*'

original

  • lambda_function.py 作成
    参照元を参考に作る

CodeBuildの設定

※設定画面の見出しごとに見出し

プロジェクトの設定

プロジェクト名

お好みで

ソース

ソースプロバイダ

GitHub

リポジトリ

GitHubで作ったときのPublic/Privateに合わせて設定

リポジトリのURL

ソースの準備で準備したソースが入ってるリポジトリ

環境

環境イメージ

カスタムイメージ

※ここでLambdaの実行環境がAmazonLinuxと開発者ガイド に記載があるの環境を合わせる

環境タイプ

  • Linux
  • その他の場所
    • aws/codebuild/eb-python-3.4-amazonlinux-64:2.1.6

サービスロール

お好みで

Buildspec

ビルド仕様

buildspec.yml(デフォルト)

アーティファクト

タイプ

Amazon S3

バケット名

前提で準備したS3

アーティファクトのパッケージ化

zip

使い方

S3にzipが作られるのでそのURLをそのままLambdaの関数コードへ投入してもよし、DLしてもよし

参考先