AnsibleでAWSにGoogle Chromeをヘッドレス実行可能な環境を自動構築する


はじめに

先日ひょんな事からサーバ上でGoogle Chromeをヘッドレス実行して、
スクリーンショットを撮りたい需要があったので、
AWS EC2上にGoogle Chromeをヘッドレス実行可能な環境を構築しました。

その際に、すぐに環境を再現できるようにAnsibleのPlaybookを作成したのでGithubで公開します。

3行まとめ

  • SeleniumでGoogle Chromeをヘッドレス実行してスクリーンショットを撮りたい
  • AWS EC2のOpenSUSEと Python3 + Selenium + chromedriver を利用
  • この環境をEC2インスタンスの作成からAnsibleで構築

前提

  • ansible, botoをインストールすること
  • AWSのサーバー構築に使用するIAMユーザが作成されていること
  • AWSマネジメントコンソールでキーペア登録していること

何を構築するのか

以下の内容をAnsibleで自動構築します。

  • AWS環境
    • VPCの作成
    • Internet Gatewayの作成
    • サブネットの作成
    • ルートテーブルの作成
    • セキュリティグループの作成
    • EC2インスタンスの作成
  • アプリケーション
    • Zypperパッケージ(python3、日本語フォント等)のインストール
    • Google Chromeのインストール
    • python-seleniumのインストール
    • chromedriverのダウンロード
    • 動作確認用のサンプルソース配置

環境構築のやり方はこちらの記事を参考にさせていただきました。

AnsibleでAWS環境を構築する内容については、過去の記事を参考にしてください。

何ができるようになるのか

python3のseleniumを利用してGoogle Chromeをヘッドレス実行できるようになります。

例えば、以下のサンプルソースを実行することでサーバ上でGoogle検索した結果のスクリーンショットを撮ることが出来ます。
ちょっとseleniumをガリガリ実行するためのサーバ立てたいと思った時にコマンド一発で環境構築できます。

sample.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')

driver = webdriver.Chrome('chromedriver', chrome_options=options)

driver.get('https://www.google.co.jp/search?q=chrome')
driver.save_screenshot('screenshot.png')
driver.quit()