AzureArc導入の流れ（実例）と直面した3つの壁

### はじめに
ハイブリットクラウドをAzureで実現する際に管理の効率化で非常に優秀なAzureArcというサービスがあります。今回、実際に導入する機会があったのですが、予想以上にてこづってしまったので失敗談と合わせて皆さんに読んでいただければと思います。

## 今回の構築における要件
以下、構築における要件でした。またあとで詳しく説明していきます。
+ Azure Arc Private Link Scopeへの通信はプライベート通信（ネットワークは構築済み）
+ 外部への接続はプロキシサーバー経由とする
+ 対象のオンプレミスサーバーは日本全国に設置
+ 対象のオンプレミスサーバーにMicrosoft Defender for Endpoint、Azure Monitor Agentを導入すること

## 導入の流れ
以下の流れでオンプレミスサーバーの導入を進めました。
1. AzureArcPrivateLinkScopeやネットワークの設計
1. 国内の拠点でオンプレミスサーバーのセットアップ
1. 全国の拠点へセットアップしたサーバーの発送
1. 全国拠点でのサーバーの現地セットアップ

## 第一の壁、ネットワーク要件
Azure Arcの設計をするために必要なネットワーク要件を整理する必要がありましたが、通信要件が多くてとてもややこしい。。。orz
特に今回は極力プライベートネットワークを使用することが要件として存在しました。加えて、外部ネットワークへの接続が必要なものはプロキシ経由である必要があります。そこで、どの通信がプライベート経由で何が外部への接続が必要かの整理がとても大変でした。

### ネットワーク要件の整理方法
まず、参考にすべき公式ドキュメントです。
[MS公式 | Connected Machine エージェントのネットワーク要件](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/network-requirements?tabs=azure-cloud)

こちらを基本に、地道に整理を進めていきます。HPの見方を簡単に説明します。
以下表が必要なネットワーク通信表です。(前述の公式ドキュメントより転載)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/1fd03404-0a1a-4024-902a-4c2a45617ed5.png)

これらの通信のうち、プライベート経由で通信可能なものは「プライベートリンク対応」列が「プライベート」と記載されています。
2025/3/24現在、プライベート経由で通信可能なものは以下です。
+ *.his.arc.azure.com
+ *.guestconfiguration.azure.com

### プロキシとバイパス設定方法
上記の整理を踏まえ、プライベート経由で通信を行うものについてはAzure Arc Private Link Scopeへバイパスをする必要がありました。その方法はこちらに載っています。
[MS公式 | プロキシ設定の更新または削除](https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/manage-agent?tabs=windows#update-or-remove-proxy-settings)

今回、採用したプロキシ、バイパス設定のコマンドはこんな感じです。
```Powershell:azcmagentコマンド
azcmagent config set proxy.url "http://ProxyServerFQDN:port"
azcmagent config set proxy.bypass "Arc"
```

## 第二の壁、Connectコマンドのオプション
Azure Arcセットアップの流れはこんな感じです。
1. Azure Arc Private Link Scopeの作成
1. サーバーにConnected Machine Agentをオフラインインストール
1. プロキシ、バイパス設定（[前述](#プロキシとバイパス設定方法)）
1. Azureプラットフォームにネットワーク開通
1. Azure Arc Private Link Scopeに接続
1. 拡張機能(Microsoft Defender for Endpoint、Azure Monitor Agent)のインストール

:::note info
Azure Arcの利用にはオンプレミスサーバーへConnected Machine Agentという拡張機能のインストールが必要です。名前がAzure Arc Agent等で無いので、すこｓ分かりにくいですよね。
:::

最後の「Azure Arc Private Link Scopeに接続」においてConnectコマンドを使用するのですが、いざ用意したコマンドを叩くとエラー・・・
原因を探っていくと、Connectコマンドのオプションが原因でした。
プライベート接続でAzure Private Link Scopeへ接続するには以下コマンドを参考にしてみて下さい。
```Powershell:Connectコマンド
azcmagent connect --resource-group <リソースグループ名> --tenant-id <テナント名> --location <リージョン> --subscription-id <サブスクリプションID> --cloud "AzureCloud" --private-link-scope <Azure Arc Private Link ScopeのリソースID> --tags 'ArcSQLServerExtensionDeployment=Disabled' --use-device-code;
```
以下、解説です。
### --private-link-scope
こちらで、Azure ArcPrivate Link ScopeのリソースIDを指定します。以下「
Azure Arc | プライベートリンクスコープ」のJSONビューからリソースIDは確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/1b65f27a-c70e-47bc-8fee-d586e2db1ecf.png)

### --tags 'ArcSQLServerExtensionDeployment=Disabled'
SQL Serverへ自動接続をしない場合は「Disabled」となります。今回、私は使用していない機能ですので、詳細な参考は以下をご確認ください。
[MS公式 | Opt out of automatic connecting](https://learn.microsoft.com/en-us/sql/sql-server/azure-arc/manage-autodeploy?view=sql-server-ver16#opt-out-of-automatic-connecting)

### --use-device-code
このオプションを付けておくと、Authenticationを設定した個人のスマホを使用して認証ができます。この設定を入れない場合は、設定するオンプレミスのブラウザを使用して認証を行うことになります。その際は以下ネットワーク通信が必要です。
+ *login.microsoft.com

## 第三の壁、x503問題
いざ、ネットワークがつながって接続！っと思いきやx503エラーが・・・とても大変でした。詳細な内容を以下記事にまとめていますので、是非ご参照ください。
[AzureArcの接続でx503エラーが出た話](https://qiita.com/pienhalifax/items/84981d7db28bcfebfea2)

### おまけ：Connectコマンド実行後のIPアドレスの変更について
今回、セットアップ後に全国へサーバーを発送する必要があり、その際IPアドレスが変わってしまうという懸念事項がありました。Connect接続実施後にIPアドレスを変更してもログの取得やMDEによる監視ができているか動作確認をしました。
結果として、こちらは問題ありませんでした。


### まとめ
色々と四苦八苦しながらAzure Arc対応サーバーを設置しました。設計と計画もかなり綿密に実施していたのですが、いざ構築を進めていくとプロキシ設定のURLが抜けていたりx503エラーがでたりと大変でした。
オンプレミス環境とクラウド環境の接続には、ネットワークやサーバーの環境差異から予期しない不具合が多く発生します。余裕のある計画と、密接にクラウドベンダーと連携して進める体制が必要であると感じました。