このチュートリアルでは、Selenium Javaを実行して関数計算を開発する方法を学びます。
本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。
#背景
まず、Alibaba CloudのFunction Computeがありますが、これはイベント駆動型のサービスで、ユーザーはサーバーの健全性を管理したり、その他の要因を考慮することなく、コードを書いたりアップロードしたりすることができます。Function Computeは、ユーザーのコードを実行するために必要な適切な量のコンピューティングリソースを準備し、自動的にスケーリングします。ユーザーは自分のコードを実行するのに必要なリソースのみを支払います。
次に、サーバーレスアプリケーションのためのデプロイメントツールであるFunがあります。これは、Function Compute、API Gateway、Log Serviceなどのリソースを管理するのに役立ちます。Funを使用して、template.yml
ファイルに指定したリソースを記述することで、リソースの開発、ビルド、デプロイを行うことができます。
注: この記事で説明したテクニックは、Fun 2.10.2 以降に適用されます。
#ツール
このチュートリアルでは、Selenium Javaを実行して関数計算を開発する方法について説明します。このチュートリアルで概説されているプロジェクトはmacOS上で開発されていますが、プラットフォームに依存しないツールも含まれており、LinuxやWindowsとの互換性があります。この例に進む前に、Docker、Fun、Fcliが正しくインストールされ、最新バージョンにアップデートされ、適切に設定されていることを確認してください。これらのツールのダウンロード、アップデート、設定は、ここにリンクされているページの指示とリソースで行うことができます。
FunとFcliはローカル環境をシミュレートするためにDockerに依存しています。MacOSユーザーは、これらのツールをインストールするためにhomebrewを使用することができます。
brew cask install docker
brew tap vangie/formula
brew install fun
brew install fcli
Windows と Linux ユーザーは、これらのツールのインストール方法については、Installation を参照してください。インストール後、最初に fun config
を実行して設定を初期化することを忘れないでください。
注: 既にFunをインストールしている場合は、バージョン2.10.1以上であることを確認してください。
$ fun --version
2.10.1
#Selenium Javaを実行する
fun init
コマンドを使って、このテンプレートプロジェクトをローカル環境に簡単に初期化することができます。
fun init vangie/selenium-java-example
そして、fun install
コマンドを使って依存関係をインストールします。
$ fun install
...
テキストを使用している場合は、ローカルテストを行うことができます。そのためには、セグメントの内容が以下のようになっている ChromeDemo
のテストコードを使用することができます。
public class ChromeDemo implements StreamRequestHandler {
public void handleRequest(InputStream inputStream,
OutputStream outputStream,
Context context) throws IOException {
System.setProperty("webdriver.chrome.driver", "/code/chromedriver");
ChromeOptions options = new ChromeOptions();
options.setBinary("/code/headless-chromium");
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
options.addArguments("--headless");
WebDriver driver = new ChromeDriver(options);
driver.get("https://ide.fc.aliyun.com");
outputStream.write(("Page title is: " + driver.getTitle() + "\n").getBytes());
driver.quit();
}
}
次に、以下のコマンドを使用して、ローカルでコードをツリー化します。
$ mvn package && fun local invoke selenium
...
FC Invoke Start RequestId: 68c83b4c-b053-479c-9b0e-9503582ccb56
handle user request is com.aliyun.fc.selenium.ChromeDemo::handleRequest
cache is null!
Starting ChromeDriver 2.35.528139 (47ead77cb35ad2a9a83248b292151462a66cd881) on port 20652
Only local connections are allowed.
Mar 05, 2019 11:34:27 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
Page title is: Cloud-integrated development environment
FC Invoke End RequestId: 68c83b4c-b053-479c-9b0e-9503582ccb56
RequestId: 68c83b4c-b053-479c-9b0e-9503582ccb56 Billed Duration: 5265 ms Memory Size: 1998 MB Max Memory Used: 240 MB
そして、fun deploy
コマンドを使ってデプロイします。
$ mvn package && fun deploy
最後に、実行してみてください。
$ fcli function invoke -s chrome -f selenium
Page title is: 云端集成开发环境
#ファイルサイズ
圧縮後のchromedriverとheadless-chromiumのサイズが50MBと非常に近く、jarの空き容量が少ないため、高圧縮版も作成しています。圧縮率が高いのが特徴のBrotliアルゴリズムを使って圧縮後のファイルは32.7MBになります。プロジェクトを実行する際には、イニシャライザを使用して解凍を行いますが、これには約3.7秒かかります。
#参考文献
1、AWS LambdaでのヘッドレスChrome + Seleniumウェブドライバー
2、AWS Lambda上でSeleniumとHeadless Chromeを実行する
アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ