💡

VNet内のFunctionsをプライベートエンドポイント経由でストーレジ接続する手順

に公開

この記事について

Azure Functionsをデプロイする際に、一度もパブリック網を通る状態を経由せずにプライベートエンドポイント経由でストレージアカウントに接続された状態でデプロイする手順が公式ドキュメントだけでは分かりづらかったのでまとめました。

作りたい構成


Azureで閉域網に閉じたFunctions(関数アプリ)を作成します。
また、その過程で一時的にでもFunctions - ストレージ間でデータがパブリックネットワークを通過させないようにします。

手順

1. リソースグループの作成

Azureサブスクリプションにリソースグループを作成します。
ここでは仮に名前をrg-vnet-function-testとし、リージョンを東日本(Japan East)とします。

2. VNetの作成

作成したリソースグループにVNetを追加します。
先ほど作成したリソースグループに追加し、名前はvnet1とします。

defaultのほかにfunctionsとプライベートエンドポイント用のサブネットを追加しておきます。

それ以外はデフォルトままで問題ありません。作成します。

3. ストレージアカウントの作成

同様にストレージアカウントを追加します。名前をstoragefunctiontest0304としていますが適宜変更してください。プライマリサービスはAzure Blob StorageまたはAzure Data Lake Storage Gen2を選択しています。パフォーマンスはStandard、冗長性はLRSとしていますが適宜変更可能です。

ネットワークタブでは「パブリックアクセスを無効にし、プライベート アクセスを使用する」を選択します。
(この段階でもプライベートエンドポイントの作成は可能ですが、今回手順では複数必要となるため後で行います)

上記以外のタブはデフォルトままです。作成します。

4. ストレージアカウントへのファイル共有の作成

<memo: この設定要らないかも>
ストレージの「データストレージ」>「ファイル共有」から「+ファイル共有」を押します。
ファイル共有の名前をここではfilesforfunctionsとしておきます。

作成します。

5. ストレージのプライベートエンドポイント作成

作成されたストレージアカウントにプライベートエンドポイントを追加します。
「セキュリティとネットワーク」> 「ネットワーク」>「プライベート エンドポイント接続」で「+ プライベートエンドポイント」を押します。

まずはBlob用のプライベートエンドポイント(PE: Private Endpoint)を作成します。
名前をpe-blobとします。


この内容で作成します。

また、Files用のプライベートエンドポイントも作成します。
名前をpe-filesとします。


同様に作成します。

ストレージアカウントに関する作業はここまでで完了です。

6. Function App(関数アプリ)の作成

「関数アプリ」を検索して、作成を押下します。

VNet統合できるプランが必要なためFunctions Premium(別名: Elastic Premium Plan)を選択します。

関数名はfunc-vnet-0304としておきます。

ストレージは先ほど作成したものを指定します。

ネットワークでは以下のように設定します。

  • パブリックアクセスを有効にする: オフ
  • 仮想ネットワークに統合する: オン
    • 仮想ネットワークは先ほど作成したものを指定
  • 受信アクセスのプライベートエンドポイントの有効化: オン
    • プライベートエンドポイント名: pe-function
    • 受信サブネット: subnet-function
    • DNS: AzureプライベートDNSゾーン
  • 送信アクセス
    • VNet統合を有効にする: オン
    • 送信サブネット: subnet-function

その他のタブはデフォルトのままで問題ありません。
作成します。

7. 関数アプリへの環境変数の設定

作成された関数アプリの設定 > 環境変数から以下のように環境変数設定を追加します。

環境変数名 意味合い
vnetContentShareEnabled true 閉域経路を利用する設定
vnetRouteAllEnabled true アプリからのすべての送信トラフィックを仮想ネットワーク経由でルーティングする設定
WEBSITE_DNS_SERVER 168.63.129.16 DNSの利用設定
AzureWebJobsStorage <ストレージアカウントの接続文字列> Blobストレージの指定と認証
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING <ストレージアカウントの接続文字列> Fileストレージの指定と認証
WEBSITE_CONTENTSHARE <ファイル共有名。自動的にファイル共有がストレージに作成される> Elastic Premiumプランのイメージ置き場となるファイル共有設定

このうち、下3点は作成時点で追加されているので、残りの環境変数を設定します。
ここまでの設定を行えばこの関数アプリ上に関数をデプロイすればストレージアカウントに閉域網接続ができるようになるはずです。

Discussion