LoginSignup
1
0

More than 3 years have passed since last update.

Selenium Javaを起動して Function Computeを開発する方法

Last updated at Posted at 2020-08-13

このチュートリアルでは、Selenium Javaを実行して関数計算を開発する方法を学びます。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

背景

まず、Alibaba CloudのFunction Computeがありますが、これはイベント駆動型のサービスで、ユーザーはサーバーの健全性を管理したり、その他の要因を考慮することなく、コードを書いたりアップロードしたりすることができます。Function Computeは、ユーザーのコードを実行するために必要な適切な量のコンピューティングリソースを準備し、自動的にスケーリングします。ユーザーは自分のコードを実行するのに必要なリソースのみを支払います。

次に、サーバーレスアプリケーションのためのデプロイメントツールであるFunがあります。これは、Function Compute、API GatewayLog Serviceなどのリソースを管理するのに役立ちます。Funを使用して、template.ymlファイルに指定したリソースを記述することで、リソースの開発、ビルド、デプロイを行うことができます。

注: この記事で説明したテクニックは、Fun 2.10.2 以降に適用されます。

ツール

このチュートリアルでは、Selenium Javaを実行して関数計算を開発する方法について説明します。このチュートリアルで概説されているプロジェクトはmacOS上で開発されていますが、プラットフォームに依存しないツールも含まれており、LinuxやWindowsとの互換性があります。この例に進む前に、DockerFunFcliが正しくインストールされ、最新バージョンにアップデートされ、適切に設定されていることを確認してください。これらのツールのダウンロード、アップデート、設定は、ここにリンクされているページの指示とリソースで行うことができます。

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ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

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