日別アーカイブ: 2019年8月26日

WSL2からWindowsホストで動作しているアプリケーションにアクセスする

このエントリは2019/08/26現在の情報に基づくものであり、今後の機能追加・廃止に伴い、記載内容との乖離が発生する可能性があります。

先日、以下のエントリを記載し、アップデートした。

WindowsホストからWSL2のWebアプリケーションにアクセスする
https://logico-jp.io/2019/07/09/access-web-app-on-wsl2-from-windows-host/

今回はその逆、つまりWindowsホストで動作しているアプリに対してWSL2側からアクセスする。

動作確認のため、Windows 10でIISを稼働し、簡単なHTMLファイルを配置した。表示すると以下のような感じ。

これをWSL2から確認するためには、ドキュメントに記載の通り、WSL2側で/etc/resolve.confのnameserverに相当するIPアドレスを使う必要がある。

Linux からの Windows アプリケーションへのアクセス
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-ux-changes#accessing-windows-applications-from-linux
Accessing Windows applications from Linux
https://docs.microsoft.com/en-us/windows/wsl/wsl2-ux-changes#accessing-windows-applications-from-linux

当方の環境では以下のよう。

この内容は、コマンドプロンプトからも確認できる、WSL2環境にアクセスする場合のIPv4アドレスと同じ(当然であるが)。

ということで、http://172.29.240.1/a1.htmlにアクセスすると…

無事にアクセスできる。

Cosmos DB SDK v3で冗長化されたインスタンスのリージョンやURLを取得する

このエントリは2019/08/26現在の情報を基にしており、将来の機能追加や廃止に伴い、記載内容との乖離が発生する可能性があります。また、この内容はSDK v3をベースにしています。


以前、以下のエントリを記載したが、SDK v2ベースだったため、v3を基にした内容を別途記載しておく。

Cosmos DBの地理冗長化に関するあれこれ (v2)
https://logico-jp.io/2019/05/09/cosmos-db-distributed-across-multi-regions-v2/

各Regionに冗長化されたCosmos DBのURIを取得する

v2で利用しているAPIは以下の場所に移動した。Package名称からもわかるように、将来隠蔽される可能性があるので注意が必要。

Package com.azure.data.cosmos.internal
https://azure.github.io/azure-sdk-for-java/track1reports/com/azure/data/cosmos/internal/package-summary.html

基本的にはv2と同じメソッドを呼び出すことができるが、少々異なる箇所もあるので以下に記載しておく。

地理冗長化先のリージョンとURL

AsyncCosmosClientクラスのインスタンスを作成する。getDatabaseAccount()はFlux<DatabaseAccount>を返すので、今回はListで受け取るようにしている。もちろんStreamで受け取ることもできる。

AsyncDocumentClient tempClient = new AsyncDocumentClient.Builder()
        .withServiceEndpoint(ENDPOINT)
        .withMasterKeyOrResourceToken(KEY)
        .build();

List<DatabaseAccount> databaseAccountList = tempClient.getDatabaseAccount().buffer().blockLast();

あとは、取得したDatabaseAccountに設定されているリージョンとURLを調べればよい。

databaseAccountList.forEach(databaseAccount -> {
    Iterator<DatabaseAccountLocation> it = databaseAccount.getReadableLocations().iterator();
    while (it.hasNext()) {
        DatabaseAccountLocation loc = it.next();
        System.out.println(loc.getName() + "---" + loc.getEndpoint());
    }
});