Sauce Connect Proxy×Dockerでトンネル環境構築

どうも、最近週末のベーグル作りがウィークエンド・ルーティンとして欠かせなくなってきました自動化アーキテクトの森川です。
焼きたてのパンの多幸感って無敵ですよね。
ちなみにケトリングには蜂蜜ではなく黒蜜を使う派です。

さてさて、今日はSauceLabsが提供するトンネル環境構築用のツール「Sauce Connect Proxy」をDockerで立ち上げるお話です。


Sauce Connect Proxyとは?

SauceLabsのような外部のテストサービスを、閉鎖されたテスト環境に適用する場合は主に2つの方法があります。

🍩IPアドレスホワイトリストに登録
🍩proxyトンネル経由でアクセスさせる

Sauce Connect Proxyはお名前のとおり後者で、SauceLabsから公式に提供されているトンネルツールです。

画像1

Using Sauce Connect Proxy - Sauce Labs Documentation より

経緯/そもそもなんで?

弊社内の検証環境ではグリッドフレームワークにZaleniumを使っており、Sauce Connect ProxyはZaleniumに同梱されているので、これまで何かをする必要はなかったのですが、ある日突然動かなくなりました。

Zalenium - A flexible and scalable Selenium Grid

原因を調査していたのですがZaleniumはEOLなこともあり、近いうちに別のグリッドフレームワークに乗り換える予定です。

そこでSauce Connect Proxy単体で立ててみることに。

やってみる 

$ hostnamectl
...
  Operating System: Amazon Linux 2
...
      Architecture: x86-64

$ docker-compose -v
docker-compose version 1.22.0, build f46880fe

EC2上でdocker-composeします。

docker-compose.yml

version: '3.3'
services:
  sc:
    container_name: sauceconnect
    image: saucelabs/sauce-connect:4.6.5
    stdin_open: true
    tty: true
    volumes:
      - ~/config/:/tmp
    networks:
      - zalenium
    restart: always
    command: "--config-file /tmp/sc.yml"

    healthcheck:
      test:
        [
          'CMD-SHELL',
          'tail -1 /tmp/sc.log | grep "Sauce Connect is up" || exit 1'
        ]
      interval: 5s
      timeout: 5m
      retries: 10

networks:
  zalenium:
    driver: bridge

ユーザ名、APIキーは別ファイルに書きだしておきます。

config/sc.yml

rest-url: "https://api.us-west-1.saucelabs.com/rest/v1"
user: "your_user_name"
api-key: "your_api_key"
no-remove-colliding-tunnels: true
logfile: "/tmp/sc.log"
tunnel-identifier: "zalenium"

今回は検証環境なのでユーザ情報の取り扱いはセンシティブではないですが、本番環境ではsecrets:などで対応したほうが良いでしょう。環境変数の利用はできれば避けておきたいところです。

参考: saucelabs/sauce-connect-docker: Sauce Connect Docker App

実行と確認

実行してみましょう。

docker-compose up -d
Pulling sc (saucelabs/sauce-connect:4.6.5)...
4.6.5: Pulling from saucelabs/sauce-connect

...

Status: Downloaded newer image for saucelabs/sauce-connect:4.6.5
Creating sauceconnect ... done

コンテナのログ確認。

$ docker logs -f sauceconnect
1 Sep 14:26:10 - Reached a trusted CA. Certificate chain is verified.
1 Sep 14:26:10 - Using no proxy for connecting to tunnel VM.
1 Sep 14:26:10 - Selenium listener disabled.
1 Sep 14:26:10 - Establishing secure TLS connection to tunnel...
1 Sep 14:26:11 - Sauce Connect is up, you may start your tests.

当然、HealthCheckも無事通っています。

$ docker inspect --format='{{json .State.Health}}' sauceconnect | grep -o "\"healthy\""
"healthy"

最後に、心配性な私はSauceLabsのWebダッシュボードでトンネル開通を確認しました。

トンネルが立ち上がっていますね。

画像2

これでセットアップは完了です。

テスト環境とSauceLabsのテストデバイスとの接続がトンネル経由で確立されました。次回はZaleniumのグリッド環境のマイグレーションについてお届けできれば、と思います。

執筆者プロフィール:森川 知雄
中堅SIerでテスト管理と業務ツール、テスト自動化ツール開発を12年経験。
SHIFTでは、GUIテストの自動化ツールRacine(ラシーヌ)の開発を担当。
GUIテストに限らず、なんでも自動化することを好むが、ルンバが掃除しているところを眺めるのは好まないタイプ。
さまざま案件で自動化、効率化によるお客様への価値創出を日々模索している。2021年からは技術イベントSHIFT EVOLVEの運営を主担当。

画像3

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/