Sauce Connect Proxy×Dockerでトンネル環境構築
どうも、最近週末のベーグル作りがウィークエンド・ルーティンとして欠かせなくなってきました自動化アーキテクトの森川です。
焼きたてのパンの多幸感って無敵ですよね。
ちなみにケトリングには蜂蜜ではなく黒蜜を使う派です。
さてさて、今日はSauceLabsが提供するトンネル環境構築用のツール「Sauce Connect Proxy」をDockerで立ち上げるお話です。
Sauce Connect Proxyとは?
SauceLabsのような外部のテストサービスを、閉鎖されたテスト環境に適用する場合は主に2つの方法があります。
🍩IPアドレスホワイトリストに登録
🍩proxyトンネル経由でアクセスさせる
Sauce Connect Proxyはお名前のとおり後者で、SauceLabsから公式に提供されているトンネルツールです。
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ダッシュボードでトンネル開通を確認しました。
トンネルが立ち上がっていますね。
これでセットアップは完了です。
テスト環境とSauceLabsのテストデバイスとの接続がトンネル経由で確立されました。次回はZaleniumのグリッド環境のマイグレーションについてお届けできれば、と思います。
お問合せはお気軽に
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/