プロキシ経由でのAzCopy

# 概要

プロキシの背後でAzCopyを使う場合、AzCopyはシステムのプロキシ設定を使用するようです。認証プロキシ経由でも、この設定で実行できました。ただしドキュメント等での確認ができておらず、バージョン依存する可能性はあります。

# 詳細

プロキシの背後でAzCopyを使う場合、AzCopyはシステムのプロキシ設定を使用するようです。

* Windows … OS（＝Internet ExplorerまたはEdgeブラウザ）のプロキシ設定
* Linux … 環境変数`HTTPS_PROXY`

認証プロキシ（プロキシが認証を求めてくる）場合、Linuxでは環境変数`HTTPS_PROXY`に認証情報も含めることで対応できました。Windowsでは不明なのですが、上記プロキシ設定だけで対応できています（ブラウザでの認証結果が記憶されていて使われているのではと思われます）。

上記についてはドキュメント等では情報を確認できておらず、以下の動作確認結果による推測です。

## Linuxでの確認結果

Ubuntu 16.04.5（ただしBash on Ubuntu on Windows）とAzCopy 7.2.0の環境で確認しています。

	$ cat /etc/os-release
	NAME="Ubuntu"
	VERSION="16.04.5 LTS (Xenial Xerus)"
	ID=ubuntu
	ID_LIKE=debian
	PRETTY_NAME="Ubuntu 16.04.5 LTS"
	VERSION_ID="16.04"
	HOME_URL="http://www.ubuntu.com/"
	SUPPORT_URL="http://help.ubuntu.com/"
	BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
	VERSION_CODENAME=xenial
	UBUNTU_CODENAME=xenial

	$ azcopy --version
	azcopy 7.2.0-netcore

環境変数`HTTPS_PROXY`を設定してazcopyを実行した結果、ファイル取得に成功しました。なお`$PROXYID`と`$PROXYPW`はそれぞれプロキシの認証情報、`$AZSA`と`$AZCON`と`$AZKEY`はそれぞれAzureのストレージアカウント、コンテナ名、アクセスキーを格納してあります。

	$ export HTTPS_PROXY="http://${PROXYID}:${PROXYPW}@proxy.example.com:8080"
	$ azcopy --source "https://${AZSA}.blob.core.windows.net/${AZCON}/test.txt" --destination "./test.txt" --source-key $AZKEY
	Finished 1 of total 1 file(s).
	[2018/08/15 10:56:00] Transfer summary:
	-----------------
	Total files transferred: 1
	Transfer successfully:   1
	Transfer skipped:        0
	Transfer failed:         0
	Elapsed time:            00.00:00:05

続けて環境変数`HTTPS_PROXY`を削除してazcopyを実行した結果、ファイル取得に失敗しました。

	$ export -n HTTPS_PROXY
	$ azcopy --source "https://${AZSA}.blob.core.windows.net/${AZCON}/test.txt" --destination "./test.txt" --source-key $AZKEY
	[2018/08/15 11:11:27][ERROR] Error parsing source location "https://tsukamoto180723.blob.core.windows.net/vcli/test.txt": Source with location type Blob doesn't exist.

## Windowsでの確認結果

Windows 10（1703）とAzCopy 7.1.0の環境で確認しています。

	c:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy>.\azcopy
	------------------------------------------------------------------------------
	AzCopy 7.1.0 Copyright (c) 2017 Microsoft Corp. All Rights Reserved.
	------------------------------------------------------------------------------
	# AzCopy is designed for high-performance uploading, downloading, and copying
	data to and from Microsoft Azure Blob, File, and Table storage.

IEでプロキシ設定がされている状態で、azcopyを実行した結果、ファイル取得に成功しました。なお`%AZSA%`と`%AZCON%`と`%AZKEY%`はそれぞれAzureのストレージアカウント、コンテナ名、アクセスキーを格納してあります。

	c:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy>azcopy /Source:https://%AZSA%.blob.core.windows.net/%AZCON%/date.txt /Dest:%USERPROFILE%\Downloads\date.txt /SourceKey:%AZKEY%
	[2018/08/15 16:47:37] Transfer summary:
	-----------------
	Total files transferred: 1
	Transfer successfully:   1
	Transfer skipped:        0
	Transfer failed:         0
	Elapsed time:            00.00:00:30

IEのプロキシ設定を無効化してazcopyを実行した結果、ファイル取得に失敗しました。

	c:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy>azcopy /Source:https://%AZSA%.blob.core.windows.net/%AZCON%/date.txt /Dest:%USERPROFILE%\Downloads\date.txt /SourceKey:%AZKEY%
	[2018/08/15 16:54:58][ERROR] Error parsing source location "https://tsukamoto180723.blob.core.windows.net/vcli/date.txt": Source with location type Blob doesn't exist.

使用しているのは「Linuxでの確認結果」と同じ認証プロキシです（なぜか認証情報は聞かれていません）。

# 参照

AzCopyの公式なドキュメントは以下になります。プロキシについての情報は見つけられませんでした。

* [AzCopy on Windows を使用して Azure Storage にデータをコピーまたは移動する | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy)
* [AzCopy on Linux で Azure Storage にデータをコピーまたは移動する | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/storage/common/storage-use-azcopy-linux)

以下では`AzCopy.exe.config`を作成する方法などが紹介されており、旧版では有用なのかもしれません。

* [AzCopy – Unable to connect to the remote server – It's getting cloudy!](https://blogs.msdn.microsoft.com/azure4fun/2016/10/17/azcopy-unable-to-connect-to-the-remote-server/)
* [Odity - AZCopy - The server returned an error: (407) Proxy Authentication Required](https://www.odity.co.uk/articles/azcopy-the-server-returned-an-error-407-proxy-authentication-required)

----

本ページ内容は筆者が参照の便のためにある時点でまとめた個人的なメモです。内容を保証するものではなく、また筆者の所属組織等とは一切かかわりがありません。