<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>お仕事 | 星と月と太陽と</title>
	<atom:link href="https://star-moon-sun.com/category/work/feed/" rel="self" type="application/rss+xml" />
	<link>https://star-moon-sun.com</link>
	<description></description>
	<lastBuildDate>Sun, 08 Feb 2026 11:59:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://star-moon-sun.com/wp-content/uploads/2018/11/starmoonsunlogo-100x100.png</url>
	<title>お仕事 | 星と月と太陽と</title>
	<link>https://star-moon-sun.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。</title>
		<link>https://star-moon-sun.com/2025/07/27/work/azure-dr-using-afd/</link>
					<comments>https://star-moon-sun.com/2025/07/27/work/azure-dr-using-afd/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sun, 27 Jul 2025 06:39:14 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=6579</guid>

					<description><![CDATA[<p>どーも。seiです。久々の技術系ネタｗｗｗ 以前の投稿では、Azure Traffic Managerを使ってマルチリージョンのDR（ディザスターリカバリー）構成を構築しました。 コスパ重視でTraffic Manage [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2025/07/27/work/azure-dr-using-afd/">AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>どーも。seiです。久々の技術系ネタｗｗｗ</p>



<p>以前の投稿では、<strong>Azure Traffic Manager</strong>を使ってマルチリージョンのDR（ディザスターリカバリー）構成を構築しました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a target="_self" href="https://star-moon-sun.com/2023/03/27/work/azure-multiregion-dr-environment/" title="AzureマルチリージョンでのDR構成を構築してみる。" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">AzureマルチリージョンでのDR構成を構築してみる。</div><div class="blogcard-snippet internal-blogcard-snippet">ちわ。seiです。タイトルの通りです。DR（ディザスターリカバリー、災害復旧）構成、あるいは、冗長構成とかHA（高可用性）構成っていうのもほぼ同義かと思いますが、クラウドサービスを利用するとそんな構成が、あっという間に簡単に構築できます。オ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.03.27</div></div></div></div></a>
</div>



<p>コスパ重視でTraffic Managerをかませていましたが、今回はその構成を<strong>Azure Front Door</strong>に置き換える手順を提示していきたいと思います。</p>



<p>Azure Front Doorとはなんぞや？という方は以下のサイトでご確認ください。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-official">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/frontdoor/front-door-overview" title="Azure Front Door の概要" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Azure Front Door の概要</div><div class="blogcard-snippet external-blogcard-snippet">この記事では、Azure Front Door の概要を示します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/frontdoor/front-door-overview" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">今回のゴール&amp;前提条件</a></li><li><a href="#toc2" tabindex="0">Azure Front Doorの構築手順</a><ol><li><a href="#toc3" tabindex="0">AFDリソースの作成</a></li><li><a href="#toc4" tabindex="0">エンドポイントの作成</a></li><li><a href="#toc5" tabindex="0">ルートの作成</a><ol><li><a href="#toc6" tabindex="0">カスタムドメインの割り当て</a></li><li><a href="#toc7" tabindex="0">配信元グループの作成</a></li></ol></li><li><a href="#toc8" tabindex="0">フロントドアマネージャーからのルート追加</a></li><li><a href="#toc9" tabindex="0">カスタムドメインの所有権確認＆エンドポイントのリダイレクト設定</a><ol><li><a href="#toc10" tabindex="0">カスタムドメインの所有権確認</a></li><li><a href="#toc11" tabindex="0">カスタム ドメインとAzure Front Doorエンドポイントとの関連付け</a></li></ol></li></ol></li><li><a href="#toc12" tabindex="0">Azure Front DoorでのDR構成が機能しているか確認</a></li><li><a href="#toc13" tabindex="0">さいごに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">今回のゴール&amp;前提条件</span></h2>



<p>今回のゴールは以下の構成図のような感じです。前回のDR構成を構築したところとの違いはTraffic ManagerがAzure Front Door(以降AFD)に置き換わるだけですので、それ以外の部分は今回は割愛させていただきます。前回の投稿を元に構築ください。</p>



<p>また、Azure Static Web Appsをフロントエンドとして追加しています。これはプライマリーリージョンにリソース作成していますが、グローバルに展開されるリソースなため既定でリージョン障害に対応しているので、リソースをプライマリーリージョンに1つだけデプロイします。</p>



<p>今回デプロイするAzure Functionsも自身のリソース名を返すだけの単純なものにして実行させます。ご自由に振る舞いを実装していただければと思います。</p>



<p>簡単に説明すると、クライアントからのリクエストをまずAFDが受けてトラフィックを振り分けます。サイトへのアクセス（/*）の場合はフロントエンドに振り分けます。フロントエンドはバックエンドに対してリクエストを投げますが、AFDを介してバックエンドのAzure Functionsにリクエスト(/api/*)が送信される感じになります。その時、プライマリーリージョンで障害が発生している場合は、フェールオーバーを行い、セカンダリーリージョンのAzure Functionsにリクエストが自動的に送信される構成を実現していきたいと思います。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1.png"><img decoding="async" width="800" height="566" src="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-800x566.png" alt="Azure Front Doorを利用したシステム構成図" class="wp-image-6630" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-800x566.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-300x212.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-768x543.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1.png 1169w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>【前提条件】</p>



<ul class="wp-block-list">
<li>フロントエンドリソース（Azure Static Web Appsとか）がデプロイ済み</li>



<li>バックエンドAzure Functionsが2つのリージョンにデプロイ済み</li>



<li>（Azure Functionsの認証方法＝Functionの場合）2つのリージョンにデプロイしたAzure Functionsの関数キー（ホストキー）が共通化されている。</li>



<li>DNSレコード編集可能なカスタムドメインを保持している</li>
</ul>



<p>上記のような前提条件のもと進めていきたいと思います。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">Azure Front Doorの構築手順</span></h2>



<h3 class="wp-block-heading"><span id="toc3">AFDリソースの作成</span></h3>



<p>まずはAzure Front Doorリソースをデプロイしていきます。マーケットプレイスから「Front Door」あたりで検索してもらえば出てくるはずの「Front Door and CDN profiles」を選択します。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090903.png"><img decoding="async" width="798" height="849" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090903.png" alt="マーケットプレイスからFront Doorで検索" class="wp-image-6581" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090903.png 798w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090903-300x319.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090903-768x817.png 768w" sizes="(max-width: 798px) 100vw, 798px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Front Door and CDN profilesの「作成」ボタンをクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090944.png"><img decoding="async" width="800" height="539" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090944-800x539.png" alt="Front Doorリソースを作成" class="wp-image-6582" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090944-800x539.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090944-300x202.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090944-768x517.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-090944.png 805w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面が表示されます。本当は空っぽのところにいろいろ追加していこうと思ったのですが、なんかうまくできなかったので、上段の「Azure Front Door」を選択（これはマストですね）し、下段は「カスタム作成」を選択後、「フロント ドアの作成を続行する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091735.png"><img decoding="async" width="694" height="938" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091735.png" alt="Front Doorオファリングの選択" class="wp-image-6583" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091735.png 694w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091735-300x405.png 300w" sizes="(max-width: 694px) 100vw, 694px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で、サブスクリプション、リソースグループなどを選択したら名前を入力し課金レベルを選択します。今回は「Standard」ティアを選択します。「次へ：シークレット」ボタンをクリックします。ちなみにStandardとPremiumの違いは、ボット対策やプライベートリンクなど追加のセキュリティ機能があるかないかとかですかね。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091807.png"><img decoding="async" width="798" height="942" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091807.png" alt="Front Doorのリソース名の入力" class="wp-image-6584" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091807.png 798w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091807-300x354.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091807-768x907.png 768w" sizes="(max-width: 798px) 100vw, 798px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面では、持ち込みのSSL/TLS証明書を追加することができますが、Azure Front Doorが用意して自動で更新してくれる無料のマネージド証明書が利用できますので今回はパス。「次へ：エンドポイント」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091843.png"><img decoding="async" width="695" height="941" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091843.png" alt="Front Doorシークレットの設定" class="wp-image-6585" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091843.png 695w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091843-300x406.png 300w" sizes="(max-width: 695px) 100vw, 695px" /></a></figure>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>Azure Front Doorでは、HTTPS通信を構成する際に「シークレット」という概念を使います。これは、Azure Key Vaultに格納されたSSL/TLS証明書をFront Doorが安全に参照するための設定情報です。シークレットを通じて証明書のバージョン管理や自動更新が可能となり、セキュリティと運用性の両立が図れます。</p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">エンドポイントの作成</span></h3>



<p>ここからがAFD設定の本番です。AFDの設定は「エンドポイント」、「ルート」、「配信元グループ」がキモとなってきます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>エンドポイントとルート、配信元グループは以下のような関連性になっています。一例です。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素.png"><img decoding="async" width="800" height="452" src="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素-800x452.png" alt="エンドポイント、ルート、配信元グループの関連性" class="wp-image-6651" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素-800x452.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素-300x170.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素-768x434.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDの構成要素.png 1056w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>今回はリソース作成時に設定していこうと思いますが、あとで設定することも可能です。まずはエンドポイントを作成していきますので、「エンドポイントの追加」ボタンをクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091924.png"><img decoding="async" width="800" height="535" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091924-800x535.png" alt="エンドポイントの追加" class="wp-image-6586" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091924-800x535.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091924-300x201.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091924-768x513.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-091924.png 1406w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「エンドポイントの追加」パネルが表示されるので、エンドポイント名を入力します。今回は「dr-demo」というエンドポイント名にします。すると自動的にエンドポイントのホスト名が生成されます。よろしければ「追加」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092011.png"><img decoding="async" width="590" height="907" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092011.png" alt="エンドポイント名の入力" class="wp-image-6587" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092011.png 590w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092011-300x461.png 300w" sizes="(max-width: 590px) 100vw, 590px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">ルートの作成</span></h3>



<p>エンドポイントが作成されると以下の画面になります。作成されたエンドポイントのホスト名は赤下線で示す場所に表示されます。エンドポイントの配下にルートを追加していきましょう。「ルートの追加」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106.png"><img decoding="async" width="800" height="448" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-800x448.png" alt="新規ルートの追加" class="wp-image-6588" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-800x448.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-300x168.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-768x430.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-1536x861.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092106.png 1613w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc6">カスタムドメインの割り当て</span></h4>



<p>ルートの追加ブレードが表示されます。まずはAFDにカスタムドメインを追加したいと思うので、「新しいドメインの追加」をクリックします。ここでカスタムドメインを追加する必要はなく、もちろん後から設定可能です。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092552.png"><img decoding="async" width="800" height="835" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092552-800x835.png" alt="新しいドメインの追加" class="wp-image-6589" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092552-800x835.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092552-300x313.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092552-768x802.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092552.png 904w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ドメインの追加ブレードが表示されるので、以下の表のとおり設定して「追加」をクリックしましょう。ちなみに今回は<span class="bold-green">エックスサーバーで管理している当サイトのドメインにサブドメインを追加してAFDのカスタムドメインとして利用するテイ</span>で進めます。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092807.png"><img decoding="async" width="800" height="680" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092807-800x680.png" alt="カスタムドメインの追加設定" class="wp-image-6591" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092807-800x680.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092807-300x255.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092807-768x653.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092807.png 1111w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>設定項目</th><th>設定値</th></tr></thead><tbody><tr><td>ドメインの種類</td><td>Azure以外の検証済みドメイン</td></tr><tr><td>DNSの管理</td><td>その他すべてのDNSサービス</td></tr><tr><td>カスタムドメイン</td><td>（自身で管理しているAFDに割り当てるドメインを入力）</td></tr><tr><td>証明書の種類</td><td>AFDマネージド（推奨）</td></tr><tr><td>TLSポリシー</td><td>よしなに。最新でいいと思う。。。</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box alert-box">
<p>すでにAzure Static Web Appsなどの別リソースにカスタムドメインを割り当てている場合、[ドメインの種類]で「Azureの事前検証済みドメイン」を選択すると、［事前検証済みのカスタムドメイン］にその設定済みのドメインがでてくるので、簡単だ～とつい選びたくなってしまうのですが、その場合、AzureマネージドSSL証明書の更新はカスタムドメインを割り当てたリソースに依存します。</p>



<p>【参考リンク】<a rel="nofollow noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/frontdoor/domain#rotate-own-certificate" title="">https://learn.microsoft.com/ja-jp/azure/frontdoor/domain#rotate-own-certificate<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>



<p>ですのでAFDにカスタムドメインを割り当てたあと、もう不要だと<span class="bold-blue"><span class="fz-36px"><span class="marker-under-red">SWAのカスタムドメインを削除しようものならSSL証明書の更新が出来ず、サイトは停止</span></span></span>します。この一文（「Azure マネージド証明書は、ドメインを検証する Azure サービスによって自動的にローテーションされます。」）で理解するのはちょっとハードル高すぎますが、（せめて「AFDは他のリソースで割り当てたカスタムドメインの証明書まで更新はせんよ！！」くらい書いてよ・・・自分の理解力のなさ？）極力AFD側で証明書の更新が可能なように<span class="bold-red"><span class="fz-32px">「AFDマネージド」証明書</span></span>を利用するのがよいのではないでしょうか。<span class="fz-16px"><span class="fz-12px">（ちなみにリソース正常性アラートもしっかり確認しましょうよｗｗｗ）</span></span></p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092553.png"><img decoding="async" width="800" height="653" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092553-800x653.png" alt="Azureマネージド証明書利用時の注意事項" class="wp-image-6590" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092553-800x653.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092553-300x245.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092553-768x627.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-092553.png 1157w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>カスタムドメインの追加が完了すると、ルートの追加ブレードに戻ってくるので、ルート名を入力し、先ほど追加したカスタムドメインにチェックを付け、デフォルトのドメインは利用しないのでチェックを外しましょう。カスタムドメインはあとの手順で検証作業が必要になります。次に配信元グループを追加するので、「新しい配信元グループを追加する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094341.png"><img decoding="async" width="800" height="795" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094341-800x795.png" alt="配信元グループの追加" class="wp-image-6592" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094341-800x795.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094341-300x298.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094341-150x150.png 150w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094341-768x763.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094341.png 952w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc7">配信元グループの作成</span></h4>



<p>［配信元グループの追加］パネルが表示されるので、適当な名前を入力しましょう。今回はフロントエンドの配信元とするので、「drdemo-frontend-group」としました。次に「配信元の追加」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094532.png"><img decoding="async" width="800" height="776" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094532-800x776.png" alt="配信元の追加" class="wp-image-6593" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094532-800x776.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094532-300x291.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094532-768x745.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094532.png 856w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>［配信元の追加］パネルが表示されます。フロントエンドのアプリを配信元として設定していくので、［配信元の種類］を「静的WEBアプリ」、［ホスト名］にフロントエンドアプリとして利用するSWAリソースを指定し、「追加」ボタンをクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094626.png"><img decoding="async" width="800" height="845" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094626-800x845.png" alt="配信元のホストの選択" class="wp-image-6594" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094626-800x845.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094626-300x317.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094626-768x811.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094626.png 858w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>［配信元グループの追加］パネルに戻り、配信元のホスト名としてフロントエンドアプリが表示されて有効になっていればOKです。「追加」をクリックしていきましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094654.png"><img decoding="async" width="800" height="844" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094654-800x844.png" alt="配信元の確認画面" class="wp-image-6595" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094654-800x844.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094654-300x316.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094654-768x810.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094654.png 857w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>［ルートの追加］ブレードに戻ってきます。配信元グループとして先ほど作成した配信元グループ名がセットされていることを確認します。あ、「一致するパターン」ですが、フロントエンドアプリとしてすべてSWAに流すので、ここでは「/*」のままでOKです。ご自身の環境に合わせてご対応ください。また、CDNとしてキャッシュを利用する方も「キャッシュを有効にする」をよしなに。「追加」ボタンをクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094725.png"><img decoding="async" width="800" height="753" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094725-800x753.png" alt="ルートの追加を実行" class="wp-image-6596" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094725-800x753.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094725-300x283.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094725-768x723.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094725.png 962w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>［Front Doorプロファイルの作成］画面まで戻ってきました。作成したルート、配信元グループ、ドメインが表示されているのが確認できます。フロントエンドとしての設定は完了したので、あとはバックエンドのルートを追加しようと思ったのですが、なぜか更なる「ルートの追加」が出来んかった・・・(。´･ω･)?なぜ？ちょっとわからないので、バックエンド用のルートはリソース作成後の画面から行っていきたいと思います。あ、あと今回はWAF機能は利用しませんので割愛します。「確認および作成」ボタンをクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745.png"><img decoding="async" width="800" height="448" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-800x448.png" alt="リソース作成時にルートの追加ができない？" class="wp-image-6597" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-800x448.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-300x168.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-768x430.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-1536x861.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-094745.png 1615w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「作成」をクリックすればリソースの作成が始まります。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095318.png"><img decoding="async" width="800" height="805" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095318-800x805.png" alt="Front Doorリソース作成の確認画面" class="wp-image-6598" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095318-800x805.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095318-300x302.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095318-150x150.png 150w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095318-768x773.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095318.png 940w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>無事AFDリソースのデプロイが完了しました。それではリソース作成時にはできなかったバックエンド用のルート作成を追加で行っていきましょう。「フロントドアマネージャー」を選択します。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095657.png"><img decoding="async" width="800" height="478" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095657-800x478.png" alt="Front Doorリソース作成完了画面" class="wp-image-6599" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095657-800x478.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095657-300x179.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095657-768x459.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095657.png 1404w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc8">フロントドアマネージャーからのルート追加</span></h3>



<p>［フロントドアマネージャー］ブレードが開きます。基本的な操作はフロントエンド用ルートを作成したリソース作成時の操作と一緒です。エンドポイントに対して「ルートの追加」を行っていきます。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750.png"><img decoding="async" width="800" height="449" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-800x449.png" alt="フロントドアマネージャー画面からのルート追加" class="wp-image-6600" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-800x449.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-300x168.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-768x431.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-1536x862.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095750.png 1613w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ルートを追加していきます。バックエンド用ルートということがわかるような名前を付けましょう。あ、ルートのスペル間違ってますね。正しくはrouteですね。お気になさらずｗ</p>



<p>ドメインはリソース作成時に追加したカスタムドメインを選択します。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095952.png"><img decoding="async" width="800" height="809" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095952-800x809.png" alt="バックエンド用ルートの追加" class="wp-image-6601" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095952-800x809.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095952-300x303.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095952-768x777.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-095952.png 893w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下のエラーが表示されます。要するに「どっちのルートに行くかの判断ができない同じURLパターンが設定されているよ」とのことですので、フロントエンド用ルートで設定済みの「/*」を削除して、Azure Functionsのエンドポイントとなる「/api/*」を追加しましょう。（直接「/*」を「/api/*」に変更してももちろんOK）</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100108.png"><img decoding="async" width="800" height="187" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100108-800x187.png" alt="URLパターンの修正" class="wp-image-6602" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100108-800x187.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100108-300x70.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100108-768x179.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100108.png 896w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次にバックエンド用の配信元グループをこのルートに追加します。「新しい配信元グループを追加する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100156.png"><img decoding="async" width="800" height="788" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100156-800x788.png" alt="バックエンド用配信元グループの追加" class="wp-image-6603" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100156-800x788.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100156-300x295.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100156-768x756.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100156.png 915w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>名前を入力して「配信元の追加」をクリック。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100301.png"><img decoding="async" width="800" height="847" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100301-800x847.png" alt="バックエンド用配信元の追加" class="wp-image-6604" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100301-800x847.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100301-300x317.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100301-768x813.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100301.png 858w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>［配信元の追加］パネルが表示されるので、バックエンドAzure Functionsを設定するので、［配信元の種類］を「App Services」、［ホスト名］にまずはプライマリーリージョンのAzure Functionsリソースを指定し、「追加」ボタンをクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100421.png"><img decoding="async" width="800" height="847" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100421-800x847.png" alt="プライマリーのAzureFunctionsを配信元として追加" class="wp-image-6605" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100421-800x847.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100421-300x318.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100421-768x813.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100421.png 856w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>プライマリーリージョンのAzure Functionsが配信元として追加されました。同様に「配信元の追加」を行い、今度はセカンダリーリージョンのAzure Functionsを配信元として追加しましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100441-1.png"><img decoding="async" width="800" height="844" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100441-1-800x844.png" alt="プライマリーのAzureFunctionsを配信元として追加完了した画面" class="wp-image-6608" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100441-1-800x844.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100441-1-300x316.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100441-1-768x810.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100441-1.png 858w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>［配信元の種類］を「App Services」、［ホスト名］にセカンダリーリージョンのAzure Functionsリソースを指定します。また、優先順位をプライマリーリージョンで設定されている優先順位より大きな値（今回は「2」）に変更後、「追加」ボタンをクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100637-2.png"><img decoding="async" width="800" height="846" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100637-2-800x846.png" alt="セカンダリーのAzureFunctionsを配信元として追加" class="wp-image-6655" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100637-2-800x846.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100637-2-300x317.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100637-2-768x812.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100637-2.png 856w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>配信元グループとして２つのリージョンにあるAzure Functionsが追加されました。優先順位値が小さいホストに優先的にトラフィックが割り当てられる形で負荷分散が行われます。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100702.png"><img decoding="async" width="800" height="843" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100702-800x843.png" alt="プライマリーのAzureFunctionsを配信元として追加完了した画面" class="wp-image-6610" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100702-800x843.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100702-300x316.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100702-768x809.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100702.png 857w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ルートの追加ブレードに戻ってきました。バックエンド用の配信元グループが設定されているのを確認し、「追加」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100842-1.png"><img decoding="async" width="800" height="835" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100842-1-800x835.png" alt="バックエンド用ルートの追加実行" class="wp-image-6612" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100842-1-800x835.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100842-1-300x313.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100842-1-768x802.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-100842-1.png 904w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>フロントドアマネージャーに戻ってきました。エンドポイントにフロントエンド用とバックエンド用の２つのルートが存在するようになっていればOKですね。最後に追加したカスタムドメイン追加に関する手順を行っていきたいと思います。「ドメイン」をクリックしてください。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101308.png"><img decoding="async" width="800" height="333" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101308-800x333.png" alt="カスタムドメインの追加" class="wp-image-6613" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101308-800x333.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101308-300x125.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101308-768x319.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101308-1536x639.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101308.png 1613w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc9">カスタムドメインの所有権確認＆エンドポイントのリダイレクト設定</span></h3>



<p>カスタムドメインは追加しただけではそのまま利用できません。ご自身が所有するドメインであるかどうかの検証と、カスタムドメインでアクセスされたときにAFDエンドポイントへリダイレクトされるようにDNSレコードにCNAMEレコードの追加が必要です。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc10">カスタムドメインの所有権確認</span></h4>



<p>［ドメイン］ブレードで［検証の状態］を確認すると、所有権の検証が済んでいないと「保留中」となっていると思います。「保留中」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101416.png"><img decoding="async" width="800" height="201" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101416-800x201.png" alt="検証の状態の保留中をクリック" class="wp-image-6614" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101416-800x201.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101416-300x75.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101416-768x193.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101416-1536x386.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101416.png 1692w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下のパネルが表示されるので、「レコード名」、「レコードの値」を、ドメインを管理しているDNSプロバイダーのDNSレコード管理画面で追加してください。自分はエックスサーバーですので、エックスサーバーサーバーパネルの［ドメイン］－［DNSレコード設定］よりTXTレコードとして追加しました。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101500.png"><img decoding="async" width="589" height="903" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101500.png" alt="カスタムドメインの所有権確認のための値を取得" class="wp-image-6615" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101500.png 589w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-101500-300x460.png 300w" sizes="(max-width: 589px) 100vw, 589px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>DNSレコードを追加した後、しばらく（結構待つと思う・・・）すると検証の状態が「承認済み」になればカスタムドメインの所有権の確認はOKです。ですがまだ「DNSの状態」が「CNAMEまたはエイリアスレコードが検出されていません」となっているのでこれを解決してAFDの導入が完了します。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-105426.png"><img decoding="async" width="800" height="222" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-105426-800x222.png" alt="カスタムドメインの所有権が承認された画面" class="wp-image-6616" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-105426-800x222.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-105426-300x83.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-105426-768x213.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-105426-1536x427.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-105426.png 1691w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc11">カスタム ドメインとAzure Front Doorエンドポイントとの関連付け</span></h4>



<p>最後の手順です。カスタムドメインでアクセスされたときにAFDにリダイレクトされるように設定していきたいと思います。</p>



<p>まずはAFDのフロントドアマネージャーにアクセスし、AFDのエンドポイントをコピーします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110109.png"><img decoding="async" width="800" height="253" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110109-800x253.png" alt="Front DoorのエンドポイントURLを取得する方法" class="wp-image-6617" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110109-800x253.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110109-300x95.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110109-768x243.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110109-1536x486.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110109.png 1683w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次にドメインのDNSプロバイダーの管理画面よりCNAMEレコードとしてコピーしたAFDのエンドポイントを登録してください。自分はエックスサーバーですので、こんな感じ。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110429.png"><img decoding="async" width="800" height="216" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110429-800x216.png" alt="エックスサーバー側でのDNSレコードの編集" class="wp-image-6618" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110429-800x216.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110429-300x81.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110429-768x207.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110429.png 1471w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>こちらもそこそこ結構な時間かかると思いますが、DNSの状態が「トラフィックは安全に配信されます」になれば無事Azure Front Doorのセットアップ完了です。お疲れさまでした！！</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110931.png"><img decoding="async" width="800" height="216" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110931-800x216.png" alt="カスタムドメインの設定が完了した画面" class="wp-image-6619" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110931-800x216.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110931-300x81.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110931-768x208.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110931-1536x416.png 1536w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-110931.png 1693w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box memo-box">
<p>Azure Front Doorはグローバルなサービスであるため、DNSレコードの検証も世界中のエッジノードから行われます。DNSレコードが一部の地域で反映されていても、他の地域ではまだキャッシュが残っている可能性があり、これが「承認済み」や「トラフィックは安全に配信されます」になるまでの遅延につながるようです。</p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Azure Front Doorのセットアップが完了しました。これが今回の最終形態です。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111307.png"><img decoding="async" width="800" height="488" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111307-800x488.png" alt="Front Doorのすべての設定が完了" class="wp-image-6621" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111307-800x488.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111307-300x183.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111307-768x469.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111307.png 1416w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc12">Azure Front DoorでのDR構成が機能しているか確認</span></h2>



<p>それでは最後に稼働確認を行っていくのですが、まずはバックエンドAzure FunctionsのCORS設定をカスタムドメインを受け入れるように忘れずに変更しておきましょう。プライマリー、セカンダリー、両方ともね。また、プライマリーとセカンダリーのAzure Functionsの認証がFunctionsの場合はアプリキーの共通化も忘れずに行っておいてください。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111236.png"><img decoding="async" width="800" height="781" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111236-800x781.png" alt="CORS設定を変更する" class="wp-image-6620" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111236-800x781.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111236-300x293.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111236-768x750.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111236.png 931w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>では、まずは通常パターン。プライマリーリージョンがピンピンしている場合。ちゃんと「primary」が返ってきているのでプライマリーリージョンのAzure Functionsが呼び出されているのが確認できます。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111339.png"><img decoding="async" width="607" height="220" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111339.png" alt="通常時のレスポンス結果" class="wp-image-6622" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111339.png 607w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111339-300x109.png 300w" sizes="(max-width: 607px) 100vw, 607px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>それでは次にリージョン障害が発生したシチュエーションを。プライマリーリージョンのAzure Functionsを停止させます。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111459-1.png"><img decoding="async" width="800" height="232" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111459-1-800x232.png" alt="プライマリーのバックエンドを停止させる" class="wp-image-6648" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111459-1-800x232.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111459-1-300x87.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111459-1-768x223.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111459-1.png 1079w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>プライマリーリージョンのバックエンドが停止しました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111519-1.png"><img decoding="async" width="800" height="279" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111519-1-800x279.png" alt="プライマリーのバックエンドが停止している様子" class="wp-image-6649" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111519-1-800x279.png 800w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111519-1-300x105.png 300w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111519-1-768x268.png 768w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-111519-1.png 898w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>この状態でフロントエンドStatic Web Appsを起動してリクエストをバックエンドに送信してみます。おお！「secondary」が返ってきているのでちゃんとセカンダリーリージョンのバックエンドにフェールオーバーされたことが確認できました！素晴らしい(*^^)v</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113522.png"><img decoding="async" width="573" height="185" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113522.png" alt="フェールオーバーされたレスポンス結果" class="wp-image-6625" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113522.png 573w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113522-300x97.png 300w" sizes="(max-width: 573px) 100vw, 573px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>最後に停止させていたプライマリーリージョンのAzure Functionsを再開させてもう一度フロントエンドを実行します。OK！！ちゃんとプライマリーリージョンのバックエンドにフェールバックされました。いいね～～～～。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113622.png"><img decoding="async" width="561" height="181" src="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113622.png" alt="フェールバックされたレスポンス結果" class="wp-image-6626" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113622.png 561w, https://star-moon-sun.com/wp-content/uploads/2025/07/スクリーンショット-2025-07-22-113622-300x97.png 300w" sizes="(max-width: 561px) 100vw, 561px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc13">さいごに</span></h2>



<p>Azure Front Doorの構築は、一見複雑に見えるかもしれませんが、<strong>エンドポイント・ルート・配信元グループの関係性をしっかり把握していれば、実は非常にシンプルかつ論理的</strong>です。今回の投稿ではCDNやWAFなどのセキュリティ・高速化機能には触れていませんが、AFDはそれらを<strong>必要に応じて柔軟に組み合わせられる</strong>点が大きな魅力です。</p>



<p>価格面ではTraffic Managerより大分お高めですが、<strong>WAFによるセキュリティ強化、CDNによる高速配信、Private Linkによる安全なバックエンド接続</strong>など、<strong>トラフィック分散だけにとどまらない多機能性</strong>がAFDの強みです。さらに、<strong>AFD経由以外のアクセスを遮断する制御も可能</strong>で、</p>



<p><span class="bold-red"><span class="fz-32px">バックエンドをパブリックに晒すことなく、安全な構成を実現できる！</span></span><span class="bold-blue">すごくいいっ！！</span></p>



<p><span class="bold-blue"><span class="fz-36px"><span class="bold-green"><span class="fz-32px">おまけに、Cookieを扱っているのならサードパーティCookieとして最近のブラウザーのCookie規制強化の影響も受けることなくバックエンドとフロントエンドのカスタムドメインを統一する手間も省ける！！</span></span></span></span><span class="fz-12px"><span class="bold-blue"><span class="fz-16px"><span class="fz-18px">ディ・モールト、ディ・モールト、良いぞッ！！</span></span></span></span></p>



<p>グローバルな可用性、セキュリティ、パフォーマンスを一手に担えるこのサービスは、モダンなWebアーキテクチャの中核として非常に優秀だと感じています。</p>



<p>以上、DR構成時におススメのAzure Front Doorに変えてみた編でした！！</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="6579"
					data-ulike-nonce="5a5614aebb"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_6579"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2025/07/27/work/azure-dr-using-afd/">AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2025/07/27/work/azure-dr-using-afd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Functions .NET6インプロセスモデルから.NET8分離ワーカーモデルへの移行</title>
		<link>https://star-moon-sun.com/2024/04/07/work/migrate-dotnet8-isolated/</link>
					<comments>https://star-moon-sun.com/2024/04/07/work/migrate-dotnet8-isolated/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sun, 07 Apr 2024 03:54:17 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=5180</guid>

					<description><![CDATA[<p>こんにちは。seiです。桜の花の開花がこんなにも遅くなってるのは久々な気がする今日この頃。これが普通の状態なのか異常なのか、もうよくわかんなくなってきますね。 さて、今日は2024年11月にサポート終了が迫っている.NE [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2024/04/07/work/migrate-dotnet8-isolated/">Azure Functions .NET6インプロセスモデルから.NET8分離ワーカーモデルへの移行</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>こんにちは。seiです。桜の花の開花がこんなにも遅くなってるのは久々な気がする今日この頃。これが普通の状態なのか異常なのか、もうよくわかんなくなってきますね。</p>



<p>さて、今日は2024年11月にサポート終了が迫っている.NET6のAzure Functionsアプリケーションを、その次のLTS（長期サポート）リリースである「.NET8」へアップグレードすべく、事前に検証してみましたので、その手順を投稿していこうと思います。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" target="_blank" href="https://dotnet.microsoft.com/ja-jp/platform/support/policy/dotnet-core" title=".NET および .NET Core の公式サポート ポリシー | .NET" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/5562c74c2021cc234d4da06371f9e2e8.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">.NET および .NET Core の公式サポート ポリシー | .NET</div><div class="blogcard-snippet external-blogcard-snippet">ランタイム、ASP.NET Core、Entity Framework Core など、いくつかのテクノロジを指す .NET と .NET Core のサポート ポリシーについて説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://dotnet.microsoft.com/ja-jp/platform/support/policy/dotnet-core" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">dotnet.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ちなみに、以前は.NET8ではインプロセスモデルはサポートされず、分離ワーカーモデルのみになると思っていましたが、ここにきてインプロセスモデルも利用可能と理解しました。しかしながら、結局はインプロセスモデルは廃止の方向のようなので、もう.NET8への移行と同時にインプロセスモデルから分離ワーカーモデルへの移行も併せて行ってしまおうというのが今回の趣旨です。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-none">

<a rel="noopener" target="_blank" href="https://azure.github.io/jpazpaas/2024/04/01/azure-functions-inprocess-end-of-support-FVN7-7PZ.html" title="Azure Functions インプロセス モデル のサポート終了について(追跡 ID FVN7-7PZ)" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/c3e72b9d3b42c9c256977b686433b011.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Azure Functions インプロセス モデル のサポート終了について(追跡 ID FVN7-7PZ)</div><div class="blogcard-snippet external-blogcard-snippet">Azure Functions をお使いいただいております .NET のインプロセスモデル環境において、追跡 ID FVN7-7PZ として以下のアナウンスメントが行われています。 今回はこのアナウンスメントに関して、多数のお問い合わせをい...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://azure.github.io/jpazpaas/2024/04/01/azure-functions-inprocess-end-of-support-FVN7-7PZ.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">azure.github.io</div></div></div></div></a>
</div>



<div style="height:38px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">Azure Functions .NET8 分離ワーカーモデルへの移行手順</a><ol><li><a href="#toc3" tabindex="0">csprojファイルの編集</a></li><li><a href="#toc4" tabindex="0">パッケージ参照の変更</a></li><li><a href="#toc5" tabindex="0">Program.csファイルの追加</a></li><li><a href="#toc6" tabindex="0">関数アプリコードの変更</a><ol><li><a href="#toc7" tabindex="0">[FunctionName]属性を[Function]属性に変更する</a></li><li><a href="#toc8" tabindex="0">ILoggerのDI</a></li><li><a href="#toc9" tabindex="0">usingの書き換え</a></li><li><a href="#toc10" tabindex="0">staticクラス・メソッドをインスタンスクラス・メソッドに変更</a></li><li><a href="#toc11" tabindex="0">トリガーやバインディングの変更</a></li><li><a href="#toc12" tabindex="0">local.settings.jsonファイルの「FUNCTIONS_WORKER_RUNTIME」値を「dotnet-isolated」に変更</a></li></ol></li><li><a href="#toc13" tabindex="0">.NET8分離ワーカーモデル(ASP.NET Core統合)移行後のコード全体像</a></li><li><a href="#toc14" tabindex="0">Azure Functions .NET 8 IsolatedをASP.NET Core統合なしに書き換え</a></li><li><a href="#toc15" tabindex="0">Azure実行環境への反映</a></li></ol></li><li><a href="#toc16" tabindex="0">さいごに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>基本的には、MSさんのLearnにあるこの情報を元ネタとして実施しています。が、この手順ですと、ASP.NETCore統合としてAzure Functionsを構成しますが、今回は「組み込みの Functions HTTP 型」っていうの？つまりASP.NETCore統合不使用（HttpRequestDataとかHttpResponseData使うヤツ）での移行を行っていきます。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-official">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/azure-functions/migrate-dotnet-to-isolated-model?tabs=net8" title="C# アプリをインプロセスから分離ワーカー モデルに移行する" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">C# アプリをインプロセスから分離ワーカー モデルに移行する</div><div class="blogcard-snippet external-blogcard-snippet">インプロセス モデルの.NETで実行されている既存の C# 関数アプリを分離ワーカー モデルに移行する方法について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/azure-functions/migrate-dotnet-to-isolated-model?tabs=net8" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">Azure Functions .NET8 分離ワーカーモデルへの移行手順</span></h2>



<p>移行対象とするのは、下記の.NET6インプロセスモデルのAzure Functionsコードになります。</p>



<p>このコードでは、HTTPトリガーでクライアントからのHTTPリクエストを受け取り、Queue出力バインドで複数の値をQueue出力を行うというものです。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace DotNet8MigrationFunctionApp
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            for (int i = 0; i &lt; 3; i++)
            {
                outputQueues.Add($"{i}：{name}");
            }

            return new OkObjectResult($"Hello,{name}!");
        }
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>実行するとこんな感じ。</p>



<p>HTTPリクエストを受け取り、URLパラメーターで受け取った内容を出力する。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-175928.png"><img decoding="async" width="806" height="219" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-175928.png" alt="" class="wp-image-5199" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-175928.png 806w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-175928-300x82.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-175928-768x209.png 768w" sizes="(max-width: 806px) 100vw, 806px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>そして、QueueにURLパラメーターで受け取った内容を3回出力する。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-180024.png"><img decoding="async" width="1024" height="336" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-180024-1024x336.png" alt="" class="wp-image-5200" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-180024-1024x336.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-180024-300x98.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-180024-768x252.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-180024.png 1531w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>それでは早速移行していきますが、おおまかな手順としては以下の感じになっています。</p>



<ul class="wp-block-list">
<li>csprojファイルの編集</li>



<li>パッケージ参照の変更</li>



<li>Program.csファイルの追加</li>



<li>関数アプリコードの変更</li>
</ul>



<p>それではひとつづつ順番に行っていきましょ～。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc3">csprojファイルの編集</span></h3>



<p>まずはC#のプロジェクトファイルのcsprojファイルを変更します。</p>



<p>以下が変更前のcsprojファイル。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;Project Sdk="Microsoft.NET.Sdk"&gt;
  &lt;PropertyGroup&gt;
    &lt;TargetFramework&gt;net6.0&lt;/TargetFramework&gt;
    &lt;AzureFunctionsVersion&gt;v4&lt;/AzureFunctionsVersion&gt;
  &lt;/PropertyGroup&gt;
  &lt;ItemGroup&gt;
    &lt;PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="5.2.2" /&gt;
    &lt;PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage.Queues" Version="5.2.1" /&gt;
    &lt;PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.3.0" /&gt;
  &lt;/ItemGroup&gt;
  &lt;ItemGroup&gt;
    &lt;None Update="host.json"&gt;
      &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;/CopyToOutputDirectory&gt;
    &lt;/None&gt;
    &lt;None Update="local.settings.json"&gt;
      &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;/CopyToOutputDirectory&gt;
      &lt;CopyToPublishDirectory&gt;Never&lt;/CopyToPublishDirectory&gt;
    &lt;/None&gt;
  &lt;/ItemGroup&gt;
&lt;/Project&gt;</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>変更内容は以下のとおり。</p>



<p>①&lt;TargetFramework&gt;の値を「net6.0」→「net8.0」に変更します。</p>



<p>②&lt;OutputType&gt;Exe&lt;/OutputType&gt;をPropertyGroup内に追加します。</p>



<p>③ItemGroupの「Microsoft.NET.SDK.Functions」へのパッケージ参照を以下の内容に書き換えます。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;FrameworkReference Include="Microsoft.AspNetCore.App" /&gt;
&lt;PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" /&gt;
&lt;PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.4" /&gt;
&lt;PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" /&gt;
&lt;PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" /&gt;
&lt;PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" /&gt;</pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>④「Microsoft.Azure.WebJobs」や「Microsoft.Azure.Functions.Extensions」名前空間のパッケージがある場合は削除します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">※削除する！！
&lt;PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="5.2.2" /&gt;
&lt;PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage.Queues" Version="5.2.1" /&gt;</pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>⑤以下のItemGroupを追加します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;ItemGroup&gt;
  &lt;Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/&gt;
&lt;/ItemGroup&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>最終的に変更されたcsprojファイルは以下のような感じになると思います。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;Project Sdk="Microsoft.NET.Sdk"&gt;
  &lt;PropertyGroup&gt;
    &lt;TargetFramework&gt;net8.0&lt;/TargetFramework&gt;
    &lt;AzureFunctionsVersion&gt;v4&lt;/AzureFunctionsVersion&gt;
    &lt;OutputType&gt;Exe&lt;/OutputType&gt;
  &lt;/PropertyGroup&gt;
  &lt;ItemGroup&gt;
    &lt;FrameworkReference Include="Microsoft.AspNetCore.App" /&gt;
    &lt;PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" /&gt;
    &lt;PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.4" /&gt;
    &lt;PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="1.2.1" /&gt;
    &lt;PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.22.0" /&gt;
    &lt;PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.2.0" /&gt;
  &lt;/ItemGroup&gt;
  &lt;ItemGroup&gt;
    &lt;None Update="host.json"&gt;
      &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;/CopyToOutputDirectory&gt;
    &lt;/None&gt;
    &lt;None Update="local.settings.json"&gt;
      &lt;CopyToOutputDirectory&gt;PreserveNewest&lt;/CopyToOutputDirectory&gt;
      &lt;CopyToPublishDirectory&gt;Never&lt;/CopyToPublishDirectory&gt;
    &lt;/None&gt;
  &lt;/ItemGroup&gt;
  &lt;ItemGroup&gt;
    &lt;Using Include="System.Threading.ExecutionContext" Alias="ExecutionContext"/&gt;
  &lt;/ItemGroup&gt;
&lt;/Project&gt;</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">パッケージ参照の変更</span></h3>



<p>続いて、パッケージ参照を変更していきます。基本的には「Microsoft.Azure.WebJobs」や「Microsoft.Azure.Functions.Extensions」名前空間のパッケージで利用していた拡張機能を「Microsoft.Azure.Functions.Worker.Extentions」名前空間のパッケージとしてインストールしなおす感じです。</p>



<p>①NuGetパッケージマネージャーを開きます。コンソールがお好みの方はよしなに。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226.png"><img decoding="async" width="1024" height="575" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226-1024x575.png" alt="" class="wp-image-5201" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226-1024x575.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226-300x169.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226-768x432.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183226.png 1034w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183613.png"><img decoding="async" width="1024" height="316" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183613-1024x316.png" alt="" class="wp-image-5202" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183613-1024x316.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183613-300x93.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183613-768x237.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183613-1536x474.png 1536w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-183613.png 1743w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②利用するバインドなどのパッケージをインストールします。ここではQueue出力バインドを利用していますので、「Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues」パッケージをインストールします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-184827.png"><img decoding="async" width="1024" height="537" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-184827-1024x537.png" alt="" class="wp-image-5203" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-184827-1024x537.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-184827-300x157.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-184827-768x403.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-184827-1536x806.png 1536w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-13-184827.png 1709w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>詳しくは以下のリンクにて。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/azure-functions/migrate-dotnet-to-isolated-model?tabs=net8#package-references" title="C# アプリをインプロセスから分離ワーカー モデルに移行する" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">C# アプリをインプロセスから分離ワーカー モデルに移行する</div><div class="blogcard-snippet external-blogcard-snippet">インプロセス モデルで .NET で実行されている既存の C# 関数アプリを分離ワーカー モデルに移行する方法について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/azure-functions/migrate-dotnet-to-isolated-model?tabs=net8#package-references" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Program.csファイルの追加</span></h3>



<p>Program.csファイルを追加して以下のコードを記述していきます。すでにDIなど利用している場合はFunctionsStartup属性のついたStartup.csをProgram.csにリネームしていく感じでしょうか。必要であればDIも記述します。また、JSONシリアル化設定なども必要であれば追記します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(services =&gt; {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        // JSONシリアル化オプションを設定する
        services.Configure&lt;JsonSerializerOptions&gt;(options =&gt;
        {
            options.AllowTrailingCommas = true;                                         // 末尾のカンマを無視する
            options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;       // nullのフィールドはシリアル化時に含めない
            options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;                  // camelケースで出力
            options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);              // 漢字可
            options.PropertyNameCaseInsensitive = true;                                 // 逆シリアル化時に大文字小文字を区別しない
            options.WriteIndented = true;                                               // JSONを整形
        });
    })
    .Build();

host.Run();</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">関数アプリコードの変更</span></h3>



<p>あとは実際に関数アプリコードを書き換えていくだけです。変更前のAzure Functions .NET6インプロセスモデルのコードを再掲します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace DotNet8MigrationFunctionApp
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            for (int i = 0; i &lt; 3; i++)
            {
                outputQueues.Add($"{i}：{name}");
            }

            return new OkObjectResult($"Hello,{name}!");
        }
    }
}</pre></div>



<p>変更ポイントは以下の通り。</p>



<ul class="wp-block-list">
<li>[FunctionName]属性を[Function]属性に変更する</li>



<li>DIでIloggerを受け取り、コード内のlogインスタンスと置換する</li>



<li>usingの書き換え</li>



<li>staticクラス・メソッドをインスタンスクラス・メソッドに変更</li>



<li>トリガーやバインディングの変更</li>



<li>local.settings.jsonファイルの「FUNCTIONS_WORKER_RUNTIME」値を「dotnet-isolated」に変更</li>
</ul>



<p>それでは一つ一つ見ていきます。</p>



<h4 class="wp-block-heading"><span id="toc7">[FunctionName]属性を[Function]属性に変更する</span></h4>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public static class Function1
{
    [FunctionName("Function1")]
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
        [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues,
        ILogger log)</pre></div>



<p>となっているのを</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public static class Function1
{
    [Function("Function1")]　// ←ここ
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
        [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues,
        ILogger log)</pre></div>



<p>と[Function(関数クラス名)]に書き換えるだけです。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc8">ILoggerのDI</span></h4>



<p>①まずは以下のコードを関数クラスのメンバーとして宣言します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">private readonly ILogger&lt;Function1&gt; _logger;</pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②関数クラスのコンストラクターを宣言し、ILoggerオブジェクトを受け取って①で宣言した変数に代入します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public Function1(ILogger&lt;Function1&gt; logger) {
    _logger = logger;
}</pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③次に関数メソッドが受け取っているILoggerインスタンスを削除します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">[Function("Function1")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
    [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues,
    ILogger log)　// ←削除</pre></div>



<p>こうなります。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">[Function("Function1")]
public static IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
    [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues)</pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>④そして、コード内のlogオブジェクトを_loggerオブジェクトに変更します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">log.LogInformation("C# HTTP trigger function processed a request.");</pre></div>



<p>を</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">_logger.LogInformation("C# HTTP trigger function processed a request.");</pre></div>



<p>って感じに直します。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc9">usingの書き換え</span></h4>



<p>不要な「using Microsoft.Azure.WebJobs;」をすべて削除し、「using Microsoft.Azure.Functions.Worker;」を追加します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;　// ←削除
using Microsoft.Azure.WebJobs.Extensions.Http;　// ←削除
using Microsoft.Azure.Functions.Worker;　// ←追加
using Microsoft.Extensions.Logging;</pre></div>



<p>こうなります。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc10">staticクラス・メソッドをインスタンスクラス・メソッドに変更</span></h4>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public static class Function1  // ←staticを削除
{
    private readonly ILogger&lt;Function1&gt; _logger;

    public Function1(ILogger&lt;Function1&gt; logger)
    {
        _logger = logger;
    }

    [Function("Function1")]
    public static IActionResult Run(  // ←staticを削除
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
        [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues)</pre></div>



<p>を</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public class Function1
{
    private readonly ILogger&lt;Function1&gt; _logger;

    public Function1(ILogger&lt;Function1&gt; logger)
    {
        _logger = logger;
    }

    [Function("Function1")]
    public IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
        [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues)</pre></div>



<p>に変更します。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc11">トリガーやバインディングの変更</span></h4>



<p>この手順はちょっと癖あります。基本的にはトリガーはそのまま、入力バインドはインプロセスモデル時の属性値に「Input」を付けましょうとあります。例えば、[Blob(&#8220;sample/fileName&#8221;, FileAccess.Read, Connection = &#8220;MyStorageConnection&#8221;)]だったとしたら、[BlobInput(&#8220;sample/fileName&#8221;,  Connection = &#8220;MyStorageConnection&#8221;)]に変わります。Accessプロパティは不要です。</p>



<p>そして、出力バインドですが、入力バインドと同様に通常は「Output」を付与するとあります。ですが、今回の例では、Httpトリガーとして、クライアントにHttpレスポンスを返しつつ、Queueストレージにエンキューを行う必要があります。要するに複数の出力バインドがあるというシチュエーションを実装してみます。</p>



<p>元ネタはここです。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/azure-functions/dotnet-isolated-process-guide?tabs=windows#multiple-output-bindings" title="分離されたワーカー プロセスで C# Azure Functionsを実行するためのガイド" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">分離されたワーカー プロセスで C# Azure Functionsを実行するためのガイド</div><div class="blogcard-snippet external-blogcard-snippet">.NET分離ワーカー モデルを使用して Azure で C# 関数を実行する方法について説明します。これにより、現在サポートされているバージョンの .NET および .NET Framework で関数を実行できます。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/azure-functions/dotnet-isolated-process-guide?tabs=windows#multiple-output-bindings" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>①新しいクラスを追加します。今回はCustomResponseというクラス名で追加します。そして、そこにHttpResponseを返すプロパティとQueue出力バインド用のプロパティを追加しておきます。Queue出力バインドを返すプロパティには[QueueOutput(&#8220;my-queue-items&#8221;, Connection=&#8221;AzureWebJobsStorage&#8221;)]といった感じで属性を設定しておきます。また、Queue出力バインドは1度に複数の値をエンキューしているので、Listオブジェクトといったコレクションや配列で用意する必要があります。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public class CustomResponse
{
    public CustomResponse()
    {
        OutputQueue = new List&lt;string&gt;();
    }

    public IActionResult Response { get; set; }

    [QueueOutput("my-queue-items", Connection = "AzureWebJobsStorage")]
    public List&lt;string&gt; OutputQueue { get; set; } 
}</pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②次に、メソッド宣言を変更し、CustomResponseを返すようにし、Queueのバインドを削除します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">[Function("Function1")]
public IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
    [Queue("my-queue-items"), StorageAccount("AzureWebJobsStorage")] ICollector&lt;string&gt; outputQueues)</pre></div>



<p>これを</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">[Function("Function1")]
public CustomResponse Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req)</pre></div>



<p>このように変更します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③最後に、メソッド内でIActionResultを返しているコードを①で追加したCustomResponseオブジェクトで返すように変更します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">var response = new CustomResponse();

response.Response = new OkObjectResult($"Hello,{name}!");

for (int i = 0; i &lt; 3; i++)
{
    response.OutputQueue.Add($"{i}：{name}");
}

return response;</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc12">local.settings.jsonファイルの「FUNCTIONS_WORKER_RUNTIME」値を「dotnet-isolated」に変更</span></h4>



<p>最後にlocal.settings.jsonに分離ワーカーモデルを利用することを明示していきます。</p>



<p>FUNCTIONS_WORKER_RUNTIMEの値を「dotnet」から「dotnet-isolated」に変更します。</p>



<p>local.settings.jsonですので、言うまでもなく、ローカルデバッグでの設定です。この値が有効になるのはデバッグ時ですので、Azure実行環境でも同様の変更が必要ですが、後述します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"       // ← dotnetからdotnet-isolatedに変更
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc13">.NET8分離ワーカーモデル(ASP.NET Core統合)移行後のコード全体像</span></h3>



<p>Azure Functionsの.NET6インプロセスモデルから、.NET8分離ワーカーモデル（ASP.NETCore統合）移行後のコード全体像は以下の通りです。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;

namespace DotNet8MigrationFunctionApp
{
    public class CustomResponse
    {
        public CustomResponse()
        {
            OutputQueue = new List&lt;string&gt;();
        }

        public IActionResult Response { get; set; }

        [QueueOutput("my-queue-items", Connection = "AzureWebJobsStorage")]
        public List&lt;string&gt; OutputQueue { get; set; } 
    }

    public class Function1
    {
        private readonly ILogger&lt;Function1&gt; _logger;

        public Function1(ILogger&lt;Function1&gt; logger)
        {
            _logger = logger;
        }

        [Function("Function1")]
        public CustomResponse Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            var response = new CustomResponse();
            
            response.Response = new OkObjectResult($"Hello,{name}!");

            for (int i = 0; i &lt; 3; i++)
            {
                response.OutputQueue.Add($"{i}：{name}");
            }

            return response;
        }
    }
}</pre></div>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"       
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>それではデバッグ実行してみます。無事Fucntionsホストが立ち上がりました。が、分離ワーカーかどうかははっきりわかりませんが、インプロセスの時と表示が若干違うのはわかります。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933.png"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933-1024x577.png" alt="" class="wp-image-5205" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933-1024x577.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933-300x169.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933-768x433.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-143933.png 1115w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>それではHTTPトリガーにリクエストを投げてみます。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144124.png"><img decoding="async" width="680" height="200" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144124.png" alt="" class="wp-image-5206" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144124.png 680w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144124-300x88.png 300w" sizes="(max-width: 680px) 100vw, 680px" /></a></figure>



<p>あれ？レスポンスの文字列が返ってこない・・・orz</p>



<p>でも、Queueにはちゃんとエンキューされてる。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144146.png"><img decoding="async" width="1024" height="274" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144146-1024x274.png" alt="" class="wp-image-5207" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144146-1024x274.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144146-300x80.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144146-768x205.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144146.png 1535w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>いろいろ調べたがどうしてもわからなかった。けど、単体のHTTPトリガーなんかはうまくいくのでもしかして、マルチレスポンスでHTTPとQueueを出力してるのが悪いのかなぁと憶測。</p>



<p><span class="bold-blue"><span class="fz-28px">2024/06/11追記</span></span></p>



<p>Microsoft.Azure.Functions.Worker.Sdkのバージョン1.17.3-preview2以降かつ、Microsoft.Azure.Functions.Worker.Extensions.Http拡張機能のバージョン3.2.0以降かつ、Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCoreのバージョン1.3.0以降をインストールして、IActionResultに<span class="bold-red">[HttpResult]</span>属性をつけることで解決しました。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">public class CustomResponse
{
    public CustomResponse()
    {
        OutputQueue = new List&lt;string&gt;();
    }

    [HttpResult]
    public IActionResult Response { get; set; }

    [QueueOutput("my-queue-items", Connection = "AzureWebJobsStorage")]
    public List&lt;string&gt; OutputQueue { get; set; } 
}</pre></div>



<p>ちゃんとマルチレスポンスで返ってくるのを確認。いぇいv</p>



<p>ってことでASP.NETCore統合でいい方はここまででコードの移行は完了ですかね。</p>



<p><s>試しに、ASP.NET Core統合をやめて実装しなおしてみます。</s></p>



<p>ASP.NETCore統合ではなく、組み込み型モデルに書き換える方は引き続き次の手順をどうぞ。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc14">Azure Functions .NET 8 IsolatedをASP.NET Core統合なしに書き換え</span></h3>



<p>ということで、<s>うまくレスポンスが返ってきませんでしたので、</s>ASP.NET Core統合をやめ、非ASP.NET Core統合（組み込みFunctionsHTTP型）に書き換えていきます。</p>



<p>①NuGetパッケージマネージャーから「Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore」パッケージをアンインストールします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144644.png"><img decoding="async" width="1024" height="381" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144644-1024x381.png" alt="" class="wp-image-5208" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144644-1024x381.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144644-300x112.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144644-768x286.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144644-1536x571.png 1536w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-144644.png 1672w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②NuGetパッケージマネージャーから「Microsoft.Azure.Functions.Worker.Extensions.Http」パッケージをインストールします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-145026.png"><img decoding="async" width="1024" height="346" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-145026-1024x346.png" alt="" class="wp-image-5209" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-145026-1024x346.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-145026-300x102.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-145026-768x260.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-145026-1536x520.png 1536w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-145026.png 1655w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③Program.csのコードを変更し、ASP.NET Core統合を削除する。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Unicode;

var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()  // ←このコードを変更
    .ConfigureServices(services =&gt; {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        // JSONシリアル化オプションを設定する
        services.Configure&lt;JsonSerializerOptions&gt;(options =&gt;
        {
            options.AllowTrailingCommas = true;                                         // 末尾のカンマを無視する
            options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;       // nullのフィールドはシリアル化時に含めない
            options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;                  // camelケースで出力
            options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);              // 漢字可
            options.PropertyNameCaseInsensitive = true;                                 // 逆シリアル化時に大文字小文字を区別しない
            options.WriteIndented = true;                                               // JSONを整形
        });
    })
    .Build();

host.Run();</pre></div>



<p>これを、</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Unicode;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()  // ←このように変更
    .ConfigureServices(services =&gt; {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        // JSONシリアル化オプションを設定する
        services.Configure&lt;JsonSerializerOptions&gt;(options =&gt;
        {
            options.AllowTrailingCommas = true;                                         // 末尾のカンマを無視する
            options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;       // nullのフィールドはシリアル化時に含めない
            options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;                  // camelケースで出力
            options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);              // 漢字可
            options.PropertyNameCaseInsensitive = true;                                 // 逆シリアル化時に大文字小文字を区別しない
            options.WriteIndented = true;                                               // JSONを整形
        });
    })
    .Build();

host.Run();</pre></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>④以下のようにコードを変更します。（変更箇所はコメントにて記述）</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Microsoft.AspNetCore.Http;    // ←不要になるので削除
using Microsoft.AspNetCore.Mvc;     // ←不要になるので削除
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;    // ←追加
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System.Threading.Tasks;       // ←非同期なら追加

namespace DotNet8MigrationFunctionApp
{
    public class CustomResponse
    {
        public CustomResponse()
        {
            OutputQueue = new List&lt;string&gt;();
        }
                
        public HttpResponseData Response { get; set; }      // ←IActionResultからHttpResponseData型に変更

        [QueueOutput("my-queue-items", Connection = "AzureWebJobsStorage")]
        public List&lt;string&gt; OutputQueue { get; set; } 
    }

    public class Function1
    {
        private readonly ILogger&lt;Function1&gt; _logger;

        public Function1(ILogger&lt;Function1&gt; logger)
        {
            _logger = logger;
        }

        [Function("Function1")]
        public async Task&lt;CustomResponse&gt; Run(      // ←今回はAsyncにした。よしなに。
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequestData req)        // ←HttpRequestからHttpRequestData型に変更
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            var response = new CustomResponse();

            response.Response = req.CreateResponse();       // ←HttpRequestDataオブジェクトのCreateResponseメソッドからHttpResponseDataを取得する
            response.Response.StatusCode = System.Net.HttpStatusCode.OK;        // ←Httpステータスコードをセットする
            response.Response.Headers.Add("Content-Type", "text/plain; charset=utf-8");     // ←レスポンスヘッダーをセットする
            await response.Response.WriteStringAsync($"Hello,{name}!");     // ←レスポンスボディに書き込む

            for (int i = 0; i &lt; 3; i++)
            {
                response.OutputQueue.Add($"{i}：{name}");
            }

            return response;
        }
    }
}</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>それでは、実行してみます。</p>



<p>今度は、ちゃんとHTTPレスポンスも帰ってきました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151042.png"><img decoding="async" width="1024" height="502" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151042-1024x502.png" alt="" class="wp-image-5212" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151042-1024x502.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151042-300x147.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151042-768x376.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151042.png 1251w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Queueへの書き込みもばっちりです。ひとまずコードの移行は問題なさそうです。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151105.png"><img decoding="async" width="1024" height="252" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151105-1024x252.png" alt="" class="wp-image-5213" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151105-1024x252.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151105-300x74.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151105-768x189.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-151105.png 1533w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc15">Azure実行環境への反映</span></h3>



<p>最後に、.NET8分離ワーカーモデルへと移行したAzure FunctionsコードをAzure実行環境にデプロイしていきましょう。シチュエーションとしてはAzure実行環境は.NET6インプロセスモデルで稼働しているという前提でデプロイを行ってみます。</p>



<p>ランタイムスタックが.NET6のAzure Functions本番系リソースを用意します。そして移行前のAzure Functionsコードがデプロイ済みです。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203432.png"><img decoding="async" width="922" height="716" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203432.png" alt="" class="wp-image-5215" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203432.png 922w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203432-300x233.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203432-768x596.png 768w" sizes="(max-width: 922px) 100vw, 922px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>また、上記Azure Functionsのデプロイスロットを用意し、ステージング環境とします。もちろんこちらも.NET6インプロセスモデルのAzure Functionsです。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203458.png"><img decoding="async" width="997" height="681" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203458.png" alt="" class="wp-image-5216" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203458.png 997w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203458-300x205.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-203458-768x525.png 768w" sizes="(max-width: 997px) 100vw, 997px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>そして、local.settings.jsonで行ったのと同じことをAzure実行環境でも行います。[設定]－[環境変数]から、[アプリ設定]にアクセスし、ステージング環境のスロットの「FUNCTIONS_WORKER_RUNTIME」の値を「dotnet」から「<span class="marker-under-red">dotnet-isolated</span>」に変更し、保存を行います。</p>



<p>環境変数のUI、変わったんですねぇ・・・。というかいろんなところ変わってますが。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205610.png"><img decoding="async" width="1024" height="489" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205610-1024x489.png" alt="" class="wp-image-5220" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205610-1024x489.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205610-300x143.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205610-768x367.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205610.png 1528w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>それではAzure Functionsリソースにコードをデプロイしていきます。パイプラインを組んでいる方がほとんどだと思いますが、パイプライン経由でAzure Functionsのバージョンアップまで行ってくれるか検証してないので、今回はLearnにある通り手動デプロイ時の自動アップグレードで行ってみます。</p>



<p>Azure Functionsアプリの公開プロファイルを作成します。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205355.png"><img decoding="async" width="815" height="575" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205355.png" alt="" class="wp-image-5217" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205355.png 815w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205355-300x212.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205355-768x542.png 768w" sizes="(max-width: 815px) 100vw, 815px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>プロファイルができたら「発行」ボタンをクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205432.png"><img decoding="async" width="1024" height="388" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205432-1024x388.png" alt="" class="wp-image-5218" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205432-1024x388.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205432-300x114.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205432-768x291.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205432.png 1282w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下のランタイムバージョン更新ダイアログが表示されるので、「はい」ボタンを押下しましょう。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205449.png"><img decoding="async" width="419" height="244" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205449.png" alt="" class="wp-image-5219" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205449.png 419w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205449-300x175.png 300w" sizes="(max-width: 419px) 100vw, 419px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>デプロイが完了したら、Azure Functionsステージングスロットのリソースを確認してみます。ランタイムスタックが「.NET 8」に更新されているのが確認できました！</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205912.png"><img decoding="async" width="1024" height="675" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205912-1024x675.png" alt="" class="wp-image-5221" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205912-1024x675.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205912-300x198.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205912-768x506.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-205912.png 1060w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>全般設定を見れば「.NET 8 Isolated」となっているので、分離ワーカーモデルとして動いていることも確認できました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000.png"><img decoding="async" width="1024" height="574" src="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000-1024x574.png" alt="" class="wp-image-5222" srcset="https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000-1024x574.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000-300x168.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000-768x431.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2024/04/スクリーンショット-2024-03-17-210000.png 1031w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc16">さいごに</span></h2>



<p>ステージングにデプロイを行って稼働確認がOKになったら、後は本番スロットにスワップを行えば、晴れて.NET 8 分離ワーカーモデルへの移行が完了になります。</p>



<p>スワップしてステージング環境に移った旧本番系に再度手動デプロイを行って.NET 8へのアップグレードを行わないと次回おかしなことになっちゃいますかね？そこまでは試してないですが。「dotnet-isolated」の変更を忘れずに。</p>



<p>実際移行してみて、今回のHTTP＆Queue出力といったような複数の出力を行うのにわざわざクラス定義しなきゃとか、ぶっちゃけめんどいですね。さらに、分離ワーカーというか、HttpRequestData、HttpResponseDataがモックしづらいので、UTコードがちょっとやばいです。というか実装してません。なんとかしてくれることを期待するのみです・・・。その辺も考慮に入れたうえでインプロセスのまま、まずは.NET8への移行だけしていくというが選択肢でもいいのかなぁと思います。今回は移行しちゃいましたが。</p>



<p>コード量多いとさすがに対応負担大きいので計画的に移行していきましょう。</p>



<p>以上、Azure Functionsを.NET8分離ワーカーモデルに移行してみました。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5180"
					data-ulike-nonce="4abc6f38de"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5180"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2024/04/07/work/migrate-dotnet8-isolated/">Azure Functions .NET6インプロセスモデルから.NET8分離ワーカーモデルへの移行</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2024/04/07/work/migrate-dotnet8-isolated/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Communication Servicesを利用してメール送信してみる</title>
		<link>https://star-moon-sun.com/2024/02/03/work/azure-communication-services-email/</link>
					<comments>https://star-moon-sun.com/2024/02/03/work/azure-communication-services-email/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sat, 03 Feb 2024 10:42:09 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=5084</guid>

					<description><![CDATA[<p>こんにちわ。今日はAzure Communication Services（以下ACS）を利用したメール送信を行ってみたいと思います。また、ACSにカスタムドメインとして当ドメインを設定し、当ドメインからのメールとして迷 [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2024/02/03/work/azure-communication-services-email/">Azure Communication Servicesを利用してメール送信してみる</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>こんにちわ。今日はAzure Communication Services（以下ACS）を利用したメール送信を行ってみたいと思います。また、ACSにカスタムドメインとして当ドメインを設定し、当ドメインからのメールとして迷惑メールとならずにクラウドメールを利用する方法をエックスサーバーへの設定方法として実施していきます。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Azure Communication Servicesとは？</a><ol><li><a href="#toc2" tabindex="0">なぜAzure Communication Services？</a></li></ol></li><li><a href="#toc3" tabindex="0">Azure Communication Servicesを利用したメール送信</a><ol><li><a href="#toc4" tabindex="0">ACSリソースの作成</a><ol><li><a href="#toc5" tabindex="0">Communication Services Emailリソースの作成</a></li><li><a href="#toc6" tabindex="0">Communication Servicesリソースの作成</a></li></ol></li><li><a href="#toc7" tabindex="0">ACSでのメール送信をC#で実装する</a></li></ol></li><li><a href="#toc8" tabindex="0">Azure Communication Services Emailにカスタムドメインを設定する</a><ol><li><a href="#toc9" tabindex="0">ACS Emailにカスタムドメインの追加＆ドメイン所有権の検証</a></li><li><a href="#toc10" tabindex="0">SPF・DKIＭ認証レコードをエックスサーバーに設定</a></li><li><a href="#toc11" tabindex="0">カスタムドメインの送信元メールアドレス追加</a></li><li><a href="#toc12" tabindex="0">カスタムドメインのAzure Communication Servicesへの接続</a></li><li><a href="#toc13" tabindex="0">カスタムドメインを設定後のメール送信</a></li></ol></li><li><a href="#toc14" tabindex="0">さいごに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Azure Communication Servicesとは？</span></h2>



<p>「Azure Communication Servicesとは、マイクロソフトのクラウドプラットフォームであるAzureが提供する統合通信サービスです。このサービスを利用すると、音声やビデオでの通話、チャット、SMS、メールなどのリアルタイム通信機能を簡単にアプリケーションに組み込むことができます。」とCopilotさんが言っています。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-official">

<a rel="noopener" target="_blank" href="https://azure.microsoft.com/ja-jp/products/communication-services/" title="https://azure.microsoft.com/ja-jp/products/communication-services/" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fazure.microsoft.com%2Fja-jp%2Fproducts%2Fcommunication-services%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://azure.microsoft.com/ja-jp/products/communication-services/</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://azure.microsoft.com/ja-jp/products/communication-services/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">azure.microsoft.com</div></div></div></div></a>
</div>



<br>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc2">なぜAzure Communication Services？</span></h3>



<p>Azureに限らないかもしれませんが、クラウドサービスで送信メールサーバーを立てることは推奨されておらず、クラウドからメールを送信したい場合は基本的にはSendGridなどのリレー方式のメール送信サービスを利用するのが定石かと思います。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference-link">

<a rel="noopener" target="_blank" href="https://sendgrid.kke.co.jp/" title="SendGrid | クラウドメール配信サービス・メルマガ配信システム" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/4216127d176c23c18d8b2518eb045200.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">SendGrid | クラウドメール配信サービス・メルマガ配信システム</div><div class="blogcard-snippet external-blogcard-snippet">世界中のマーケターや開発者が使っているメール配信サービス「SendGrid」。月間1,000億通以上の配信実績、高いメール到達率！豊富なAPIでシステム連携も簡単に！</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://sendgrid.kke.co.jp/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">sendgrid.kke.co.jp</div></div></div></div></a>
</div>



<p>SendGridは到達率が高く、いろいろといいサービスなんですが、如何せん価格が高い・・・。Proの最安プランで月額13,000円超で10万通まで送信可能。ただ、月間送信数が少ないと大分無駄になってしまっています。月間送信通数が少ない方はACSメールサービスにリプレイスすればごっそり支払い料金を節約できるという感じ。</p>



<p>そして、昨今の迷惑メール対策として、SPFやDKIM認証がSendGridでも必須化されていくことに伴い、いっそのことカスタムドメインではSPF・DKIMマストなACSに乗り換え検討してみようかというのがことの発端です。</p>



<p>さらに今まで国内でのデータ保持が担保されていなかったのが、ロケーションとして日本も追加されたのが大きいかな。</p>



<p>ってことでACSを利用したメール送信を検証していきましょう。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">Azure Communication Servicesを利用したメール送信</span></h2>



<h3 class="wp-block-heading"><span id="toc4">ACSリソースの作成</span></h3>



<p>まずは、Azure Communication Servicesリソースを追加していきます。メール送信を行うためには「Communication Services」というリソースと、「Email Communication Services」の二つのリソースを追加する必要があります。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135901.png"><img decoding="async" width="1024" height="634" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135901-1024x634.png" alt="" class="wp-image-5086" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135901-1024x634.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135901-300x186.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135901-768x476.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135901.png 1235w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc5">Communication Services Emailリソースの作成</span></h4>



<p>まずはCommunication Services Emailリソースを追加してみます。</p>



<p>Email Communication Servicesを検索し、「作成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144059.png"><img decoding="async" width="1024" height="831" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144059-1024x831.png" alt="" class="wp-image-5092" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144059-1024x831.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144059-300x243.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144059-768x623.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144059.png 1065w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>サブスク、リソースグループを選択し、リソース名を入力します。リージョンはグローバルなので選択はできませんが、データを保持するロケーションを選択します。以前は日本国内は選択できませんでしたが、しっかり「Japan」が選択できるようになりました。やったね！</p>



<p>「確認と作成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144151.png"><img decoding="async" width="910" height="865" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144151.png" alt="" class="wp-image-5093" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144151.png 910w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144151-300x285.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144151-768x730.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「作成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144216.png"><img decoding="async" width="753" height="867" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144216.png" alt="" class="wp-image-5094" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144216.png 753w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144216-261x300.png 261w" sizes="(max-width: 753px) 100vw, 753px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>リソースができあがりました。が、このままでは空っぽのリソースですので、メール送信用のドメインを準備する必要があります。[設定]にある「ドメインをプロビジョニングする」を選択します。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144459.png"><img decoding="async" width="1024" height="674" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144459-1024x674.png" alt="" class="wp-image-5095" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144459-1024x674.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144459-300x197.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144459-768x506.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144459.png 1311w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で、「ドメインの追加」から「Azureドメイン」を選択します。お手軽にメールを実装するにはAzure側で用意してくれるAzureドメインを選択でよいのですが、後述しますが、ちょっといただけない理由があります。ひとまずAzureドメインで進めていきます。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144547.png"><img decoding="async" width="1024" height="652" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144547-1024x652.png" alt="" class="wp-image-5096" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144547-1024x652.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144547-300x191.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144547-768x489.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144547.png 1211w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>あっという間にメール送信用のドメインの準備が完了しました。Emailリソースはひとまずここまで。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144702.png"><img decoding="async" width="1024" height="366" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144702-1024x366.png" alt="" class="wp-image-5097" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144702-1024x366.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144702-300x107.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144702-768x275.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144702.png 1530w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><span id="toc6">Communication Servicesリソースの作成</span></h4>



<p>次にCommunication Servicesリソースをデプロイしていきます。リソースを検索し、以下の画面で「作成」をクリック。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135948.png"><img decoding="async" width="779" height="650" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135948.png" alt="" class="wp-image-5087" style="object-fit:cover" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135948.png 779w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135948-300x250.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-135948-768x641.png 768w" sizes="(max-width: 779px) 100vw, 779px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>こちらでも同様にサブスク、リソースグループを選択し、リソース名を入力します。注意点は「データの場所」ですが、Emailサービスで選択したロケーションと同一のものを選択しましょう。今回は「Japan」が選択できるようになっていますのでもちろん「Japan」で。「出逢いは億千万」ですので。「タグ」はお好みで。「レビューと作成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143637.png"><img decoding="async" width="870" height="864" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143637.png" alt="" class="wp-image-5088" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143637.png 870w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143637-300x298.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143637-150x150.png 150w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143637-768x763.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143637-100x100.png 100w" sizes="(max-width: 870px) 100vw, 870px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>確認画面で「作成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143731.png"><img decoding="async" width="649" height="865" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143731.png" alt="" class="wp-image-5090" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143731.png 649w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-143731-225x300.png 225w" sizes="(max-width: 649px) 100vw, 649px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Communication Servicesリソースができました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144009.png"><img decoding="async" width="1024" height="668" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144009-1024x668.png" alt="" class="wp-image-5091" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144009-1024x668.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144009-300x196.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144009-768x501.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144009.png 1326w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次に作成したACSリソースにEmailリソースで追加したドメインを紐づけてあげる必要があります。[メール]の「ドメイン」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144802.png"><img decoding="async" width="1024" height="665" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144802-1024x665.png" alt="" class="wp-image-5098" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144802-1024x665.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144802-300x195.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144802-768x499.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144802.png 1329w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面になるので、「ドメインを接続する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144824.png"><img decoding="async" width="1024" height="460" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144824-1024x460.png" alt="" class="wp-image-5099" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144824-1024x460.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144824-300x135.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144824-768x345.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144824.png 1312w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「メールドメインの接続」が表示されるので、前手順で追加したAzureドメインを選択し、「接続」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144910.png"><img decoding="async" width="591" height="825" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144910.png" alt="" class="wp-image-5100" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144910.png 591w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144910-215x300.png 215w" sizes="(max-width: 591px) 100vw, 591px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ドメインが「接続済み」になればACSとEmailリソースを利用してメール送信を行うことができる状態です。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144938.png"><img decoding="async" width="1024" height="257" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144938-1024x257.png" alt="" class="wp-image-5101" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144938-1024x257.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144938-300x75.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144938-768x193.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-144938.png 1530w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc7">ACSでのメール送信をC#で実装する</span></h3>



<p>今回はVisual StudioでC#コンソールアプリとしてメール送信を試してみたいと思います。基本はMSのLearnサンプル通りです。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference-link">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/send-email?tabs=windows%2Cconnection-string&#038;pivots=programming-language-csharp" title="Azure Communication Services を使用してメールを送信する - An Azure Communication Services article" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Azure Communication Services を使用してメールを送信する - An Azure Communication Services article</div><div class="blogcard-snippet external-blogcard-snippet">この記事では、Azure Communication Services を使用して電子メール メッセージを送信する方法について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/send-email?tabs=windows%2Cconnection-string&#038;pivots=programming-language-csharp" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>まずは準備として、送信元メールアドレスの確認です。AzureポータルからEmailサービスリソースに遷移し、プロビジョニングされたドメイン名をクリックします。そして、「MailFrom address」を選択すると以下の画面が表示されるので、対象メールアドレスの横三点リーダーから「Copy MailFrom address」で送信元メールアドレスを取得しておきます。追加したり修正したければ「＠の前」と「Display Name」に関しては編集できます。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162435.png"><img decoding="async" width="1024" height="524" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162435-1024x524.png" alt="" class="wp-image-5103" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162435-1024x524.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162435-300x154.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162435-768x393.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162435.png 1240w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次もAzureポータルからACSリソースにアクセスし、[設定]－「キー」を選択します。接続文字列をコピーしておきます。この後利用します。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162655.png"><img decoding="async" width="1024" height="494" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162655-1024x494.png" alt="" class="wp-image-5104" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162655-1024x494.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162655-300x145.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162655-768x370.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-162655.png 1446w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>したらば、VisualStudioに移ります。まずはNugetパッケージマネージャーで「Azure.Communication.Email」パッケージをインストールします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-154121.png"><img decoding="async" width="1024" height="373" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-154121-1024x373.png" alt="" class="wp-image-5102" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-154121-1024x373.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-154121-300x109.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-154121-768x280.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-154121-1536x559.png 1536w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-154121.png 1554w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>実装するソースコードサンプルは以下の感じです。{Azure Communication Servicesの接続文字列}にはACSリソースから取得した接続文字列、{送信元メールアドレス}にはEmailリソースで取得したMailFrom addressを入力します。</p>



<p>ちなみに毎度当たり前のことですが、接続文字列はコード内にべた書きせず、セキュアな場所に保持して参照するようにしておくのが定石です。今回はメール送信ができるか確認するだけですのでべた書きしてますが、よい子のみんなはマネしちゃだめだぞ～ｗｗｗ</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using Azure;
using Azure.Communication.Email;

string connectionString = {Azure Communication Servicesの接続文字列};
EmailClient emailClient = new EmailClient(connectionString);

// タイトル
var subject = "ACSメール送信テスト";
// 本文
var htmlContent = "Azure Communication Serviceからメール送信をしてみました。&lt;BR&gt;届きましたかね？";
// 送信元メールアドレス
var sender = {送信元メールアドレス};
// 送信先メールアドレス
var recipient = "xxxxx@example.com";

try
{
    Console.WriteLine("メール送信中...");

    EmailSendOperation emailSendOperation = await emailClient.SendAsync(Azure.WaitUntil.Completed,
                                                                        sender,
                                                                        recipient,
                                                                        subject,
                                                                        htmlContent);

    EmailSendResult statusMonitor = emailSendOperation.Value;

    Console.WriteLine($"メール送信しました。ステータス = {emailSendOperation.Value.Status}");

    string operationId = emailSendOperation.Id;

    Console.WriteLine($"オペレーションID = {operationId}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"メール送信失敗: {ex.ErrorCode}, メッセージ: {ex.Message}");
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>あとは実行するだけです。コードを実行すれば、指定のアドレスにメールが送信されているのが確認できると思います。あ～ら簡単ｗ</p>



<p>しかしながら以下の画像で表示しているように、お手軽Azureドメインを利用しているメールドメインですので、表示されているドメインの長さときたら・・・。これではユーザーに怪しまれてしまいそうですよね。</p>



<p>ってことでメールアドレスにカスタムドメインを当てていきたいと思います。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163049.png"><img decoding="async" width="1024" height="284" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163049-1024x284.png" alt="" class="wp-image-5105" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163049-1024x284.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163049-300x83.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163049-768x213.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163049.png 1471w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc8">Azure Communication Services Emailにカスタムドメインを設定する</span></h2>



<p>ってことで、Azure無料ドメインは、迷惑メール対策としてのSPF・DKIM認証設定などはしっかりされていますが、送信元メールアドレスがいただけないので、カスタムドメインを当てていこうと思います。</p>



<p>今回、所有するドメインがエックスサーバーのサーバーにあたっているという前提で進めていきます。カスタムドメインを当てる場合、レンタルサーバーや自社サーバー側のDNSレコードを編集する必要がありますが、海外有名どこのレジストラでの設定方法はいくつかMS Learnに載っていましたが・・・。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference-link">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/add-custom-verified-domains" title="カスタム検証済みメール ドメインを追加する - An Azure Communication Services article" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">カスタム検証済みメール ドメインを追加する - An Azure Communication Services article</div><div class="blogcard-snippet external-blogcard-snippet">この記事では、Azure Communication Services でカスタム検証済み電子メール ドメインを追加する方法について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/add-custom-verified-domains" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<p>エックスサーバーに関してはもちろん載っていませんでしたので、ハマりポイントなんかも記述していきます。</p>



<a rel="nofollow noopener" target="_blank" data-atag-id="13" data-post-id="5084" href="https://px.a8.net/svt/ejp?a8mat=3H7XC1+G1IHKI+CO4+6DC69">
<img decoding="async" border="0" width="336" height="280" alt="" src="https://www20.a8.net/svt/bgt?aid=210321793970&wid=001&eno=01&mid=s00000001642001070000&mc=1"></a>
<img decoding="async" border="0" width="1" height="1" src="https://www17.a8.net/0.gif?a8mat=3H7XC1+G1IHKI+CO4+6DC69" alt="">



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc9">ACS Emailにカスタムドメインの追加＆ドメイン所有権の検証</span></h3>



<p>そいでは初めにAzureポータルに行き、Emailリソースを開きます。[設定]－「ドメインをプロビジョニングする」から、「ドメインの追加」－「カスタムドメイン」を今度は選択します。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163454.png"><img decoding="async" width="803" height="493" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163454.png" alt="" class="wp-image-5106" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163454.png 803w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163454-300x184.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163454-768x472.png 768w" sizes="(max-width: 803px) 100vw, 803px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で自身の所有するドメインを入力し、「確認する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163534.png"><img decoding="async" width="583" height="823" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163534.png" alt="" class="wp-image-5107" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163534.png 583w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163534-213x300.png 213w" sizes="(max-width: 583px) 100vw, 583px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「追加」をクリック。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163550.png"><img decoding="async" width="589" height="822" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163550.png" alt="" class="wp-image-5108" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163550.png 589w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163550-215x300.png 215w" sizes="(max-width: 589px) 100vw, 589px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ドメインの追加ができると画面が変化します。「ドメインの確認」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163723.png"><img decoding="async" width="590" height="826" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163723.png" alt="" class="wp-image-5109" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163723.png 590w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163723-214x300.png 214w" sizes="(max-width: 590px) 100vw, 590px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>追加したカスタムドメインの所有権を有しているのかをチェックする必要があります。以下の画面の「TXT値」をコピーしましょう。そしたらこの画面はこの後使うのでそのまま放置で。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163809.png"><img decoding="async" width="589" height="825" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163809.png" alt="" class="wp-image-5110" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163809.png 589w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163809-214x300.png 214w" sizes="(max-width: 589px) 100vw, 589px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>この後はエックスサーバー側で作業します。エックスサーバーのサーバーパネルにサインインし、対象ドメインの「DNSレコード設定」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946.png"><img decoding="async" width="1024" height="572" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946-1024x572.png" alt="" class="wp-image-5111" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946-1024x572.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946-300x167.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946-768x429.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-163946.png 1324w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で、「DNSレコード追加」タブをクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164011.png"><img decoding="async" width="1024" height="512" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164011-1024x512.png" alt="" class="wp-image-5112" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164011-1024x512.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164011-300x150.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164011-768x384.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164011.png 1323w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>DNSレコード編集画面になるので、種別に「TXT」、内容にAzureポータルでコピーした値を設定し、「確認画面へ進む」をクリックします。ホスト名はサブドメインなどあればよしなに。TTLの値はおそらくデフォルトで3600で一致してると思いますが違ったらAzure側に合わせましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164049.png"><img decoding="async" width="1024" height="614" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164049-1024x614.png" alt="" class="wp-image-5113" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164049-1024x614.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164049-300x180.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164049-768x460.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164049.png 1328w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>確認画面で「追加する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164108.png"><img decoding="async" width="1024" height="598" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164108-1024x598.png" alt="" class="wp-image-5114" style="object-fit:cover" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164108-1024x598.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164108-300x175.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164108-768x449.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164108.png 1327w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これでDNSレコードの追加がうまくいきました。Azureポータルに戻りましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164124.png"><img decoding="async" width="1024" height="502" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164124-1024x502.png" alt="" class="wp-image-5115" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164124-1024x502.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164124-300x147.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164124-768x376.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164124.png 1326w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>先ほどの画面で、「次へ」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164156.png"><img decoding="async" width="589" height="824" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164156.png" alt="" class="wp-image-5116" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164156.png 589w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164156-214x300.png 214w" sizes="(max-width: 589px) 100vw, 589px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>この画面で「完了」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164213.png"><img decoding="async" width="588" height="825" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164213.png" alt="" class="wp-image-5117" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164213.png 588w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164213-214x300.png 214w" sizes="(max-width: 588px) 100vw, 588px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ドメイン所有権の検証が始まります。「閉じる」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164232.png"><img decoding="async" width="589" height="827" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164232.png" alt="" class="wp-image-5118" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164232.png 589w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164232-214x300.png 214w" sizes="(max-width: 589px) 100vw, 589px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Domain statusが「検証済み」になりカスタムドメインの所有権の検証に成功しました。検証後は、先ほどエックスサーバー側に追加したTXTレコードは削除できます。次に、SPF statusの「構成」をクリックして次のステップを行っていきましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164307.png"><img decoding="async" width="1024" height="389" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164307-1024x389.png" alt="" class="wp-image-5119" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164307-1024x389.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164307-300x114.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164307-768x292.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164307.png 1530w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc10">SPF・DKIＭ認証レコードをエックスサーバーに設定</span></h3>



<p>次にAzureポータル側で表示されたSPF、DKIMの値をエックスサーバー側に設定していきます。ちなみにエックスサーバーではSPFレコードがすでに登録済みのため、以下のレコードをそのまま追加してはうまくいきません。</p>



<p>以下の赤枠で囲んだ部分、「<span class="marker-under-blue">include:spf.protection.outlook.com</span>」をコピーしておきます。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164408.png"><img decoding="async" width="587" height="826" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164408.png" alt="" class="wp-image-5120" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164408.png 587w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164408-213x300.png 213w" sizes="(max-width: 587px) 100vw, 587px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>DKIMレコードはそのままコピーして使います。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164520.png"><img decoding="async" width="588" height="825" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164520.png" alt="" class="wp-image-5121" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164520.png 588w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164520-214x300.png 214w" sizes="(max-width: 588px) 100vw, 588px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>エックスサーバーのサーバーパネルからDNSレコード設定を開き、DNSレコード一覧をクリックします。すでに「v=spf1～」で始まるTXTレコードが登録済みだと思いますので、「変更」をクリックすると以下の画面に遷移します。ここの内容にAzureポータルでコピーしたSPFレコードの値を既存の内容を保持したまま追加します。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165009.png"><img decoding="async" width="1024" height="614" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165009-1024x614.png" alt="" class="wp-image-5126" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165009-1024x614.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165009-300x180.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165009-768x460.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165009.png 1331w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box alert-box">
<p>実はここにハマリポイントがありました。エックスサーバー側のDNS設定の最後は「~all」で終わっているんで、間にAzure側が指定している値を入れただけなんですが、実はこれだとこの後のAzure側での検証が失敗します。<s>なぜこんなこと起こるのかよくわかってないのですが</s>「~all」を「-all」（ハイフン + all）に変えたらうまく検証が通りました。じゃぁ変えられてしまったエックスサーバー側で大丈夫かは未確認ですが、今のところ不都合は見つかってません。</p>



<p>ちなみに複数のSPFレコードを設定するときに使える構文「+」も検証NGになります。他のSPFレコードが使う分にはいいですが、「+include:spf.protection.outlook.com」としてしまうと検証NGになるのでご注意を。サポートに問い合わせました。ACSの検証プロセス側の制限によりエラーとなっているそうだ…（2024年3月時点）</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170754.png"><img decoding="async" width="781" height="412" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170754.png" alt="" class="wp-image-5134" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170754.png 781w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170754-300x158.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170754-768x405.png 768w" sizes="(max-width: 781px) 100vw, 781px" /></a></figure>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ちなみに上記に関してよくわからなかったのでCopilotに聞いてみました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>SPFレコードの「~all」と「-all」は、どちらもSPF認証が失敗した場合の処理方法を指定するものですが、その扱い方に違いがあります。</p>



<p>「-all」はハードフェイル（Hard Fail）を意味し、SPFレコードにリストされていないIPアドレスからのメールは完全に拒否されるべきだと示します。つまり、そのメールは配信されず、スパムとして扱われるか、削除される可能性があります。<br>「~all」はソフトフェイル（Soft Fail）を意味し、SPFレコードにリストされていないIPアドレスからのメールは疑わしいものとしてマークされるべきだと示しますが、それでも配信はされることが多いです。<br>最近では、多くのメールサービスプロバイダーは「-all」と「~all」を同じように扱い、どちらもSPF認証の「NOT PASS」を意味するとしています。しかし、実際のメール処理においては、プロバイダーによって異なる扱いをすることがあります。そのため、ドメインの評判を守りつつ、メールの配信性を確保するためには、DMARCポリシーと合わせて適切に設定することが重要です</p>
</blockquote>



<p>要するに「-all」の方がより厳しめということですかね。無知ですみません。</p>



<div style="height:32px" aria-hidden="true" class="wp-block-spacer"></div>



<p>TXTレコードを編集出来たら「変更する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1.png"><img decoding="async" width="1024" height="584" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1-1024x584.png" alt="" class="wp-image-5151" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1-1024x584.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1-300x171.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1-768x438.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170815-1.png 1326w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>SPFレコードが登録できました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165040.png"><img decoding="async" width="1024" height="493" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165040-1024x493.png" alt="" class="wp-image-5128" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165040-1024x493.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165040-300x144.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165040-768x370.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165040.png 1330w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>今度はDKIMレコードを追加していきます。ホスト名をAzure指定の「CNAMEレコード名」、種別は「CNAME」を選択し、内容にコピーした「DKIM値」を入力します。入力後、「確認画面へ進む」をクリック。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164636.png"><img decoding="async" width="1024" height="618" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164636-1024x618.png" alt="" class="wp-image-5122" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164636-1024x618.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164636-300x181.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164636-768x464.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164636.png 1315w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>確認画面で「追加する」でDKIMレコードの追加が完了です。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164654.png"><img decoding="async" width="1024" height="602" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164654-1024x602.png" alt="" class="wp-image-5123" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164654-1024x602.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164654-300x176.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164654-768x452.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164654.png 1328w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>同様の手順でDKIM2レコードの追加も行いましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755.png"><img decoding="async" width="1024" height="581" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755-1024x581.png" alt="" class="wp-image-5124" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755-1024x581.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755-300x170.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755-768x436.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-164755.png 1330w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>サブドメインの場合は若干ホスト名の入力を変更する必要ありますが、その辺もLearnに記載されています。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-none">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/add-custom-verified-domains#configure-sender-authentication-for-custom-domain" title="カスタム検証済みメール ドメインを追加する - An Azure Communication Services article" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">カスタム検証済みメール ドメインを追加する - An Azure Communication Services article</div><div class="blogcard-snippet external-blogcard-snippet">この記事では、Azure Communication Services でカスタム検証済み電子メール ドメインを追加する方法について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/add-custom-verified-domains#configure-sender-authentication-for-custom-domain" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>今度はAzureポータル側に戻ります。以下の画面で「Next」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165117.png"><img decoding="async" width="586" height="824" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165117.png" alt="" class="wp-image-5129" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165117.png 586w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165117-213x300.png 213w" sizes="(max-width: 586px) 100vw, 586px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で「Done」をクリックするとSPF、DKIMの検証が開始されます。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165137.png"><img decoding="async" width="587" height="826" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165137.png" alt="" class="wp-image-5130" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165137.png 587w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165137-213x300.png 213w" sizes="(max-width: 587px) 100vw, 587px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「Close」をクリックして、しばし待たれよ。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165155.png"><img decoding="async" width="587" height="823" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165155.png" alt="" class="wp-image-5131" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165155.png 587w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165155-214x300.png 214w" sizes="(max-width: 587px) 100vw, 587px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>DKIMは速攻で検証OKになります。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165506.png"><img decoding="async" width="1024" height="372" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165506-1024x372.png" alt="" class="wp-image-5132" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165506-1024x372.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165506-300x109.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165506-768x279.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-165506.png 1528w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>前述の「~all」のまま進めると、以下の画面のようにエラーになってしまします。「-all」にエックスサーバー側を変更後、もう一度検証を実行しましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170543.png"><img decoding="async" width="1024" height="388" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170543-1024x388.png" alt="" class="wp-image-5133" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170543-1024x388.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170543-300x114.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170543-768x291.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-170543.png 1530w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下のようにすべてオールグリーンになればカスタムドメインの追加は完了です。次に送信元メールアドレスを追加するので、ドメイン名をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171508.png"><img decoding="async" width="1024" height="377" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171508-1024x377.png" alt="" class="wp-image-5138" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171508-1024x377.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171508-300x110.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171508-768x283.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171508.png 1530w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc11">カスタムドメインの送信元メールアドレス追加</span></h3>



<p>カスタムドメインの送信元メールアドレスを追加します。「MailFrom addresses」を選択し、「Add」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542.png"><img decoding="async" width="1024" height="580" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542-1024x580.png" alt="" class="wp-image-5139" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542-1024x580.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542-300x170.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542-768x435.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171542.png 1125w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で、表示名と送信元アドレスを入力します。「Save」をクリックし、設定を保存しましょう。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171750.png"><img decoding="async" width="588" height="823" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171750.png" alt="" class="wp-image-5140" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171750.png 588w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171750-214x300.png 214w" sizes="(max-width: 588px) 100vw, 588px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ばっちり送信元メールアドレスが追加されました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171813.png"><img decoding="async" width="1024" height="539" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171813-1024x539.png" alt="" class="wp-image-5141" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171813-1024x539.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171813-300x158.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171813-768x405.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-171813.png 1173w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc12">カスタムドメインのAzure Communication Servicesへの接続</span></h3>



<p>最後の手順ですが、追加したカスタムドメインをACSに接続する必要があります。Azure Communication Servicesリソースにアクセスし、[メール]の「ドメイン」をクリックします。ACSに接続できるのは１つのメールサービスだけなので、初めに接続したAzureドメインを一度切断しましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172048.png"><img decoding="async" width="1024" height="397" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172048-1024x397.png" alt="" class="wp-image-5142" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172048-1024x397.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172048-300x116.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172048-768x298.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172048-1536x596.png 1536w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172048.png 1538w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「ドメインを接続する」をクリックし、追加したカスタムドメインを入力します。その後、「接続」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172127.png"><img decoding="async" width="1024" height="551" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172127-1024x551.png" alt="" class="wp-image-5143" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172127-1024x551.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172127-300x162.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172127-768x414.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172127.png 1530w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「接続済み」となれば無事ACSとカスタムドメインが関連付けられました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172156.png"><img decoding="async" width="1024" height="375" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172156-1024x375.png" alt="" class="wp-image-5144" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172156-1024x375.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172156-300x110.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172156-768x282.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172156.png 1530w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc13">カスタムドメインを設定後のメール送信</span></h3>



<p>それでは、ソースコードの送信元メールアドレスを変更して、もう一度アプリを実行してみます。</p>



<p>以下のようにしっかりGmailにも迷惑メールとならずにメールが届いていることが確認できます。すごくいい！</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172320.png"><img decoding="async" width="1024" height="339" src="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172320-1024x339.png" alt="" class="wp-image-5145" srcset="https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172320-1024x339.png 1024w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172320-300x99.png 300w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172320-768x255.png 768w, https://star-moon-sun.com/wp-content/uploads/2024/01/スクリーンショット-2024-01-27-172320.png 1475w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc14">さいごに</span></h2>



<p>Azure Communication Servicesを利用することで、なんとも簡単にメール送信を行うことができました。カスタムドメインを使うのは若干手間がかかりますが、それでも高コスパなので使わない手はないですね。今回は触れていませんが、メトリックなどを活用してメールの到達確認もできるようです。</p>



<p>Azure Functionsでの実装ですが、SendGridでは出力バインドでメール送信できていたので、ACSは現時点で出力バインドがないので、そこの変換がちょっと手間かなという感じです。カスタムバインドって言う手もあるようですね。</p>



<p>まぁ、出力バインドでSendGrid出力バインドをQueue出力バインドにリプレースしつつ、1本QueueトリガーFunction噛ませてメール送信を集約してそこで行うように検討しようかなぁ・・・。</p>



<p>以上、Azure Communication Servicesを利用したメール送信でした。</p>



<p>最後までご覧いただきありがとうございました。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5084"
					data-ulike-nonce="d1b3fd8c46"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5084"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2024/02/03/work/azure-communication-services-email/">Azure Communication Servicesを利用してメール送信してみる</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2024/02/03/work/azure-communication-services-email/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Key Vaultを利用したシークレットの管理</title>
		<link>https://star-moon-sun.com/2023/10/16/work/using-keyvault/</link>
					<comments>https://star-moon-sun.com/2023/10/16/work/using-keyvault/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sun, 15 Oct 2023 22:57:01 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=5005</guid>

					<description><![CDATA[<p>どーもです。本日は技術系ネタです。 最近ガンプラ作ってないので作ってから投稿したいと思いますが、いかんせんやりたいことありすぎて時間が・・・。最近はバイクばっかですね。 本日は、最近の様々なセキュリティを高める潮流に合わ [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2023/10/16/work/using-keyvault/">Azure Key Vaultを利用したシークレットの管理</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>どーもです。本日は技術系ネタです。</p>



<p>最近ガンプラ作ってないので作ってから投稿したいと思いますが、いかんせんやりたいことありすぎて時間が・・・。最近はバイクばっかですね。</p>



<p>本日は、最近の様々なセキュリティを高める潮流に合わせちょこちょことパスワードとかをより安全な場所に保管していくように意識を変えていければなぁとAzure Key Vaultに触れてみたいと思います。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Azure Key Vaultとは？</a></li><li><a href="#toc2" tabindex="0">本日のゴール</a></li><li><a href="#toc3" tabindex="0">Azure Key Vaultからのシークレット取得手順</a><ol><li><a href="#toc4" tabindex="0">Azure Key Vaultリソースの作成</a></li><li><a href="#toc5" tabindex="0">KeyVaultコンテナーへのユーザーアクセス権の設定</a></li><li><a href="#toc6" tabindex="0">Azure FunctionsマネージドID発行とKeyVaultコンテナーへのアクセス権の設定</a></li><li><a href="#toc7" tabindex="0">Azure Key Vaultへのシークレットの保存</a></li><li><a href="#toc8" tabindex="0">Azure FunctionsにKey Vaultシークレット取得の追加</a></li></ol></li><li><a href="#toc9" tabindex="0">Azure FunctionsからKey Vaultのシークレット取得を実行</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Azure Key Vaultとは？</span></h2>



<p>一言でいうと、「シークレットや証明書を安全に保管しておくAzureが提供するクラウドサービス」です。Vault（ボールト）とは金庫とか保管庫のことで、要するに貴重品入れる金庫ということですね。</p>



<p>この金庫に重要なシークレットなんかを保管しておけば、情シスやセキュリティ担当者にしてみれば、暗号化された安全な環境で機密情報の一元管理や監視ができ、開発者にとっては、アプリに機密情報を含める必要がなくなったり証明書の管理や更新を自動化できたりと開発に注力できるようになります。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" target="_blank" href="https://azure.microsoft.com/ja-jp/products/key-vault" title="Key Vault | Microsoft Azure" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fazure.microsoft.com%2Fja-jp%2Fproducts%2Fkey-vault?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Key Vault | Microsoft Azure</div><div class="blogcard-snippet external-blogcard-snippet">Microsoft Azure Key Vault を使用すると、クラウド アプリおよびサービスが使用する暗号化キーおよびその他の秘密情報をセキュリティ保護できます。今すぐお試しください。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://azure.microsoft.com/ja-jp/products/key-vault" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">azure.microsoft.com</div></div></div></div></a>
</div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">本日のゴール</span></h2>



<p>Azure Functions内で利用するアカウントID、パスワードをAzure Key Vault内に保持し取得することで、Azure Functions内からの機密情報の排除シナリオを実装してみます。</p>



<p>本当は、接続文字列とかアプリシークレットとかだと思うのですが、まぁそこは読み替えていければKey Vault内に保管するものは何でもOKって感じです。</p>



<p>さらに、おまけとして、Azure Key Vaultの価格が「秘密情報の操作」として4.485円／10,000トランザクション(2023年10月現在)かかるので、これをバックエンドAPIとの連携で利用してWEBサービスの課金が跳ね上がらないか？の検証、課金タイミングもちょい気になったので・・・。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-check">

<a rel="noopener" target="_blank" href="https://azure.microsoft.com/ja-jp/pricing/details/key-vault/" title="価格 - Key Vault |　Microsoft Azure" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/3ef3529ae9e4243b3efc1daf8225e262." alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">価格 - Key Vault |　Microsoft Azure</div><div class="blogcard-snippet external-blogcard-snippet">Azure Key Vault の価格を表示します。クラウド アプリおよびサービスで使用される暗号化キーおよびその他の秘密情報をセキュリティで保護します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://azure.microsoft.com/ja-jp/pricing/details/key-vault/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">azure.microsoft.com</div></div></div></div></a>
</div>



<p>ってことで、</p>



<ul class="wp-block-list">
<li>Azure Functionsコード内部からAzure Key Vault SDKでアクセスし、シークレットを取得する。</li>



<li>Azure Functionsの環境変数にKey Vault参照としてシークレットを取得する。</li>
</ul>



<p>この2パターンで呼び出し回数の変化を見てみます。</p>



<p>まぁ、自明かもしれませんが念のため。あんまりはっきりした情報が見つからなかったのもあるので。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">Azure Key Vaultからのシークレット取得手順</span></h2>



<h3 class="wp-block-heading"><span id="toc4">Azure Key Vaultリソースの作成</span></h3>



<p>それでは早速ですが、Key Vaultリソースを作成していきます。</p>



<p>リソース追加から、「Key Vault」を選択します。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093152.png"><img decoding="async" width="896" height="742" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093152.png" alt="" class="wp-image-5006" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093152.png 896w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093152-300x248.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093152-768x636.png 768w" sizes="(max-width: 896px) 100vw, 896px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「作成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093245.png"><img decoding="async" width="856" height="590" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093245.png" alt="" class="wp-image-5007" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093245.png 856w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093245-300x207.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093245-768x529.png 768w" sizes="(max-width: 856px) 100vw, 856px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面はよしなに。重要なのはKey Vault名と価格レベルくらいかな。Key Vault名はURLに組み込まれるので、グローバルで一意である必要あります。入力できたら「次へ」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093357.png"><img decoding="async" width="853" height="1024" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093357-853x1024.png" alt="" class="wp-image-5008" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093357-853x1024.png 853w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093357-250x300.png 250w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093357-768x922.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093357.png 944w" sizes="(max-width: 853px) 100vw, 853px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>アクセス構成ではデフォの「Azureロールベースのアクセス制御（推奨）」でいきましょう。ネットワーク、タグもデフォでいいので「確認および作成」をクリック。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093437.png"><img decoding="async" width="721" height="881" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093437.png" alt="" class="wp-image-5009" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093437.png 721w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093437-246x300.png 246w" sizes="(max-width: 721px) 100vw, 721px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>確認画面で「作成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093733.png"><img decoding="async" width="748" height="874" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093733.png" alt="" class="wp-image-5010" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093733.png 748w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093733-257x300.png 257w" sizes="(max-width: 748px) 100vw, 748px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>デプロイが完了しました。早速リソースに移動しまそ。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093840.png"><img decoding="async" width="870" height="598" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093840.png" alt="" class="wp-image-5011" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093840.png 870w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093840-300x206.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-093840-768x528.png 768w" sizes="(max-width: 870px) 100vw, 870px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">KeyVaultコンテナーへのユーザーアクセス権の設定</span></h3>



<p>KeyVaultのアクセス制御はRBACで行います。たとえ、リソースを作成できても、適切な権限がなければ「この操作は RBAC で許可されていません。」となってシークレットなどを設定することができません。</p>



<p>ですので、まずはユーザーにアクセス許可を設定してみます。</p>



<p>KeyVaultリソースの「アクセス制御（IAM）」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094213.png"><img decoding="async" width="1024" height="861" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094213-1024x861.png" alt="" class="wp-image-5012" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094213-1024x861.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094213-300x252.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094213-768x646.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094213.png 1042w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ここでは「ロール割り当ての追加」をクリックします。（RBACの制御はお好みの方法でどうぞ。）</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094232.png"><img decoding="async" width="616" height="881" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094232.png" alt="" class="wp-image-5013" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094232.png 616w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094232-210x300.png 210w" sizes="(max-width: 616px) 100vw, 616px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ロール割り当ての追加では、「キーコンテナー管理者」を選択してみます。ロールはご自身の環境に合わせて設定ください。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094338.png"><img decoding="async" width="719" height="877" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094338.png" alt="" class="wp-image-5014" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094338.png 719w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-094338-246x300.png 246w" sizes="(max-width: 719px) 100vw, 719px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/key-vault/general/rbac-guide?tabs=azure-cli" title="Azure RBAC を使用してAzureキー コンテナーにアクセスするためのアクセス許可をアプリケーションに付与する" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Azure RBAC を使用してAzureキー コンテナーにアクセスするためのアクセス許可をアプリケーションに付与する</div><div class="blogcard-snippet external-blogcard-snippet">ロールベースのアクセス制御を使用して、キー、シークレット、証明書へのアクセスAzure提供する方法について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/key-vault/general/rbac-guide?tabs=azure-cli" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次の画面で、アクセスの割り当て先に「ユーザー、グループ、またはサービスプリンシパル」を選択し、「メンバーを選択する」をクリックします。右のブレードで対象のユーザーを選択し、「次へ」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095232.png"><img decoding="async" width="1024" height="558" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095232-1024x558.png" alt="" class="wp-image-5015" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095232-1024x558.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095232-300x163.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095232-768x419.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095232-1536x837.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095232.png 1545w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>確認画面で「レビューと割り当て」をクリックすればユーザーへのアクセス権設定は完了です。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095306.png"><img decoding="async" width="603" height="874" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095306.png" alt="" class="wp-image-5016" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095306.png 603w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-095306-207x300.png 207w" sizes="(max-width: 603px) 100vw, 603px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">Azure FunctionsマネージドID発行とKeyVaultコンテナーへのアクセス権の設定</span></h3>



<p>Key VaultにアクセスするにはAzure Functionsも認証される必要があります。これには前回投稿した便利機能「マネージドID」を利用します。これでAzure Functionsが認証されます。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-none">

<a target="_self" href="https://star-moon-sun.com/2023/09/18/work/sqlaccess-using-managedid/" title="マネージドIDを利用したAzure SQL Databaseへのアクセスを実装する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">マネージドIDを利用したAzure SQL Databaseへのアクセスを実装する</div><div class="blogcard-snippet internal-blogcard-snippet">こんばんは。まだまだ暑い日が続いていますが、皆様いかがお過ごしでしょうか？そういえば、Azure Active Directory、今後は「Microsoft Entra ID」と名称が変更されましたね。Azure ADとかAADと言って長...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.09.18</div></div></div></div></a>
</div>



<p>そして、認可はRBACで設定します。</p>



<p>それでは「Azure FunctionsへのマネージドID発行」→「マネージドIDへのアクセス権設定」の手順を実施していきましょう。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>まずはAzure Functionsリソースにアクセスします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100613.png"><img decoding="async" width="776" height="875" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100613.png" alt="" class="wp-image-5017" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100613.png 776w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100613-266x300.png 266w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100613-768x866.png 768w" sizes="(max-width: 776px) 100vw, 776px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次に設定の「ID」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100647.png"><img decoding="async" width="779" height="869" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100647.png" alt="" class="wp-image-5018" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100647.png 779w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100647-269x300.png 269w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100647-768x857.png 768w" sizes="(max-width: 779px) 100vw, 779px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>したらば、システム割り当てマネージドIDの画面になるので、スイッチを「オン」に切り替え、「保存」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100658.png"><img decoding="async" width="728" height="671" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100658.png" alt="" class="wp-image-5019" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100658.png 728w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100658-300x277.png 300w" sizes="(max-width: 728px) 100vw, 728px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>システム割り当てマネージドID有効化の確認が出ますので「はい」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100705.png"><img decoding="async" width="834" height="433" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100705.png" alt="" class="wp-image-5020" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100705.png 834w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100705-300x156.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100705-768x399.png 768w" sizes="(max-width: 834px) 100vw, 834px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>簡単にマネージドIDが有効化されましたね。そしたら、次にAzure FunctionsにAzure Key Vaultリソースへのアクセス権を設定していきます。ひとまず1つ目のAzure FunctionsはマネージドID有効化した画面にある「Azureロールの割り当て」から行ってみましょう。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100740.png"><img decoding="async" width="849" height="601" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100740.png" alt="" class="wp-image-5021" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100740.png 849w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100740-300x212.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-100740-768x544.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面になるので、「＋ロール割り当ての追加」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101147.png"><img decoding="async" width="1024" height="510" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101147-1024x510.png" alt="" class="wp-image-5023" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101147-1024x510.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101147-300x149.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101147-768x383.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101147.png 1070w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>右のブレードでスコープに「Key Vault」、サブスクリプション、対象のKeyVaultリソースを指定し、役割に「キーコーンテナーシークレットユーザー」を指定します。このロールを設定すれば対象KeyVaultリソースに設定されているシークレットの値を読み取ることができると思います。最後に「保存」をクリックしましょう。特に一覧にも反映されず設定完了してました。プレビューだからかなｗｗｗ</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101316.png"><img decoding="async" width="1024" height="556" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101316-1024x556.png" alt="" class="wp-image-5024" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101316-1024x556.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101316-300x163.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101316-768x417.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101316-1536x834.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101316.png 1545w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Azure Functions、もう一つあるので、そっちはKey Vaultリソースの方からアクセス権設定していってみますね。お好きな手順でいいと思います。マネージドIDの有効化を忘れずに。</p>



<p>Azure Key Vaultリソースに移動し、「アクセス制御（IAM）」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101031.png"><img decoding="async" width="889" height="568" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101031.png" alt="" class="wp-image-5022" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101031.png 889w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101031-300x192.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101031-768x491.png 768w" sizes="(max-width: 889px) 100vw, 889px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で、「ロースの割り当ての追加」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101440.png"><img decoding="async" width="1024" height="589" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101440-1024x589.png" alt="" class="wp-image-5051" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101440-1024x589.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101440-300x173.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101440-768x442.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101440-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101440.png 1253w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ロール一覧がでますので、「キーコンテナーシークレットユーザー」を選択し、「次へ」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101513.png"><img decoding="async" width="1024" height="777" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101513-1024x777.png" alt="" class="wp-image-5026" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101513-1024x777.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101513-300x228.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101513-768x582.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101513.png 1155w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>アクセスの割り当て先を「マネージドID」にします。そして、「メンバーを選択する」をクリックすると、右ブレードにマネージドIDを有効化したAzure Functionsが表示されるので対象となるAzure Functionsリソースを選択してください。「次へ」をクリックします。</p>



<p>Azure Functionsが表示されない場合は、もう一度マネージドIDを有効化したか確認しましょう。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101601.png"><img decoding="async" width="1024" height="554" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101601-1024x554.png" alt="" class="wp-image-5027" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101601-1024x554.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101601-300x162.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101601-768x416.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101601-1536x832.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101601.png 1546w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>確認画面で「レビューと割り当て」をクリックすれば完了です。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101616.png"><img decoding="async" width="1024" height="866" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101616-1024x866.png" alt="" class="wp-image-5028" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101616-1024x866.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101616-300x254.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101616-768x649.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101616.png 1042w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc7">Azure Key Vaultへのシークレットの保存</span></h3>



<p>やっとこさAzure Key Vaultへのシークレットの保存になります。</p>



<p>Key Vaultリソースにアクセスし、[オブジェクト]－「シークレット」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101721.png"><img decoding="async" width="944" height="877" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101721.png" alt="" class="wp-image-5029" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101721.png 944w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101721-300x279.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101721-768x713.png 768w" sizes="(max-width: 944px) 100vw, 944px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面を表示します。「＋生成／インポート」をクリックします。</p>



<p>「この操作は RBAC で許可されていません。」警告が表示される場合はもう一度ユーザーのKeyVaultリソースへのアクセス制御（IAM）を確認しましょう。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101738.png"><img decoding="async" width="984" height="390" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101738.png" alt="" class="wp-image-5030" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101738.png 984w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101738-300x119.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101738-768x304.png 768w" sizes="(max-width: 984px) 100vw, 984px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>シークレットの作成画面を表示するので、「名前」にシークレット名を、「シークレット値」にその値、つまり、機密情報を入力します。あとはデフォルトでOK。「作成」をクリックします。</p>



<p>ここでは、名前に「accountid」、値に「hoge」という値を設定しました。例がややこしいですがアプリで利用するaccountidという変数へセットする値がhogeです。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101825.png"><img decoding="async" width="755" height="875" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101825.png" alt="" class="wp-image-5031" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101825.png 755w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101825-259x300.png 259w" sizes="(max-width: 755px) 100vw, 755px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>なので、もう1つ追加した例です。</p>



<p>「password」というキー（シークレットの名前）で「password12345」という値を取得できるようにシークレットを追加しました。こちらも「作成」で保存します。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101913.png"><img decoding="async" width="820" height="876" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101913.png" alt="" class="wp-image-5032" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101913.png 820w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101913-281x300.png 281w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-101913-768x820.png 768w" sizes="(max-width: 820px) 100vw, 820px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>二つのシークレットが登録されたのが確認できます。したらば、ここで登録した設定をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111051.png"><img decoding="async" width="1024" height="462" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111051-1024x462.png" alt="" class="wp-image-5033" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111051-1024x462.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111051-300x135.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111051-768x347.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111051.png 1220w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面を表示します。現在のバージョンをクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111059.png"><img decoding="async" width="1024" height="405" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111059-1024x405.png" alt="" class="wp-image-5034" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111059-1024x405.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111059-300x119.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111059-768x304.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111059.png 1077w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次の画面で、「シークレット識別子」の値をコピーしましょう。<span class="marker-under-red">あとで利用します。</span></p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111108.png"><img decoding="async" width="919" height="697" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111108.png" alt="" class="wp-image-5035" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111108.png 919w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111108-300x228.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111108-768x582.png 768w" sizes="(max-width: 919px) 100vw, 919px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc8">Azure FunctionsにKey Vaultシークレット取得の追加</span></h3>



<p>最後の手順です。前の手順でKey Vaultに追加したシークレットをAzure Functionsから取得できるようにしましょう。といっても、今回はAzure Functionsリソースを2つ作成していますが、この手順を行うのは環境変数、つまり、アプリケーション設定にKey Vaultへの参照を保持する場合のみです。というか、Azure Functionsで利用するならこれ一択といっても言い過ぎではないかもしれません。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>対象のAzure Functionsリソースにアクセスします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111136.png"><img decoding="async" width="744" height="767" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111136.png" alt="" class="wp-image-5036" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111136.png 744w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111136-291x300.png 291w" sizes="(max-width: 744px) 100vw, 744px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[設定]の「構成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111154.png"><img decoding="async" width="775" height="660" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111154.png" alt="" class="wp-image-5037" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111154.png 775w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111154-300x255.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111154-768x654.png 768w" sizes="(max-width: 775px) 100vw, 775px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>アプリケーション設定の画面で「＋新しいアプリケーション設定」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111210.png"><img decoding="async" width="991" height="720" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111210.png" alt="" class="wp-image-5038" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111210.png 991w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111210-300x218.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111210-768x558.png 768w" sizes="(max-width: 991px) 100vw, 991px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>アプリケーション設定の追加／編集ブレードが表示されるので、名前にKeyVaultに追加したシークレットの「名前」、値には前の手順の最後でコピーした値を「@Microsoft.KeyVault(SecretUri=シークレット識別子)」といった形式で入力します。ちなみに「@Microsoft.KeyVault(VaultName=KeyVaultリソース名;SecretName=シークレットの名前)」でもOKです。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111702.png"><img decoding="async" width="1024" height="555" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111702-1024x555.png" alt="" class="wp-image-5039" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111702-1024x555.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111702-300x163.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111702-768x416.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111702-1536x833.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111702.png 1540w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference-link">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/app-service/app-service-key-vault-references?tabs=azure-cli#source-app-settings-from-key-vault" title="Key Vault参照をアプリ設定として使用する - Azure App Service" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Key Vault参照をアプリ設定として使用する - Azure App Service</div><div class="blogcard-snippet external-blogcard-snippet">Azure Key Vault参照を使用するようにAzure App ServiceとAzure Functionsを設定する方法について説明します。 Key Vaultシークレットをアプリケーション コードで使用できるようにします。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/app-service/app-service-key-vault-references?tabs=azure-cli#source-app-settings-from-key-vault" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>アプリケーション設定を追加したら「保存」をクリックします。追加した設定のソースは「App Service」となっていますが・・・</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111800.png"><img decoding="async" width="1024" height="555" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111800-1024x555.png" alt="" class="wp-image-5040" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111800-1024x555.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111800-300x163.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111800-768x416.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111800-1536x832.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111800.png 1541w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Key Vault内のシークレットへのアクセスがうまくいけば「キーコンテナーの参照」に変化します。やったね！以上でKey Vaultに保存したシークレットを取得する環境の準備は整いました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111825-e1697410156497.png"><img decoding="async" width="1024" height="553" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111825-e1697410156497-1024x553.png" alt="" class="wp-image-5041" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111825-e1697410156497-1024x553.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111825-e1697410156497-300x162.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111825-e1697410156497-768x415.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111825-e1697410156497-1536x829.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-111825-e1697410156497.png 1545w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc9">Azure FunctionsからKey Vaultのシークレット取得を実行</span></h2>



<p>さて、ここからはKey Vaultに設定したシークレットをAzure Functionsから利用していくんですが、冒頭でもお話しした通り、Azure Functionsは二つ用意します。</p>



<p>一つは、コード内でAzure Key Vaultライブラリ実装を利用し、Key Vaultにアクセスする方法。</p>



<p>もう一つは、前手順で行ったAzure Functionsアプリケーション設定からKeyVault参照を利用し取得する方法です。</p>



<p>コード（.NET6 分離ワーカープロセス）を以下に提示しておきます。</p>



<p>こちらはコード内にKey Vaultへのアクセスをゴリゴリ書く方法。</p>



<p>「Azure.Identity」ライブラリ、および、「Azure.Security.KeyVault.Secrets」ライブラリのインストールが必要です。お好きな方法でどうぞ。ちな、自分はNuGetパッケージマネージャーからです。</p>



<p>どーでもいいんですが、Value.Valueってブルっちゃいますよね・・・ｗ</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System.Net;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace KeyVaultUsingIncodeFunctionApp
{
    public class Function1
    {
        private readonly ILogger _logger;

        public Function1(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger&lt;Function1&gt;();
        }

        [Function("Function1")]
        public async Task&lt;HttpResponseData&gt; Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            var containerUri = "https://sei-keyvault-example.vault.azure.net";

            var client = new SecretClient(new Uri(containerUri), new DefaultAzureCredential());

            // シークレットの取得
            var accountId = await client.GetSecretAsync("accountid");
            var password = await client.GetSecretAsync("password");

            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");

            response.WriteString($"AccountId:{accountId.Value.Value},Password:{password.Value.Value}");

            return response;
        }
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>こちらは、KeyVault参照を利用する方法。</p>



<p>なんてことはない、KeyVault使っていようが普通のアプリケーション設定にアクセスするのと同様に環境変数にアクセスしているだけです。アプリケーション設定側でよしなにしてくれているのでとっても楽♪KeyVault参照すごくいい！！</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace KeyVaultUsingEnvSettingsFunctionApp
{
    public class Function1
    {
        private readonly ILogger _logger;

        public Function1(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger&lt;Function1&gt;();
        }

        [Function("Function1")]
        public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");

            response.WriteString($"AccountId:{Environment.GetEnvironmentVariable("accountid")},Password:{Environment.GetEnvironmentVariable("password")}");

            return response;
        }
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ってことでそれぞれのAzure Functionsを10回ずつ呼び出してみます。シークレットは2つ。</p>



<p>KeyVaultコード内実装のパターン。ちゃんとシークレットを取得できているのがわかります。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940.png"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940-1024x577.png" alt="" class="wp-image-5042" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940-1024x577.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940-300x169.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940-768x433.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-122940.png 1116w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>こちらはKeyVault参照のパターン。こちらもちゃんとシークレットを取得できていますね。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827.png"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827-1024x577.png" alt="" class="wp-image-5043" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827-1024x577.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827-300x169.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827-768x433.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-123827.png 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ってことでそれぞれ10回ずつ呼び出したのでメトリックを見てみます。</p>



<p>結果は、コード内実装の場合は予想通り2シークレット×10回で計20リクエストがsecretで発生しているのが確認できました。まぁ予想通りですが、KeyVaultの取得をバックエンドAPIに書いちゃこうなるわなぁ・・・。</p>



<p>で、KeyVault参照のAzure Functionsの方なんですが、ごっそりリクエスト数がなかったです。これはAzure Functions、というかAppServiceの仕組みに詳しい方に言わせれば当然の結果なのかもしれませんが、KeyVaultの値はキャッシュされ、フェッチはAzure Functions起動時や定期的に行われているそうです。（自明すぎた？）</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-none">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/app-service/app-service-key-vault-references?tabs=azure-cli#rotation" title="Key Vault参照をアプリ設定として使用する - Azure App Service" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Key Vault参照をアプリ設定として使用する - Azure App Service</div><div class="blogcard-snippet external-blogcard-snippet">Azure Key Vault参照を使用するようにAzure App ServiceとAzure Functionsを設定する方法について説明します。 Key Vaultシークレットをアプリケーション コードで使用できるようにします。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/app-service/app-service-key-vault-references?tabs=azure-cli#rotation" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<p>ってことで安心してKeyVaultをAzure Functionsに組み込む算段がつきました。それにしてもKey Vault参照うぃいねぇ～～～！</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-130725.png"><img decoding="async" width="1024" height="512" src="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-130725-1024x512.png" alt="" class="wp-image-5044" srcset="https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-130725-1024x512.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-130725-300x150.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-130725-768x384.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-130725-1536x768.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/10/スクリーンショット-2023-10-15-130725.png 1548w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5005"
					data-ulike-nonce="bad8cfbf2a"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5005"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2023/10/16/work/using-keyvault/">Azure Key Vaultを利用したシークレットの管理</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2023/10/16/work/using-keyvault/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>マネージドIDを利用したAzure SQL Databaseへのアクセスを実装する</title>
		<link>https://star-moon-sun.com/2023/09/18/work/sqlaccess-using-managedid/</link>
					<comments>https://star-moon-sun.com/2023/09/18/work/sqlaccess-using-managedid/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Mon, 18 Sep 2023 11:41:33 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=4898</guid>

					<description><![CDATA[<p>こんばんは。 まだまだ暑い日が続いていますが、皆様いかがお過ごしでしょうか？ そういえば、Azure Active Directory、今後は「Microsoft Entra ID」と名称が変更されましたね。Azure  [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2023/09/18/work/sqlaccess-using-managedid/">マネージドIDを利用したAzure SQL Databaseへのアクセスを実装する</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>こんばんは。</p>



<p>まだまだ暑い日が続いていますが、皆様いかがお過ごしでしょうか？</p>



<p>そういえば、Azure Active Directory、今後は「Microsoft Entra ID」と名称が変更されましたね。Azure ADとかAADと言って長年慣れ親しんできましたが、全然よくわからない名称に変わりちょっと寂しい気分です。それにしてもMSさん、名称変更好きですよね・・・。</p>



<p>本日は、以前アップしたマルチリージョンでのDR構成構築手順で、データベースへのアクセスに手を抜いてSQL認証を利用しており、いろいろと突っ込まれそうな感じでしたので、別建てとしてマネージドIDを利用したSQL Databaseへのアクセスにして、セキュリティを高めていきたいと思います。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">今回のゴール</a></li><li><a href="#toc2" tabindex="0">Azure SQL DatabaseにマネージドIDを利用してアクセスする手順</a><ol><li><a href="#toc3" tabindex="0">Azure FunctionsのマネージドID発行</a></li><li><a href="#toc4" tabindex="0">Azure Active Directoryグループの作成＆マネージドIDをグループに追加</a></li><li><a href="#toc5" tabindex="0">Azure SQL Databaseのユーザー＆ロール追加</a></li><li><a href="#toc6" tabindex="0">Azure Functionsの接続文字列変更</a></li><li><a href="#toc7" tabindex="0">Azure SQL Databaseへの認証を「Azure Active Directory認証のみ」に設定</a></li></ol></li><li><a href="#toc8" tabindex="0">さいごに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">今回のゴール</span></h2>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds.png"><img decoding="async" width="445" height="469" src="https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds.png" alt="" class="wp-image-4899" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds.png 445w, https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-300x316.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-285x300.png 285w" sizes="(max-width: 445px) 100vw, 445px" /></a></figure>



<p>上記図を簡単に説明すると、変更前は、SQL DatabaseへのアクセスにSQL認証を利用しています。つまり、接続文字列をAzure Functionsの環境変数やKey Vaultなどから利用することでAzure SQL Databaseとの認証を行っています。</p>



<p>「SQL認証のどこが問題なのか」というと、接続文字列内にSQL認証用のIDとパスワードを保持しているということです。接続文字列（IDとパスワード）が漏洩するだけで、Azure SQLへの不正アクセスリスクが一気に増大するわけです。</p>



<p>では、どうするか。それが今回のゴールです。<span class="marker-under-red">マネージドID</span>というメカニズムを利用し、Azure SQLへのアクセスからIDとパスワードを廃棄し、許可されたAzureリソースのみがアクセスできるようにしていくわけです。</p>



<p>手順としては以下の通りです。</p>



<div class="wp-block-cocoon-blocks-sticky-box blank-box block-box sticky st-green">
<ol class="wp-block-list">
<li>Azure FunctionsのマネージドIDを発行する。</li>



<li>Azure Active Directory（以下AAD）のグループにAzure SQL Databaseへのアクセス専用グループを追加し、発行したAzure FunctionsマネージドIDを追加する。</li>



<li>Azure SQL DatabaseにAzure SQLアクセスグループのユーザー追加＆権限設定</li>



<li>Azure Functionsの接続文字列変更</li>



<li>Azure SQL Databaseへの認証を「Azure Active Directory認証のみ」に設定</li>
</ol>
</div>



<p>上記5ステップを行っていきます。</p>



<p>ちょっと手順が多そうですが、そんなに難しい作業でもないため慣れれば5～10分程度でできるのではと思います。</p>



<p>それではレッツゴ～～～ｗ</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">Azure SQL DatabaseにマネージドIDを利用してアクセスする手順</span></h2>



<p>本投稿でこの手順を進めていく上での前提条件です。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<ul class="wp-block-list">
<li>Azure Functionsリソースが存在する。</li>



<li>Azure SQL Databaseリソースが存在する。</li>



<li>Azure FunctionsからAzure SQL Databaseへアクセスを行うことができる。</li>
</ul>
</div>



<p>Azure FunctionsとAzure SQL Databaseの連携実装に関しては以下をご参考にしていただければ、その続きから当手順を実施可能です。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference">

<a target="_self" href="https://star-moon-sun.com/2023/01/07/work/entityframework-in-azurefunctions/" title="「Azure FunctionsでもEntityFrameworkのコードファーストで開発を行いたいんじゃ！」の巻" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-800x450.png 800w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-300x169.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-768x432.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106.png 950w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">「Azure FunctionsでもEntityFrameworkのコードファーストで開発を行いたいんじゃ！」の巻</div><div class="blogcard-snippet internal-blogcard-snippet">最近Entity Frameworkを知りました。いまさらです。生きててすみません。聞いたことはありましたが、いままでのやり方に固執・執着・思考停止（※ほんと良くないですよね・・・）し、あまり気にもとめてなかったのですが、実際いろいろやって...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.01.07</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc3">Azure FunctionsのマネージドID発行</span></h3>



<p>まずは今回の主役、マネージドIDを発行していきます。</p>



<p>対象のAzure Functionsにアクセスし、[設定]の「ID」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202004.png"><img decoding="async" width="1024" height="474" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202004-1024x474.png" alt="" class="wp-image-4900" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202004-1024x474.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202004-300x139.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202004-768x356.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202004-1536x711.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202004.png 1643w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「システム割り当て済み」タブの[状態]を「オン」に変更し、「保存」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202418.png"><img decoding="async" width="1024" height="495" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202418-1024x495.png" alt="" class="wp-image-4901" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202418-1024x495.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202418-300x145.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202418-768x372.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202418.png 1110w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>マネージドID有効化の確認画面がでるので「はい」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202934.png"><img decoding="async" width="774" height="171" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202934.png" alt="" class="wp-image-4902" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202934.png 774w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202934-300x66.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-202934-768x170.png 768w" sizes="(max-width: 774px) 100vw, 774px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>システム割り当てマネージドIDの発行ができました。簡単。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205157.png"><img decoding="async" width="1024" height="594" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205157-1024x594.png" alt="" class="wp-image-4903" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205157-1024x594.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205157-300x174.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205157-768x446.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205157.png 1036w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>登録したマネージドIDはAzure Active Directoryの[エンタープライズアプリケーション]－[すべてのアプリケーション]から、「アプリケーションの種類」フィルターを「マネージドID」にすると確認することができます。この後利用するので、「名前」を覚えておいてください。基本的にはAzure Functionsのリソース名になっていると思います。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205657-1.png"><img decoding="async" width="1024" height="370" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205657-1-1024x370.png" alt="" class="wp-image-4905" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205657-1-1024x370.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205657-1-300x108.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205657-1-768x277.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-17-205657-1.png 1399w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Azure Active Directoryグループの作成＆マネージドIDをグループに追加</span></h3>



<p>続いてAADにAzure SQL Databaseへのアクセス用グループを追加していきます。AADにSQLアクセス用のグループを追加し、そのグループにAADユーザーやマネージドID、つまりアプリを登録してあげるだけで、Azure SQL Databaseへの認証をAADで一元管理することができるようになります。</p>



<p>実際はアプリ（マネージドID）がアクセスする場合と、ユーザーがアクセスする場合でグループを分けてあげると、Azure SQL側でロールを分離することができるので便利かと思います。こんなイメージです。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/aadgroup.png"><img decoding="async" width="540" height="621" src="https://star-moon-sun.com/wp-content/uploads/2023/09/aadgroup.png" alt="" class="wp-image-4907" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/aadgroup.png 540w, https://star-moon-sun.com/wp-content/uploads/2023/09/aadgroup-261x300.png 261w" sizes="(max-width: 540px) 100vw, 540px" /></a></figure>



<p>今回はSqlAccessGroupというグループを追加し、マネージドIDをそのグループに追加していきます。</p>



<p>まずはAADにアクセスし、「グループ」を選択します。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259.png"><img decoding="async" width="1024" height="571" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259-1024x571.png" alt="" class="wp-image-4908" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259-1024x571.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259-300x167.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259-768x428.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160259.png 1152w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「新しいグループ」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160718.png"><img decoding="async" width="915" height="417" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160718.png" alt="" class="wp-image-4909" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160718.png 915w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160718-300x137.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-160718-768x350.png 768w" sizes="(max-width: 915px) 100vw, 915px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面でグループの種類に「セキュリティ」を選択し、グループ名を入力します。その後、メンバーの部分の「メンバーが選択されていません」をクリックしてください。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161206.png"><img decoding="async" width="782" height="936" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161206.png" alt="" class="wp-image-4910" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161206.png 782w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161206-251x300.png 251w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161206-768x919.png 768w" sizes="(max-width: 782px) 100vw, 782px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>メンバーの追加ブレードが表示されるので、検索欄で検索を行うか、「エンタープライズアプリケーション」タブを選択し、マネージドIDを生成したAzure Functionsにチェックを付け、「選択」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161859.png"><img decoding="async" width="1024" height="812" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161859-1024x812.png" alt="" class="wp-image-4911" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161859-1024x812.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161859-300x238.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161859-768x609.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-161859.png 1128w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>画面が戻るので「作成」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162433.png"><img decoding="async" width="753" height="869" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162433.png" alt="" class="wp-image-4912" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162433.png 753w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162433-260x300.png 260w" sizes="(max-width: 753px) 100vw, 753px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>グループを追加し、Azure SQLにアクセスするAzure FunctionsのマネージドIDをグループに追加することができました。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162659.png"><img decoding="async" width="1024" height="542" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162659-1024x542.png" alt="" class="wp-image-4914" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162659-1024x542.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162659-300x159.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162659-768x407.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-162659.png 1347w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Azure SQL Databaseのユーザー＆ロール追加</span></h3>



<p>次に、Azure SQL Databaseのユーザーとして、前手順で追加したAADグループを追加していきます。また、追加したユーザーにデータベースへの読取／変更権限を設定していきます。</p>



<p>この手順ではAzure SQL Databaseにアクセスを行って実施していきます。ここではSSMSを利用していきますが、クエリーが実行できればAzureポータルからでも可能です。</p>



<p>以下のクエリーを対象のデータベースに対して実行します。（データベース単位に実行する必要があります。）</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">-- AADグループをユーザーとして追加
CREATE USER [作成したAADグループ名] FROM EXTERNAL PROVIDER;

-- AADグループにデータベースの読取／変更権限を設定
ALTER ROLE db_datareader ADD MEMBER [作成したAADグループ名];
ALTER ROLE db_datawriter ADD MEMBER [作成したAADグループ名];</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>今回のグループ名「SqlAccessGroup」を例にすると以下のクエリーを実行する感じです。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">-- AADグループをユーザーとして追加
CREATE USER [SqlAccessGroup] FROM EXTERNAL PROVIDER;

-- AADグループにデータベースの読取／変更権限を設定
ALTER ROLE db_datareader ADD MEMBER [SqlAccessGroup];
ALTER ROLE db_datawriter ADD MEMBER [SqlAccessGroup];</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>こんな感じでユーザーにAADグループ名が追加されていればOKです。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-175937.png"><img decoding="async" width="929" height="639" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-175937.png" alt="" class="wp-image-4916" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-175937.png 929w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-175937-300x206.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-175937-768x528.png 768w" sizes="(max-width: 929px) 100vw, 929px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">Azure Functionsの接続文字列変更</span></h3>



<p>もうひと踏ん張りです。現在、Azure Functionsに保持しているAzure SQL Databaseへの接続文字列をID＆パスワード保持の接続文字列から、マネージドIDアクセスの接続文字列へと変更する必要があります。</p>



<p>Azure Functionsの環境変数、Key Vaultなど、接続文字列を保持しているところを以下の例をご参考に書き換えてみてください。</p>



<figure class="wp-block-table"><table><tbody><tr><td>変更前（例：ADO.NET SQL認証）</td><td>Server=tcp:xxxxxxxx.database.windows.net,1433;Initial Catalog={your_database};Persist Security Info=False;User ID={your_userid};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;</td></tr><tr><td>変更後</td><td>Server=tcp:xxxxxxxx.database.windows.net,1433;Initial Catalog={your_database};Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Managed Identity;</td></tr></tbody></table></figure>



<p>「<span class="marker-under-blue">Authentication=Active Directory Managed Identity;</span>」がポイントかと。</p>



<p>変更したら、Azure Functionsを実行してみます。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-183443.png"><img decoding="async" width="910" height="150" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-183443.png" alt="" class="wp-image-4917" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-183443.png 910w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-183443-300x49.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-183443-768x127.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></a></figure>



<p>マネージドIDを利用して、無事Azure SQL Databaseへのアクセスが確認できました。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc7">Azure SQL Databaseへの認証を「Azure Active Directory認証のみ」に設定</span></h3>



<p>最後の手順です。マネージドIDでのアクセスを設定して、AADにSQLアクセス用グループも設定して、そのグループにAADユーザーを当てがったのであれば、そもそもSQL認証用のID、パスワードを保持している必要性はありません。ですので、認証をAAD認証のみに変更していきましょう。</p>



<p>Azure SQL Databaseのサーバーリソースにアクセスし、[設定]の「Azure Active Directory」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-184809.png"><img decoding="async" width="1024" height="592" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-184809-1024x592.png" alt="" class="wp-image-4919" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-184809-1024x592.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-184809-300x174.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-184809-768x444.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-184809-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-184809.png 1276w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「このサーバーのAzure Active Directory認証のみをサポートする」にチェックをつけ、「はい」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185140.png"><img decoding="async" width="1024" height="546" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185140-1024x546.png" alt="" class="wp-image-4920" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185140-1024x546.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185140-300x160.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185140-768x410.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185140.png 1145w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>最後に、「保存」をクリックすれば、AAD認証のみに設定したAzure SQL Databaseの完成です。</p>



<figure class="wp-block-image aligncenter size-full"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185544.png"><img decoding="async" width="948" height="573" src="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185544.png" alt="" class="wp-image-4921" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185544.png 948w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185544-300x181.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/09/スクリーンショット-2023-09-18-185544-768x464.png 768w" sizes="(max-width: 948px) 100vw, 948px" /></a></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc8">さいごに</span></h2>



<p>とっても簡単な手順でAzure FunctionsのマネージドIDを利用して、Azure SQL DatabaseへIDとパスワードを利用せずアクセスする環境が整いました。</p>



<p>Azure Functionsに限らず、マネージドIDを利用すればデータベースやストレージなど、対応する様々なリソースのセキュリティを高めてくれます。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview" title="Azure リソースのマネージド ID - Managed identities for Azure resources" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Azure リソースのマネージド ID - Managed identities for Azure resources</div><div class="blogcard-snippet external-blogcard-snippet">Azure リソースのマネージド ID の概要。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<p>マネージドID、利用しない手はないですね。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<br>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="4898"
					data-ulike-nonce="264cad2d6b"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_4898"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2023/09/18/work/sqlaccess-using-managedid/">マネージドIDを利用したAzure SQL Databaseへのアクセスを実装する</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2023/09/18/work/sqlaccess-using-managedid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AzureマルチリージョンでのDR構成を構築してみる。</title>
		<link>https://star-moon-sun.com/2023/03/27/work/azure-multiregion-dr-environment/</link>
					<comments>https://star-moon-sun.com/2023/03/27/work/azure-multiregion-dr-environment/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sun, 26 Mar 2023 21:22:18 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=4408</guid>

					<description><![CDATA[<p>ちわ。seiです。タイトルの通りです。 DR（ディザスターリカバリー、災害復旧）構成、あるいは、冗長構成とかHA（高可用性）構成っていうのもほぼ同義かと思いますが、クラウドサービスを利用するとそんな構成が、あっという間に [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2023/03/27/work/azure-multiregion-dr-environment/">AzureマルチリージョンでのDR構成を構築してみる。</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>ちわ。seiです。タイトルの通りです。</p>



<p>DR（ディザスターリカバリー、災害復旧）構成、あるいは、冗長構成とかHA（高可用性）構成っていうのもほぼ同義かと思いますが、クラウドサービスを利用するとそんな構成が、あっという間に簡単に構築できます。オンプレだとサーバーラック内を冗長構成にするのすら、長い時間と労力と金がかかってたのに嘘のようです。しかも、サーバーラック内の冗長化だけじゃ地理的災害時のメリットが全くなしという・・・。</p>



<p>今回は、仮想ネットワークを利用しデータを全力で保護しつつ、データセンター障害やリージョン障害が発生しても「なんとか」（←ここ大事）稼働するWEBアプリを構築していきたいと思います。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">今回のゴール</a></li><li><a href="#toc2" tabindex="0">DR（ディザスターリカバリー）構成の構築手順</a><ol><li><a href="#toc3" tabindex="0">リソースグループの作成</a></li><li><a href="#toc4" tabindex="0">Azure SQL Databaseの作成＆フェールオーバーグループ設定</a></li><li><a href="#toc5" tabindex="0">Azure Functionsの作成&amp;コードのデプロイ</a></li><li><a href="#toc6" tabindex="0">仮想ネットワーク、プライベートリンク、グローバルVNetピアリングの設定</a></li><li><a href="#toc7" tabindex="0">Azure Traffic Managerでのエンドポイント切り替え</a></li></ol></li><li><a href="#toc8" tabindex="0">稼働確認</a><ol><li><a href="#toc9" tabindex="0">パターン1：通常運用</a></li><li><a href="#toc10" tabindex="0">パターン2：SQL障害発生</a></li><li><a href="#toc11" tabindex="0">パターン3：バックエンド障害</a></li><li><a href="#toc12" tabindex="0">パターン4：プライマリーリージョン障害</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">今回のゴール</span></h2>



<p>基本的にはMSさんLearnからの<span class="bold-red"><span class="fz-32px"><span class="fz-28px">「データベースへのプライベート接続を使用したマルチリージョン Web アプリ」</span></span></span>のオマージュ？となります。アーキテクチャー自体は理解できるんですが、「じゃあその構築手順は？」と言われると、なかなかに手間取ったので備忘録として。（まぁスキル不足でしかないっていう話ではあるんですが）。若干構成を変えてお財布に優しくしたつもりですが、金額算出したわけではないのでよくわかりません。悪しからず。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference-link">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/architecture/example-scenario/sql-failover/app-service-private-sql-multi-region" title="データベースアーキテクチャ設計の始め方 - Azure Architecture Center" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">データベースアーキテクチャ設計の始め方 - Azure Architecture Center</div><div class="blogcard-snippet external-blogcard-snippet">テクノロジの選択、ソリューションのアイデア、ワークロードの参照アーキテクチャなど、Azure でのデータベース アーキテクチャの設計について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/architecture/example-scenario/sql-failover/app-service-private-sql-multi-region" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>構成図は以下のようになります。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-1.png"><img decoding="async" width="1024" height="592" src="https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-1-1024x592.png" alt="" class="wp-image-4424" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-1-1024x592.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-1-300x173.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-1-768x444.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-1-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/03/DR環境システム構成図-1.png 1149w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Azure Front Door、WAFはオミットしてます。必要ならば入れていただければ。代わりにTraffic Managerがリクエストを振り分ける形になります。実際はTraffic Managerの前にAzure Static Web Appsとかのフロントエンドを配置しないとWEBアプリとしては機能しないと思いますが、今回はDR構成の検証という感じですので、こんなので行かせていただきます。</p>



<p>※トークンの管理やAPIキーなどの考慮も行っていません。</p>



<p>また、各リソースの詳細な作成方法は一部省略させていただきます。</p>



<p><span class="bold-red">追記：Azure Front Doorを利用したDR構成例も投稿してみましたのでご参照ください。</span></p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a target="_self" href="https://star-moon-sun.com/2025/07/27/work/azure-dr-using-afd/" title="AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。</div><div class="blogcard-snippet internal-blogcard-snippet">どーも。seiです。久々の技術系ネタｗｗｗ以前の投稿では、Azure Traffic Managerを使ってマルチリージョンのDR（ディザスターリカバリー）構成を構築しました。コスパ重視でTraffic Managerをかませていましたが、...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.07.27</div></div></div></div></a>
</div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">DR（ディザスターリカバリー）構成の構築手順</span></h2>



<h3 class="wp-block-heading"><span id="toc3">リソースグループの作成</span></h3>



<p>まずはリソースグループを作成していきます。災害対策として2つのリージョンに分散してリソースを作成していく必要があるでしょう。プライマリーリージョンとして「東日本」、セカンダリーリージョンとして「東南アジア」にそれぞれリソースグループを作っていきます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box ng-box">
<p><s>本当は西日本をセカンダリーリージョンとして作成したかったのですが、2023年3月現在AppServiceがデプロイできない現象が発生しており、仕方なく海外のリージョンを利用しています。ハードウェアなどのリソース不足の影響でしょうか。</s></p>



<p><s>&#8220;This region has quota of 0 instances for your subscription. Try selecting different region or SKU.&#8221;っていうエラーで最後のステップで怒られます。</s></p>



<p><s>※西日本にAzuer SQLのデプロイができることは確認済みです。</s></p>



<p><s>海外のリージョンを利用するにあたっては、組織のデータ保存場所ポリシー等に従っていただければと思います。</s></p>
</div>



<p><span class="bold-blue"><span class="fz-36px">→2023年6月現在、Azure西日本リージョンでもApp Serviceがデプロイできることを確認しています。一安心です。</span></span></p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-180138.png"><img decoding="async" width="1024" height="347" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-180138-1024x347.png" alt="" class="wp-image-4416" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-180138-1024x347.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-180138-300x102.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-180138-768x261.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-180138.png 1365w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>はい、このように「primary-rg」として「Japan East」に、「secondary-rg」として「Southeast Asia」それぞれにリソースグループを作成しました。それではリソースをぶっこんでいきましょう。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Azure SQL Databaseの作成＆フェールオーバーグループ設定</span></h3>



<p>まず、Azure SQL Databaseを用意していきましょう。プライマリーリージョンにはSQLサーバーとデータベースを作りますが、セカンダリーリージョンには論理SQLサーバーのみ作ります。その後、二つのリージョンをフェールオーバーグループに設定するとプライマリーに用意したデータベース内容が自動的にセカンダリーにレプリケートされます。</p>



<p>まずはプライマリーリージョンにSQL Databaseサーバーを新規で作成します。<span class="marker-under-red"><span class="fz-22px">SQL認証を選択した場合は、プライマリーリージョンとセカンダリーリージョンのサーバー管理者ログインアカウント、パスワードを一致させた方がよいでしょう。</span></span>一致していない場合、フェールオーバー後にAzure Functionsから恐らくアクセスできません。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-112218.png"><img decoding="async" width="877" height="920" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-112218.png" alt="" class="wp-image-4426" style="width:658px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-112218.png 877w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-112218-286x300.png 286w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-112218-768x806.png 768w" sizes="(max-width: 877px) 100vw, 877px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>引き続きデータベースを作成します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114000.png"><img decoding="async" width="847" height="915" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114000.png" alt="" class="wp-image-4427" style="width:635px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114000.png 847w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114000-278x300.png 278w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114000-768x830.png 768w" sizes="(max-width: 847px) 100vw, 847px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>サーバー、データベースのデプロイが完了しました。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114551-2.png"><img decoding="async" width="1024" height="602" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114551-2-1024x602.png" alt="" class="wp-image-4510" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114551-2-1024x602.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114551-2-300x176.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114551-2-768x452.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-114551-2.png 1246w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>そうしたら、データベースに簡単なテーブルを作成しておきましょう。IdフィールドとNameフィールドのみ保持するUserテーブルを作成します。サーバーのファイアウォールルールにクライアントのIPアドレスを追加してあげるのを忘れずに。クエリエディターでサクッと作りました。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115312-1.png"><img decoding="async" width="1024" height="514" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115312-1-1024x514.png" alt="" class="wp-image-4430" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115312-1-1024x514.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115312-1-300x151.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115312-1-768x386.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115312-1.png 1410w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](max) NULL,
 CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これでプライマリーリージョンのデータベースは完了です。次にセカンダリーリージョンに論理SQLサーバーを用意します。マーケットプレイスで「<span class="marker-under-blue">SQL server(logical server)</span>」を選択します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115826.png"><img decoding="async" width="1024" height="629" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115826-1024x629.png" alt="" class="wp-image-4431" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115826-1024x629.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115826-300x184.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115826-768x472.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-115826.png 1404w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>もう一度言います。SQL認証を利用するならプライマリーリージョンで作成した管理者ログインアカウントとパスワードと同じものをセカンダリーリージョンのSQLサーバーで入力して必ず一致させましょう。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-120346.png"><img decoding="async" width="914" height="894" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-120346.png" alt="" class="wp-image-4432" style="width:686px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-120346.png 914w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-120346-300x293.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-120346-768x751.png 768w" sizes="(max-width: 914px) 100vw, 914px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>セカンダリーリージョンにサーバーのデプロイが完了しました。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-121607-2.png"><img decoding="async" width="1024" height="532" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-121607-2-1024x532.png" alt="" class="wp-image-4511" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-121607-2-1024x532.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-121607-2-300x156.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-121607-2-768x399.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-121607-2.png 1401w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次にフェールオーバーグループを設定して、データベースのGeoレプリケーションを可能にします。</p>



<p>プライマリーリージョンのAzure SQL Databaseサーバーを選択し、「フェールオーバーグループ」を選択します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122051.png"><img decoding="async" width="1024" height="496" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122051-1024x496.png" alt="" class="wp-image-4434" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122051-1024x496.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122051-300x145.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122051-768x372.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122051.png 1428w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「グループの追加」をクリック。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122414.png"><img decoding="async" width="1024" height="284" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122414-1024x284.png" alt="" class="wp-image-4435" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122414-1024x284.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122414-300x83.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122414-768x213.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122414.png 1426w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「フェールオーバーグループ名」を入力し、サーバーには<span class="marker-under-blue">セカンダリーリージョンのAzure SQL サーバー</span>を選択します。その後、グループ内のデータベースで「データベースの構成」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122753.png"><img decoding="async" width="1024" height="433" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122753-1024x433.png" alt="" class="wp-image-4436" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122753-1024x433.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122753-300x127.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122753-768x325.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-122753.png 1431w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>レプリケーション対象のデータベースにチェックをつけ「選択」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123131.png"><img decoding="async" width="1024" height="606" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123131-1024x606.png" alt="" class="wp-image-4437" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123131-1024x606.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123131-300x178.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123131-768x455.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123131.png 1426w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>前の画面に戻り、「作成」をクリックするとフェールオーバーグループがデプロイされます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123416.png"><img decoding="async" width="1024" height="278" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123416-1024x278.png" alt="" class="wp-image-4438" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123416-1024x278.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123416-300x82.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123416-768x209.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123416.png 1423w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ちゃんとセカンダリーと同期しているのが確認できます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123733.png"><img decoding="async" width="1024" height="652" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123733-1024x652.png" alt="" class="wp-image-4439" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123733-1024x652.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123733-300x191.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123733-768x489.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123733.png 1431w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>しばらくするとサーバーしか配置しなかったセカンダリーリージョンに、自動的にデータベースが同期されると思います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123945-1.png"><img decoding="async" width="1024" height="479" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123945-1-1024x479.png" alt="" class="wp-image-4512" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123945-1-1024x479.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123945-1-300x140.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123945-1-768x359.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-123945-1.png 1429w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>SQL認証ではなく、マネージドIDを利用したAAD認証の場合は、以下の投稿をご参考に。SQL認証である必要はありませんので。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a target="_self" href="https://star-moon-sun.com/2023/09/18/work/sqlaccess-using-managedid/" title="マネージドIDを利用したAzure SQL Databaseへのアクセスを実装する" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/09/ManagedIds-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">マネージドIDを利用したAzure SQL Databaseへのアクセスを実装する</div><div class="blogcard-snippet internal-blogcard-snippet">こんばんは。まだまだ暑い日が続いていますが、皆様いかがお過ごしでしょうか？そういえば、Azure Active Directory、今後は「Microsoft Entra ID」と名称が変更されましたね。Azure ADとかAADと言って長...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.09.18</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Azure Functionsの作成&amp;コードのデプロイ</span></h3>



<p>次にAzure Functionsを用意していきます。</p>



<p>プライマリー、セカンダリーそれぞれに作成していきますが、注意点です。この後、プライベートエンドポイントと仮想ネットワーク統合を行っていくのですが、その場合、AppServiceプランならBasic以上の価格プランが必要です。Premiumなら言うことなし。さらに、Traffic Managerとの連携も必要な場合、Standard以上である必要があります。ですので今回は「<span class="fz-32px"><span class="bold-blue">Standard S1</span></span>」プラン一択でリソースを作っていきます。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191620.png"><img decoding="async" width="973" height="734" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191620.png" alt="" class="wp-image-4420" style="width:730px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191620.png 973w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191620-300x226.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191620-768x579.png 768w" sizes="(max-width: 973px) 100vw, 973px" /></a></figure>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191719.png"><img decoding="async" width="915" height="627" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191719.png" alt="" class="wp-image-4421" style="width:686px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191719.png 915w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191719-300x206.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-25-191719-768x526.png 768w" sizes="(max-width: 915px) 100vw, 915px" /></a></figure>



<p>その他の構成は今のところなんでもOKです。</p>



<p>リソースのデプロイが完了したらソースコードを用意していきましょう。</p>



<p>コードは以前作成したEFCoreのコードファーストで作成したものを使ってみます。データベースにアクセスするコードがあればなんでもいいです。</p>



<p>以前の内容はこちらから。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a target="_self" href="https://star-moon-sun.com/2023/01/07/work/entityframework-in-azurefunctions/" title="「Azure FunctionsでもEntityFrameworkのコードファーストで開発を行いたいんじゃ！」の巻" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-800x450.png 800w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-300x169.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-768x432.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2023/01/eyecatch20230106.png 950w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">「Azure FunctionsでもEntityFrameworkのコードファーストで開発を行いたいんじゃ！」の巻</div><div class="blogcard-snippet internal-blogcard-snippet">最近Entity Frameworkを知りました。いまさらです。生きててすみません。聞いたことはありましたが、いままでのやり方に固執・執着・思考停止（※ほんと良くないですよね・・・）し、あまり気にもとめてなかったのですが、実際いろいろやって...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.01.07</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>今回使うコードは以下のような感じです。HTTPリクエストからnameパラメーターを受け取り、データベースのUserテーブルにIDを採番して新規登録するコードです。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using CodeFirstExampleFunctionApp.Models;

namespace CodeFirstExampleFunctionApp
{

    public class Function1
    {
        private readonly MyContext dbContext;
        
        public Function1(MyContext context)
        {
            dbContext = context;
        }

        [FunctionName("Function1")]
        public async Task&lt;IActionResult&gt; Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            await dbContext.AddAsync(new User() { Name = name });
            await dbContext.SaveChangesAsync();

            // 自動採番された最後のIDを取得する
            int id = dbContext.User.Max(x =&gt; x.Id);

            return new OkObjectResult($"ユーザーを登録しました。ID={id}、ユーザー名={name}");
        }
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>コードができたら、プライマリー、セカンダリーの両リージョンのAzure Functionsにデプロイします。今回はパイプラインは組まず、VisualStudioから手動でデプロイします。二つのリージョンのAzure Functionsリソースにデプロイするのを忘れずに。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-205925.png"><img decoding="async" width="811" height="571" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-205925.png" alt="" class="wp-image-4501" style="width:608px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-205925.png 811w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-205925-300x211.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-205925-768x541.png 768w" sizes="(max-width: 811px) 100vw, 811px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>最後に、前の手順で作成したフェールオーバーグループの「読み取り／書き込みのリスナーエンドポイント」をデータベースアクセスの接続文字列として設定しておきましょう。</p>



<p>通常のデータベース接続文字列は</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Server=tcp:drdemo-server-primary.database.windows.net,1433;Initial Catalog=drdemo-database;Persist Security Info=False;User ID=drdemo-admin;Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;</pre></div>



<p>ですが、フェールオーバーグループを設定し、フェールオーバー後もアプリケーションに保持した接続文字列を変更せずにデータベースにアクセスするには以下のように接続文字列を設定します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">Server=tcp:drdemo-failovergroup.database.windows.net,1433;Initial Catalog=drdemo-database;Persist Security Info=False;User ID=drdemo-admin;Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;</pre></div>



<p>違いは、Server指定の場所ですね。ここにフェールオーバーグループの「読み込み／書き込みのリスナーエンドポイント」を設定します。ちなみにこのフェールオーバーグループのドメイン名（＝読み込み／書き込みのリスナーエンドポイント）、「どこにあるの？」って話ですが、Azure SQL Databaseサーバーのフェールオーバーグループ設定内の以下のページの下部にあります。どこにあったか忘れてなかなか躓きます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-125231.png"><img decoding="async" width="1024" height="647" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-125231-1024x647.png" alt="" class="wp-image-4442" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-125231-1024x647.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-125231-300x190.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-125231-768x485.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-125231.png 1434w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これをAzure Functionsのアプリケーション設定に値として設定してあげましょう。<span class="marker-under">プライマリーAzure FunctionsもセカンダリーAzure Functionsも</span>同じ値で設定してください。そうすることでAzure SQLでフェールオーバーが発生してもAzure Functions側では接続文字列の変更を行うことなく、アクティブなデータベースにアクセスできます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-130142.png"><img decoding="async" width="1024" height="528" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-130142-1024x528.png" alt="" class="wp-image-4443" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-130142-1024x528.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-130142-300x155.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-130142-768x396.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-130142.png 1423w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">仮想ネットワーク、プライベートリンク、グローバルVNetピアリングの設定</span></h3>



<p>この時点でAzure SQL DatabaseのファイアウォールルールにAuzre FunctionsのIPアドレスを設定して、リクエストを投げればデータベースに書き込まれると思います。余裕がある方は試してみては。</p>



<p>ひとまず、ここでは仮想ネットワーク（VNet）を構築し、データベースへのパブリックアクセスを無効化します。</p>



<p>プライマリーリージョンにVNetを構築します。（セカンダリーもIPが変わるくらいで手順は一緒です。）</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-131752.png"><img decoding="async" width="866" height="879" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-131752.png" alt="" class="wp-image-4446" style="width:650px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-131752.png 866w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-131752-296x300.png 296w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-131752-768x780.png 768w" sizes="(max-width: 866px) 100vw, 866px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-132121.png"><img decoding="async" width="838" height="875" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-132121.png" alt="" class="wp-image-4447" style="width:629px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-132121.png 838w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-132121-287x300.png 287w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-132121-768x802.png 768w" sizes="(max-width: 838px) 100vw, 838px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次にAzure SQL Databaseのサーバーにアクセスしてプライベートエンドポイントを作成していきます。作成したプライベートエンドポイントを先ほど作成したPrivateLinkSubnetに紐づけることでそのサブネットからのみデータベースにアクセス可能になります。</p>



<p>ネットワークを選択し、「プライベートアクセス」－「＋プライベートエンドポイントを作成します」を選択します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133219.png"><img decoding="async" width="1024" height="638" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133219-1024x638.png" alt="" class="wp-image-4449" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133219-1024x638.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133219-300x187.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133219-768x479.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133219.png 1423w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>名前を指定します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133512.png"><img decoding="async" width="847" height="912" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133512.png" alt="" class="wp-image-4450" style="width:635px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133512.png 847w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133512-279x300.png 279w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133512-768x827.png 768w" sizes="(max-width: 847px) 100vw, 847px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>自動的に対象サブリソースに「sqlServer」が設定されていると思います。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133637.png"><img decoding="async" width="850" height="909" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133637.png" alt="" class="wp-image-4451" style="width:638px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133637.png 850w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133637-281x300.png 281w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133637-768x821.png 768w" sizes="(max-width: 850px) 100vw, 850px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>どのサブネットに配置するかを指定しましょう。今回は構成図の通りVNet作成時に追加したPrivateLinkSubnetに配置します。以外はデフォルトでOK。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133906.png"><img decoding="async" width="868" height="907" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133906.png" alt="" class="wp-image-4452" style="width:651px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133906.png 868w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133906-287x300.png 287w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-133906-768x803.png 768w" sizes="(max-width: 868px) 100vw, 868px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>自動的にプライベートDNSを構成してくれます。そのまま次へ。タグもそのまま次で「作成」を行いましょう。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134109.png"><img decoding="async" width="837" height="902" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134109.png" alt="" class="wp-image-4453" style="width:628px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134109.png 837w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134109-278x300.png 278w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134109-768x828.png 768w" sizes="(max-width: 837px) 100vw, 837px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>プライベートエンドポイントがデプロイされました。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134701.png"><img decoding="async" width="1024" height="334" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134701-1024x334.png" alt="" class="wp-image-4455" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134701-1024x334.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134701-300x98.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134701-768x251.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-134701.png 1373w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次にAzure FunctionsのVNET統合を行っていきます。</p>



<p>Azure Functionsにアクセスし、ネットワークから送信トラフィックの「VNET統合」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016.png"><img decoding="async" width="1024" height="570" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016-1024x570.png" alt="" class="wp-image-4456" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016-1024x570.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016-300x167.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016-768x427.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135016.png 1432w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「VNetの追加」をクリックし、仮想ネットワーク、サブネットを指定してOKをクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135219-1.png"><img decoding="async" width="1024" height="631" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135219-1-1024x631.png" alt="" class="wp-image-4458" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135219-1-1024x631.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135219-1-300x185.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135219-1-768x473.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135219-1.png 1487w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これでAzure FunctionsからVNET内へアクセスすることができます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135629.png"><img decoding="async" width="1024" height="764" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135629-1024x764.png" alt="" class="wp-image-4459" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135629-1024x764.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135629-300x224.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135629-768x573.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-135629.png 1156w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>プライベートリンクの設定の最後にAzure SQL Databaseのファイアウォールルールを変更しましょう。パブリックアクセスを「無効にする」を選択することでデータベースへのアクセスをVNET統合したAzure Functionsのみに制限することができます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-140032.png"><img decoding="async" width="1024" height="655" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-140032-1024x655.png" alt="" class="wp-image-4460" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-140032-1024x655.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-140032-300x192.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-140032-768x492.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-140032.png 1425w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>VNET、プライベートリンク、VNET統合の設定がプライマリーもセカンダリーも終わり、パブリックアクセスを無効化した環境ができたら、次に仮想ネットワークピアリングを設定していきます。VNETピアリング、ここでは、リージョンをまたいだVNET同士の通信を可能にしますので、グローバルVNETピアリングを設定していきます。これによりプライマリーリージョンとセカンダリーリージョンでフェールオーバーが発生してもアクティブなデータベースへのアクセスを可能にします。</p>



<p>プライマリーリージョンに設定した仮想ネットワークにアクセスし、「ピアリング」を選択します。「追加」をクリックしてください。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-141931.png"><img decoding="async" width="1024" height="589" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-141931-1024x589.png" alt="" class="wp-image-4461" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-141931-1024x589.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-141931-300x173.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-141931-768x442.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-141931-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-141931.png 1425w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下のようにピアリングを設定します。要はお互いのVNETを指定するだけです。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142536.png"><img decoding="async" width="980" height="788" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142536.png" alt="" class="wp-image-4462" style="width:735px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142536.png 980w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142536-300x241.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142536-768x618.png 768w" sizes="(max-width: 980px) 100vw, 980px" /></a></figure>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142704.png"><img decoding="async" width="969" height="509" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142704.png" alt="" class="wp-image-4463" style="width:727px;height:382px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142704.png 969w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142704-300x158.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-142704-768x403.png 768w" sizes="(max-width: 969px) 100vw, 969px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これでリージョン間のVNET同士が通信できるようになったので、フェールオーバーが発生しても相互にアクセスが可能な状態になります。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-143133.png"><img decoding="async" width="1024" height="478" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-143133-1024x478.png" alt="" class="wp-image-4464" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-143133-1024x478.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-143133-300x140.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-143133-768x359.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-143133.png 1436w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>この段階でほぼほぼDR環境は出来上がっているのですが、Azure SQLをフェールオーバーさせてバックエンドAzure Functionsからリクエストを投げると「<span class="marker-red">Failed to update database &#8220;データベース名&#8221; because the database is read-only.</span>」というメッセージ出して落ちます。これに対処するためにもう一工夫必要です。</p>



<p>プライベートDNSゾーンにプライマリー、セカンダリーの各データベースのプライベートリンクIPアドレス設定を追加します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145336-1.png"><img decoding="async" width="1024" height="660" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145336-1-1024x660.png" alt="" class="wp-image-4504" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145336-1-1024x660.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145336-1-300x193.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145336-1-768x495.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145336-1.png 1434w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145810-1.png"><img decoding="async" width="1024" height="667" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145810-1-1024x667.png" alt="" class="wp-image-4505" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145810-1-1024x667.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145810-1-300x195.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145810-1-768x500.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-145810-1.png 1433w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>SQLをフェールオーバーさせます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150147.png"><img decoding="async" width="1024" height="557" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150147-1024x557.png" alt="" class="wp-image-4468" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150147-1024x557.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150147-300x163.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150147-768x418.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150147.png 1313w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Azure Functionsにアクセスするとフェールオーバーしても、無事データベースにアクセスできたのが確認できました。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150318.png"><img decoding="async" width="857" height="126" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150318.png" alt="" class="wp-image-4469" style="width:643px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150318.png 857w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150318-300x44.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-150318-768x113.png 768w" sizes="(max-width: 857px) 100vw, 857px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc7">Azure Traffic Managerでのエンドポイント切り替え</span></h3>



<p>疲れましたね。ここまで書いてて自分でも分割すればよかったって後悔してます。が、これで最後の手順です。</p>



<p>Traffic Managerを設定して、バックエンドAzure Functionsのリクエスト先を切り替えられるようにしましょう。これにより、プライマリーリージョン自体の災害時にセカンダリーリージョンのAzure Functionsやその先のデータベース、ストレージを利用したままサービスを継続できる？のではないでしょうか。</p>



<p>Traffic Managerプロファイルを追加します。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="506" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152013-1024x506.png" alt="" class="wp-image-4471" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152013-1024x506.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152013-300x148.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152013-768x380.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152013.png 1432w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>名前を設定し、ルーティング方法に「優先度」を設定して「作成」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152321.png"><img decoding="async" width="1024" height="656" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152321-1024x656.png" alt="" class="wp-image-4472" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152321-1024x656.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152321-300x192.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152321-768x492.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-152321.png 1429w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Traffic Managerリソースに移動し、エンドポイントを選択し、「追加」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153133.png"><img decoding="async" width="1024" height="431" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153133-1024x431.png" alt="" class="wp-image-4473" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153133-1024x431.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153133-300x126.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153133-768x323.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153133.png 1429w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>エンドポイントの追加画面でまずはプライマリーリージョンに振り分けるエンドポイント設定を行っていきます。特に種類は「Azureエンドポイント」、ターゲットリソースの種類は「App Service」、ターゲットリソースにプライマリーリージョンのAzure Functionsバックエンドリソース名を指定します。そして、優先度に「1」を設定しましょう。優先度は値が小さいほど優先して実行されるエンドポイントになります。優先度１のエンドポイントの正常性が担保できないとTraffic Managerにより判断された場合は、その次の優先度の値のエンドポイントにトラフィックが振り分けられます。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153542.png"><img decoding="async" width="580" height="912" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153542.png" alt="" class="wp-image-4474" style="width:435px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153542.png 580w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-153542-191x300.png 191w" sizes="(max-width: 580px) 100vw, 580px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>同様に、セカンダリーリージョンに振り分けるエンドポイントも設定しましょう。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-154155-1.png"><img decoding="async" width="584" height="915" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-154155-1.png" alt="" class="wp-image-4506" style="width:438px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-154155-1.png 584w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-154155-1-191x300.png 191w" sizes="(max-width: 584px) 100vw, 584px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>プライマリー、セカンダリーともにエンドポイント追加ができました。ただ、モニターの状態が両リージョンとも「低下」になっています。これはすべてのバックエンドAzure Functionsの正常性が確認できないためトラフィックマネージャーは機能していない状態です。これを解決していきます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-155317.png"><img decoding="async" width="1024" height="296" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-155317-1024x296.png" alt="" class="wp-image-4477" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-155317-1024x296.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-155317-300x87.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-155317-768x222.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-155317.png 1423w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Traffic ManagerはデフォルトでHTTPで正常性チェックを行います。ですのでその構成を変更してあげて、HTTPSでトラフィックマネージャーがAzure Functionsと疎通できるようにします。</p>



<p>トラフィックマネージャーの構成設定に移動し、エンドポイントモニターの設定でプロトコルを「HTTP」から「HTTPS」に、ポートを「80」から「443」に変更しましょう。変更したら「保存」をクリックします。正常性チェックのカスタムコードなどがある場合はパスに記述します。Azure Functionsとかでしたら、healthcheckという関数を追加したとしたらapi/healthcheckと入れる感じですかね。200を正常として扱い、それ以外のステータスコードを使うようなら「状態コードの範囲が必要です」に定義してあげます。今回は特に行いません。ルートへのGETリクエストで200が返ってくれば正常と扱います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-160111.png"><img decoding="async" width="1024" height="815" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-160111-1024x815.png" alt="" class="wp-image-4478" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-160111-1024x815.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-160111-300x239.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-160111-768x611.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-160111.png 1093w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>この状態でモニターの状態を確認すると、ばっちりオンラインになってました。OKです。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-173935.png"><img decoding="async" width="1024" height="287" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-173935-1024x287.png" alt="" class="wp-image-4486" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-173935-1024x287.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-173935-300x84.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-173935-768x216.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-173935.png 1432w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>一度、これでアクセスしてみます。トラフィックマネージャー経由のアクセスはAzure Functionsのエンドポイントのホスト名をトラフィックマネージャープロファイル作成時に指定した「名前.trafficmanager.net」にするだけです。が、「この接続ではプライバシーが保護されません」が出てSSLでAzure Fucntionsと疎通できません。さすがにAzure Functions側で「HTTPSのみ」をオフにするっていうのも気が引ける・・・。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/image.png"><img decoding="async" width="1024" height="482" src="https://star-moon-sun.com/wp-content/uploads/2023/03/image-1024x482.png" alt="" class="wp-image-4479" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/image-1024x482.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/image-300x141.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/image-768x361.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/image.png 1210w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これに対処するためには、無料のAppServiceマネージド証明書を利用していきます。いいですよね「無料」っていう響き。とっても助かります。ありがとうAzure。ありがとうMSさん。</p>



<p>まずはAppServiceマネージド証明書を追加していきます。Azure Functionsの証明書に移動し、「証明書の追加」をクリックします。カスタムドメインにはTrafficManagerのホスト名、証明書のフレンドリ名を入力し検証、追加を行いましょう。</p>



<p>※ちなみにカスタムドメインからAppServiceマネージド証明書の新規作成もできるのでそちらで行えば一手少なくできますね。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163216.png"><img decoding="async" width="1024" height="651" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163216-1024x651.png" alt="" class="wp-image-4480" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163216-1024x651.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163216-300x191.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163216-768x488.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163216.png 1434w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>簡単にマネージド証明書が追加できました。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="435" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163632-1024x435.png" alt="" class="wp-image-4481" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163632-1024x435.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163632-300x128.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163632-768x327.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163632.png 1430w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次にAzure Functionsにカスタムドメインを設定していきます。設定のカスタムドメインを選択すると以下のような画面になります。「バインディングの追加」を選択します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163940.png"><img decoding="async" width="1024" height="525" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163940-1024x525.png" alt="" class="wp-image-4482" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163940-1024x525.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163940-300x154.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163940-768x393.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-163940.png 1433w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box alert-box">
<p>もし、TrafficManagerの設定を行って上記のように「バインディングなし」のドメインが表示されない場合はAzure Functionsの価格プランが「Standard」以上になっていない可能性があります。もう一度価格プランを見直し「Standard」以上のプランになっていることを確認してください。</p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>TLS/SSLバインドの追加で証明書として先ほど作成したAppServiceマネージド証明書を選択し、追加を行いましょう。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164621.png"><img decoding="async" width="589" height="915" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164621.png" alt="" class="wp-image-4483" style="width:442px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164621.png 589w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164621-193x300.png 193w" sizes="(max-width: 589px) 100vw, 589px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>無事トラフィックマネージャーのドメインがカスタムドメインとして追加され、セキュリティ保護されました。<span class="marker-under"><span class="fz-22px">忘れずにセカンダリーの証明書、カスタムドメインの設定もお願いしますね。</span></span></p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164940.png"><img decoding="async" width="1024" height="468" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164940-1024x468.png" alt="" class="wp-image-4484" style="width:768px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164940-1024x468.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164940-300x137.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164940-768x351.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-164940.png 1435w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>で、セカンダリーの証明書作成時に以下のエラーが出ました。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box ng-box">
<p>ホスト名が App Service マネージド証明書の作成に適していません。ドメイン drdemo.trafficmanager.net で、アクティブな CNAME レコードが drdemo-secondary-backend.azurewebsites.net に設定されていることをご確認ください。</p>
</div>



<p>TrafficManager上からプライマリーエンドポイントの優先順位を一時的にセカンダリーより落としてあげてから、セカンダリーAzure Functionsのカスタムドメイン＆証明書の追加を行ったらうまくいきます。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>もう一度、トラフィックマネージャー経由のエンドポイントでAzure Functionsを呼び出してみます。無事プライバシーエラーで怒られることもなくトラフィックマネージャー→Azure Functions→VNET→プライベートエンドポイント→Azure SQL Databaseの呼び出しまで完了したことが確認できました。うぇ～～～～いｗｗｗ</p>



<figure class="wp-block-image size-full"><img decoding="async" width="929" height="142" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-165232.png" alt="" class="wp-image-4485" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-165232.png 929w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-165232-300x46.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-165232-768x117.png 768w" sizes="(max-width: 929px) 100vw, 929px" /></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc8">稼働確認</span></h2>



<p>最後にDR構成がうまくいっているか稼働確認していきましょう。</p>



<p>※レスポンスが正しく返ってくるかのみを検証します。</p>



<p>シチュエーションは以下の4パターンかなと。</p>



<figure class="wp-block-table aligncenter"><table><thead><tr><th class="has-text-align-center" data-align="center">パターン</th><th class="has-text-align-center" data-align="center">Azure Functions</th><th class="has-text-align-center" data-align="center"><strong>Azure SQL Database</strong></th></tr></thead><tbody><tr><td class="has-text-align-center" data-align="center">パターン1:通常運用</td><td class="has-text-align-center" data-align="center">プライマリー</td><td class="has-text-align-center" data-align="center">プライマリー</td></tr><tr><td class="has-text-align-center" data-align="center">パターン2:SQL障害</td><td class="has-text-align-center" data-align="center">プライマリー</td><td class="has-text-align-center" data-align="center">セカンダリー</td></tr><tr><td class="has-text-align-center" data-align="center">パターン3:バックエンド障害</td><td class="has-text-align-center" data-align="center">セカンダリー</td><td class="has-text-align-center" data-align="center">プライマリー</td></tr><tr><td class="has-text-align-center" data-align="center">パターン4:プライマリーリージョン障害</td><td class="has-text-align-center" data-align="center">セカンダリー</td><td class="has-text-align-center" data-align="center">セカンダリー</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc9">パターン1：通常運用</span></h3>



<p>バックエンドもデータベースもプライマリーリージョンの通常運用パターン。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-195704.png"><img decoding="async" width="705" height="458" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-195704.png" alt="" class="wp-image-4488" style="width:529px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-195704.png 705w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-195704-300x195.png 300w" sizes="(max-width: 705px) 100vw, 705px" /></a></figure>



<p>これはいいでしょ。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="745" height="108" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200135.png" alt="" class="wp-image-4489" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200135.png 745w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200135-300x43.png 300w" sizes="(max-width: 745px) 100vw, 745px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc10">パターン2：SQL障害発生</span></h3>



<p>バックエンドは問題ないが、プライマリーのAzure SQLに障害が発生してセカンダリーにフェールオーバーしたパターン。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200556.png"><img decoding="async" width="706" height="454" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200556.png" alt="" class="wp-image-4490" style="width:530px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200556.png 706w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200556-300x193.png 300w" sizes="(max-width: 706px) 100vw, 706px" /></a></figure>



<p>これもOK。問題なし。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200829.png"><img decoding="async" width="660" height="101" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200829.png" alt="" class="wp-image-4491" style="width:495px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200829.png 660w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-200829-300x46.png 300w" sizes="(max-width: 660px) 100vw, 660px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc11">パターン3：バックエンド障害</span></h3>



<p>バックエンドに障害発生でセカンダリーのバックエンドにトラフィックが振り分けられ、データベースはプライマリーに書き込まれるパターン。</p>



<p>※Azure Functionsの認証対策してないので関数キーはセカンダリーのものを使用します・・・。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-201345.png"><img decoding="async" width="702" height="457" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-201345.png" alt="" class="wp-image-4492" style="width:527px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-201345.png 702w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-201345-300x195.png 300w" sizes="(max-width: 702px) 100vw, 702px" /></a></figure>



<p>おぉ。バッチリ。TrafficManagerもちゃんと働いています。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202042.png"><img decoding="async" width="725" height="107" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202042.png" alt="" class="wp-image-4493" style="width:544px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202042.png 725w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202042-300x44.png 300w" sizes="(max-width: 725px) 100vw, 725px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc12">パターン4：プライマリーリージョン障害</span></h3>



<p>最後は東日本リージョンがごっそり災害等で使えなくなった場合。すべてセカンダリーで稼働を想定。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202510.png"><img decoding="async" width="667" height="455" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202510.png" alt="" class="wp-image-4494" style="width:500px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202510.png 667w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202510-300x205.png 300w" sizes="(max-width: 667px) 100vw, 667px" /></a></figure>



<p>パーフェクト！！バッチリセカンダリーのリソースで稼働しました。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202725.png"><img decoding="async" width="696" height="134" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202725.png" alt="" class="wp-image-4495" style="width:522px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202725.png 696w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2023-03-26-202725-300x58.png 300w" sizes="(max-width: 696px) 100vw, 696px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ひとまず、DR構成でのWEBアプリ出来上がりましたが、<s><span class="red">トークンの件とか関数キーの課題がありますのでその辺まで</span></s>フルスケールで行うにはAPIゲートウェイとかFront Doorやっぱ必要なんですかね。</p>



<p><span class="bold-red">追記：Azure Front Doorを利用したDR構成例も投稿してみましたのでご参照ください。</span></p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a target="_self" href="https://star-moon-sun.com/2025/07/27/work/azure-dr-using-afd/" title="AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2025/07/AFDシステム構成図-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">AzureマルチリージョンでのDR構成をAzure Front Doorにアップグレードしてみる。</div><div class="blogcard-snippet internal-blogcard-snippet">どーも。seiです。久々の技術系ネタｗｗｗ以前の投稿では、Azure Traffic Managerを使ってマルチリージョンのDR（ディザスターリカバリー）構成を構築しました。コスパ重視でTraffic Managerをかませていましたが、...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.07.27</div></div></div></div></a>
</div>



<p><s><span class="red">まぁ再認証かませればこの構成でもなんとか行けなくはないのかなぁと。</span></s></p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>2024/08/17追記</p>



<p>Azure Functionsのアプリキーって自動生成されるものしか利用できないと勘違いしてましたが、新規で追加することできましたね。なので、「新しいホストキー」でプライマリー、セカンダリー共通のホストキーを用意しておいてあげればフェールオーバーしても共通のアプリキーを利用してシームレスにAzure Functionsを利用できそうな気がしますね。まぁ設計によるとおもいますが。にしても、以前からホストキーの追加ってできましたっけ・・・？</p>



<p><strong><span class="bold-red">→さらに追記。アプリキーを新規で作成するまでもなく、既存のアプリキーを編集することができるので、プライマリーとセカンダリーで同一のアプリキーに統一することは簡単にできますので、お試しください。</span></strong></p>



<figure class="wp-block-image size-large"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2024-08-17-151011.png"><img decoding="async" width="1024" height="352" src="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2024-08-17-151011-1024x352.png" alt="" class="wp-image-5627" srcset="https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2024-08-17-151011-1024x352.png 1024w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2024-08-17-151011-300x103.png 300w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2024-08-17-151011-768x264.png 768w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2024-08-17-151011-1536x528.png 1536w, https://star-moon-sun.com/wp-content/uploads/2023/03/スクリーンショット-2024-08-17-151011.png 1930w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>



<p>プライベートエンドポイントかませてストレージなんかも入れてあとはよしなに。</p>



<p>東日本がいっちゃったときに本当にオレら平気なの？っていうのはあるんですがね。。。対策してるのとしてないのでは気持ちのあり方が全然違いますよねぇ。</p>



<p>ってことで大分長丁場になってしまいましたが、無事DR構成を構築することができました。めでたしめでたしｗ</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="4408"
					data-ulike-nonce="09b94ef8cf"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_4408"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2023/03/27/work/azure-multiregion-dr-environment/">AzureマルチリージョンでのDR構成を構築してみる。</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2023/03/27/work/azure-multiregion-dr-environment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure FunctionsのBLOBトリガー利用時の罠2選</title>
		<link>https://star-moon-sun.com/2023/02/26/work/blobtrigger-trap/</link>
					<comments>https://star-moon-sun.com/2023/02/26/work/blobtrigger-trap/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sun, 26 Feb 2023 06:51:09 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=4137</guid>

					<description><![CDATA[<p>AzureFunctionsでBLOBトリガーを利用してたんですが、今回はそんなBLOBトリガーでの罠とも言えるハマりどころの解決策を記述していきたいと思います。 あまりネット上に情報が無くて解決までに時間を要したので、 [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2023/02/26/work/blobtrigger-trap/">Azure FunctionsのBLOBトリガー利用時の罠2選</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>AzureFunctionsでBLOBトリガーを利用してたんですが、今回はそんなBLOBトリガーでの罠とも言えるハマりどころの解決策を記述していきたいと思います。</p>



<p>あまりネット上に情報が無くて解決までに時間を要したので、同じ現象で悩んでいる方の少しでも手助けになれば幸いです。</p>



<p>もっといい解決策があるようなら教えてください。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">問題１：プロキシ環境×ローカル環境でのBLOBトリガーがエラーを吐く</a><ol><li><a href="#toc2" tabindex="0">解決策：プロキシ×ローカル環境でBLOBトリガーなAzure Functionsを動かす方法</a></li></ol></li><li><a href="#toc3" tabindex="0">問題2：Microsoft Defender for Cloudの課金が高額になっている</a><ol><li><a href="#toc4" tabindex="0">Microsoft Defender for Storageの高額課金の原因</a></li><li><a href="#toc5" tabindex="0">解決策：BLOBトリガーで処理したファイルを削除する</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">問題１：プロキシ環境×ローカル環境でのBLOBトリガーがエラーを吐く</span></h2>



<p>プロキシ環境に限った話かと思います。おそらく。</p>



<p>BLOBトリガーなAzure Functionsがプロジェクトに含まれている状況で、ローカルストレージエミュレーター環境、つまり、local.settings.jsonのストレージアカウントへのアクセスに「UseDevelopmentStorage=true」を指定して、Azure Functionsをデバッグ実行したとたんに以下のエラーメッセージが出てAzure Functionsのホストが落ちます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box ng-box">
<p>The listener for function &#8216;Function1&#8217; was unable to start.</p>



<p>The listener for function &#8216;Function1&#8217; was unable to start. Azure.Storage.Blobs: Service request failed.</p>



<p>Status: 403 (Forbidden)</p>



<p>Content:</p>



<p>（中略）</p>



<p>An unhandled exception has occured. Host is shutting down.</p>



<p>Microsoft.Azure.Storage.Common: Forbidden. </p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>こいつのせいで長らくlocal.settings.jsonにはAzureクラウド環境の実ストレージアカウントを指定してローカル実行を行っていました。そうするとFunctionsホストはエラーにならずにBLOBトリガーは実行できました。が、local.settings.jsonに実環境のストレージアカウントへの接続文字列を保持しなくてはならず悪手であることは間違いありません。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc2">解決策：プロキシ×ローカル環境でBLOBトリガーなAzure Functionsを動かす方法</span></h3>



<p>解決策としては、ローカルPCのシステム環境変数に以下の値を設定することです。<span class="bold-red">※要PC再起動</span></p>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2023/02/20230226_1.png" alt="" class="wp-image-4329" width="492" height="126" srcset="https://star-moon-sun.com/wp-content/uploads/2023/02/20230226_1.png 656w, https://star-moon-sun.com/wp-content/uploads/2023/02/20230226_1-300x77.png 300w" sizes="(max-width: 492px) 100vw, 492px" /></figure>



<figure class="wp-block-table aligncenter"><table><thead><tr><th>変数名</th><th>変数値</th></tr></thead><tbody><tr><td>no_proxy</td><td>localhost,127.0.0.1</td></tr></tbody></table></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これでプロキシ環境下でもUseDevelopmentStorage=trueでAzuriteに接続し、ローカル環境でBLOBトリガーを機能させることができました。</p>



<p>また、PCのシステム環境変数に設定せずに、local.setting.jsonに「no_proxy: localhost,127.0.0.1」を指定しても<span class="marker-under-red">403(Forbidden)が発生して機能しません</span>でした。</p>



<p>なぜなのかはよくわからんｗ</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">問題2：Microsoft Defender for Cloudの課金が高額になっている</span></h2>



<p>クラウドセキュリティ態勢管理ツール（CSPM）として、とっても優れていると思われるMicrosoft Defender for Cloudですが、その中のストレージアカウントの保護を司る「Microsoft Defender for Storage」の請求がとっても高額になって困り果てた件。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-official">

<a rel="noopener" target="_blank" href="https://azure.microsoft.com/ja-jp/products/defender-for-cloud/" title="Microsoft Defender for Cloud | Microsoft Security" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fazure.microsoft.com%2Fja-jp%2Fproducts%2Fdefender-for-cloud%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Microsoft Defender for Cloud | Microsoft Security</div><div class="blogcard-snippet external-blogcard-snippet">Explore Microsoft Defender for Cloud, a security solution and CNAPP that protects cloud‑native application development a...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://azure.microsoft.com/ja-jp/products/defender-for-cloud/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">azure.microsoft.com</div></div></div></div></a>
</div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-detail">

<a rel="noopener" target="_blank" href="https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/defender-for-storage-introduction" title="Storage のMicrosoft Defenderとは - Microsoft Defender for Cloud" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Storage のMicrosoft Defenderとは - Microsoft Defender for Cloud</div><div class="blogcard-snippet external-blogcard-snippet">データとワークロードを保護するための Microsoft Defender for Storage の利点、機能、およびセキュリティ機能について説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://learn.microsoft.com/ja-jp/azure/defender-for-cloud/defender-for-storage-introduction" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">learn.microsoft.com</div></div></div></div></a>
</div>



<p>数百MBのBLOBストレージへのファイル保管のみなのに想定では2,000円程度のはずが、なぜか7,000円オーバーの請求となっていた。</p>



<p>コスト分析 (プレビュー)でサービスごとの課金額を確認すると、「Advanced Threat Protection」サービスとして、Microsoft Defender for Storageの課金として発生しておる。やっちまったなぁ。。。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Microsoft Defender for Storageの高額課金の原因</span></h3>



<p>なぜ、こんなに高額課金になったのかを調査した結果、「GetBlobProperties」というAPIが数秒単位に呼び出されていた。</p>



<p>したがってMicrosoft Defender for Storageの方でもこの操作を監視対象のトランザクションとして課金が発生したのかと想定される。</p>



<p>ちなみにこのGetBlobPropertiesがなんのBLOBに対して呼び出されていたかというと、<span class="fz-24px"><span class="fz-28px"><span class="bold-red">Azure FunctionsのBLOBトリガーで処理したファイル</span></span></span>に対して呼び出されていた。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">解決策：BLOBトリガーで処理したファイルを削除する</span></h3>



<p>BLOBトリガーなAzure Functionsの処理が完了して<span class="bold-blue">不要になった</span>百数十のファイルをコンテナー内にそのまま放置しており、そのすべてのファイルがGetBlobPropertiesのスキャン対象となっているっぽいので、すべて削除を行って様子見を行いました。</p>



<p>結果、Advanced Threat Protectionの課金額は一気に下がりました。めでたしめでたし♪</p>



<p>ちなみに、他の解決策としては、</p>



<ul class="wp-block-list">
<li>BLOBトリガーなAzure Functionsで処理した後、対象BLOBファイルを別コンテナーに移す。</li>



<li>BLOBトリガーなAzure Functionsを、EventGridトリガーやQueueトリガーに置き換える。</li>
</ul>



<p>という解決策でもOKかと。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以上、BLOBトリガーなAzure Functionsのハマりどころ二点でした。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="4137"
					data-ulike-nonce="c0702e5c26"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_4137"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2023/02/26/work/blobtrigger-trap/">Azure FunctionsのBLOBトリガー利用時の罠2選</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2023/02/26/work/blobtrigger-trap/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>「Azure FunctionsでもEntityFrameworkのコードファーストで開発を行いたいんじゃ！」の巻</title>
		<link>https://star-moon-sun.com/2023/01/07/work/entityframework-in-azurefunctions/</link>
					<comments>https://star-moon-sun.com/2023/01/07/work/entityframework-in-azurefunctions/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sat, 07 Jan 2023 09:51:17 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=4211</guid>

					<description><![CDATA[<p>最近Entity Frameworkを知りました。いまさらです。生きててすみません。 聞いたことはありましたが、いままでのやり方に固執・執着・思考停止（※ほんと良くないですよね・・・）し、あまり気にもとめてなかったのです [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2023/01/07/work/entityframework-in-azurefunctions/">「Azure FunctionsでもEntityFrameworkのコードファーストで開発を行いたいんじゃ！」の巻</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>最近Entity Frameworkを知りました。いまさらです。生きててすみません。</p>



<p>聞いたことはありましたが、いままでのやり方に固執・執着・思考停止（※ほんと良くないですよね・・・）し、あまり気にもとめてなかったのですが、実際いろいろやってみたら「あーこれは楽だ。きっと実務がはかどる。」とちょっと感動を覚えましたので投稿したいと思います。</p>



<p>それにしてもEntityFramework、.NET Framework 3.5 SP1の頃から実装されていたなんてちょっとビックリしました。初期の頃は今の使い勝手とはだいぶ違うかもしれませんが、もったいないことしたなぁと・・・。まぁ過去を悔やんでても仕方ないので前向いていきましょう。</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a><ol><li><a href="#toc2" tabindex="0">本日のゴール</a></li><li><a href="#toc3" tabindex="0">環境とか</a></li></ol></li><li><a href="#toc4" tabindex="0">実装</a><ol><li><a href="#toc5" tabindex="0">新規Azure Functionsプロジェクトの作成</a></li><li><a href="#toc6" tabindex="0">NuGetパッケージマネージャーからパッケージをインストール</a></li><li><a href="#toc7" tabindex="0">EntityFrameworkCoreのコードファースト用コードを追加</a></li><li><a href="#toc8" tabindex="0">コンテキストのファクトリークラスコードの追加</a></li><li><a href="#toc9" tabindex="0">DIパターンの実装</a></li><li><a href="#toc10" tabindex="0">local.settings.jsonにSQLServer接続文字列の追加</a></li><li><a href="#toc11" tabindex="0">マイグレーションの実行</a></li><li><a href="#toc12" tabindex="0">Azure FunctionsからEFCoreを利用してDBアクセス</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<h3 class="wp-block-heading"><span id="toc2">本日のゴール</span></h3>



<p>Azure FunctionsでEFCoreのコードファースト開発を行う最初の一歩を実装します。</p>



<p>EntityFrameworkのより深く広い機能やコードファーストでリレーショナルなモデルを構築するような部分には触れてません。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc3">環境とか</span></h3>



<p>開発環境：Microsoft Visual Studio 2022 Community</p>



<p>データベース：Microsoft SQLServer 2019 Express</p>



<p>Azure Functionsランタイム：.NET 6(LTS)</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<br>



<h2 class="wp-block-heading"><span id="toc4">実装</span></h2>



<h3 class="wp-block-heading"><span id="toc5">新規Azure Functionsプロジェクトの作成</span></h3>



<p>①まずはVisualStudioを起動し、Azure Functionsを新規プロジェクトとして作成していきます。「新しいプロジェクトの作成」を選択します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_001.jpg"><img decoding="async" width="1017" height="681" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_001.jpg" alt="" class="wp-image-4215" style="width:763px;height:511px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_001.jpg 1017w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_001-300x201.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_001-768x514.jpg 768w" sizes="(max-width: 1017px) 100vw, 1017px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②テンプレートとして「Azure Functions」を選択します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_002.jpg"><img decoding="async" width="1019" height="679" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_002.jpg" alt="" class="wp-image-4216" style="width:764px;height:509px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_002.jpg 1019w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_002-300x200.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_002-768x512.jpg 768w" sizes="(max-width: 1019px) 100vw, 1019px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③プロジェクト名や保存場所を指定したら「作成」ボタンを押下します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_003.jpg"><img decoding="async" width="1017" height="678" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_003.jpg" alt="" class="wp-image-4217" style="width:763px;height:509px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_003.jpg 1017w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_003-300x200.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_003-768x512.jpg 768w" sizes="(max-width: 1017px) 100vw, 1017px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>④ランタイムとして「.NET 6.0(LTS)」を選択し、トリガーは「Http trigger」を選択します。「作成」ボタンを押下しましょう。Azure Functionsのテンプレコードが作成されると思います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_004.jpg"><img decoding="async" width="1024" height="712" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_004-1024x712.jpg" alt="" class="wp-image-4218" style="width:768px;height:534px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_004-1024x712.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_004-300x208.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_004-768x534.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_004.jpg 1029w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">NuGetパッケージマネージャーからパッケージをインストール</span></h3>



<p>EntityFrameworkCore（＋DI（依存性注入））を利用する上で必要となるパッケージをインストールします。</p>



<p>必要なパッケージは以下の通りです。</p>



<ul class="wp-block-list">
<li>Microsoft.EntityFrameworkCore</li>



<li>Microsoft.EntityFrameworkCore.Design</li>



<li>Microsoft.EntityFrameworkCore.SqlServer</li>



<li>Microsoft.EntityFrameworkCore.Tools</li>



<li>Microsoft.Azure.Functions.Extensions</li>
</ul>



<p>①「ツール」メニューから「NuGetパッケージマネージャー」－「ソリューションのNuGetパッケージの管理」を選択します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_011.jpg"><img decoding="async" width="787" height="614" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_011.jpg" alt="" class="wp-image-4223" style="width:590px;height:461px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_011.jpg 787w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_011-300x234.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_011-768x599.jpg 768w" sizes="(max-width: 787px) 100vw, 787px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②参照タブで「EntityFramework」と検索し、表示された「Microsoft.EntityFrameworkCore」パッケージをプロジェクトにインストールします。この時、<span class="marker-under-red">Azure Functionsのランタイムバージョンが.NET6ならば、バージョンを「6.X.X」に指定するのを忘れないようにしましょう。</span>「インストール」ボタンを押下します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_012.jpg"><img decoding="async" width="1024" height="531" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_012-1024x531.jpg" alt="" class="wp-image-4224" style="width:768px;height:398px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_012-1024x531.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_012-300x156.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_012-768x399.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_012-1536x797.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_012.jpg 1559w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②同様に「Microsoft.EntityFrameworkCore.Design」、「Microsoft.EntityFrameworkCore.SqlServer」、「Microsoft.EntityFrameworkCore.Tools」をバージョンを考慮してインストールします。「Microsoft.Azure.Functions.Extensions」は最新版のインストールでOKです。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_013.jpg"><img decoding="async" width="1024" height="644" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_013-1024x644.jpg" alt="" class="wp-image-4225" style="width:768px;height:483px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_013-1024x644.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_013-300x189.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_013-768x483.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_013.jpg 1273w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc7">EntityFrameworkCoreのコードファースト用コードを追加</span></h3>



<p>次に対象のテーブルとマップするエンティティクラスを用意していきます。今回は簡単な例として作るので、IdフィールドとNameフィールドを保持するUserテーブルが出来上がるようにコーディングしていきます。</p>



<p>①まずはエンティティをフォルダーに整理したいのでModelsフォルダーを追加します。プロジェクトを右クリックし、「追加」－「新しいフォルダー」を選択しましょう。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_005.jpg"><img decoding="async" width="1024" height="743" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_005-1024x743.jpg" alt="" class="wp-image-4219" style="width:768px;height:557px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_005-1024x743.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_005-300x218.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_005-768x557.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_005.jpg 1085w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Modelsフォルダーが追加されました。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_006.jpg"><img decoding="async" width="417" height="475" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_006.jpg" alt="" class="wp-image-4221" style="width:313px;height:356px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_006.jpg 417w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_006-263x300.jpg 263w" sizes="(max-width: 417px) 100vw, 417px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②Modelsフォルダー内にUserエンティティクラスを追加します。Modelsフォルダーを右クリックし、「追加」－「新しい項目」を選択します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="467" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_007-1024x467.jpg" alt="" class="wp-image-4222" style="width:768px;height:350px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_007-1024x467.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_007-300x137.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_007-768x350.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_007.jpg 1052w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③「クラス」を選択し、名前に「User.cs」を指定して、「追加」ボタンを押下します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_008.jpg"><img decoding="async" width="942" height="655" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_008.jpg" alt="" class="wp-image-4227" style="width:707px;height:491px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_008.jpg 942w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_008-300x209.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_008-768x534.jpg 768w" sizes="(max-width: 942px) 100vw, 942px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>④追加したUser.csを以下のように実装します。ちなみにIdというフィールド名を指定すると自動的にオートナンバーのプライマリーキーで構築されます。自動採番したくない場合は、DatabaseGenerated属性のDatabaseGeneratedOption.Noneを指定することで実現可能です。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CodeFirstExampleFunctionApp.Models
{
    [Table("User")]
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>⑤同様にDbContextクラスもModelsフォルダー内に追加しましょう。こちらも「クラス」を選択し、名前は任意の名前を指定して、「追加」ボタンを押下します。今回は「MyContext.cs」とします。<span class="marker-under">名前を「DbContext.cs」にはしないほうがいいと思います。多分だめです。</span></p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_010.jpg"><img decoding="async" width="941" height="656" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_010.jpg" alt="" class="wp-image-4226" style="width:706px;height:492px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_010.jpg 941w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_010-300x209.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_010-768x535.jpg 768w" sizes="(max-width: 941px) 100vw, 941px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>⑦追加したMyContextクラスもコードを記述します。基本的にはDbContextを継承したクラスを実装していく感じです。DbSet型はコレクションなので複数形にするのがいいようです。ただ、前項のUserオブジェクトで[Table]属性を省略した場合はおそらく実テーブルもUsersと複数形で構築されると思います。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace CodeFirstExampleFunctionApp.Models
{
    public class MyContext : DbContext
    {
        public MyContext(DbContextOptions options) : base(options)
        {

        } 

        public DbSet&lt;User&gt; Users { get; set; }
    }
}</pre></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc8">コンテキストのファクトリークラスコードの追加</span></h3>



<p>DbContextインスタンスを生成してくれるファクトリークラスコードを追加します。なぜ必要かなんですが、どうもこのファクトリークラスを経由してDbCotnextオブジェクトを生成しないと、後述のコマンド実行時に接続文字列を引き渡すことができなかったからです。</p>



<p>①場所はどこでもいいと思いますが、今回はModelsフォルダー内に「MyContextFactory.cs」の名前でクラスを追加します。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②追加したクラスに以下のコードを実装します。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;

namespace CodeFirstExampleFunctionApp.Models
{
    public class MyContextFactory : IDesignTimeDbContextFactory&lt;MyContext&gt;
    {
        public MyContext CreateDbContext(string[] args)
        {
            var optionsBuilder = new DbContextOptionsBuilder&lt;MyContext&gt;();
            string connectionString = Environment.GetEnvironmentVariable("SqldbConnection");
            optionsBuilder.UseSqlServer(connectionString);

            return new MyContext(optionsBuilder.Options);
        }
    }
}</pre></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc9">DIパターンの実装</span></h3>



<p>EntityFrameworkCoreでDbContextを扱うときはDI（依存オブジェクト注入）パターンを使うのがベストです。DIを実装していきます。</p>



<p>①プロジェクトを右クリックし、「追加」－「新しい項目」を選択します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014_0.jpg"><img decoding="async" width="1024" height="743" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014_0-1024x743.jpg" alt="" class="wp-image-4231" style="width:768px;height:557px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014_0-1024x743.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014_0-300x218.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014_0-768x557.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014_0.jpg 1085w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②「クラス」を選択し、名前を「Startup.cs」とし、「追加」ボタンを押下します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014.jpg"><img decoding="async" width="943" height="656" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014.jpg" alt="" class="wp-image-4228" style="width:707px;height:492px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014.jpg 943w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014-300x209.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_014-768x534.jpg 768w" sizes="(max-width: 943px) 100vw, 943px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③追加したStartup.csにコードを記述します。以下の通りにコードを追加してください。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using CodeFirstExampleFunctionApp.Models;

[assembly: FunctionsStartup(typeof(CodeFirstExampleFunctionApp.Startup))]
namespace CodeFirstExampleFunctionApp
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            string connectionString = Environment.GetEnvironmentVariable("SqldbConnection");

            builder.Services.AddDbContext&lt;MyContext&gt;(options =&gt; options.UseSqlServer(connectionString));
        }
    }
}</pre></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc10">local.settings.jsonにSQLServer接続文字列の追加</span></h3>



<p>local.settings.json、つまり、環境変数にSQLServerの接続文字列を追加しておきます。前項で追加したStartup.cs内で環境変数から接続文字列の読み取りが行われ、DbContextに渡される流れです。</p>



<p>①local.settings.jsonに以下のコードを追加します。サーバー名やデータベース名は自信の環境に合わせ読み替えてください。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">"SqldbConnection": "Server=localhost\\SQLEXPRESS;Database=ExampleDB;Trusted_Connection=True;"</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>接続文字列追加後のlocal.settings.jsonは以下のような感じになるかと思います。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">{
    "IsEncrypted": false,
    "Values": {
      "AzureWebJobsStorage": "UseDevelopmentStorage=true",
      "FUNCTIONS_WORKER_RUNTIME": "dotnet",
      "SqldbConnection": "Server=localhost\\SQLEXPRESS;Database=ExampleDB;Trusted_Connection=True;"
  }
}</pre></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc11">マイグレーションの実行</span></h3>



<p>マイグレーション、日本語に訳すと、移行と言ったりしますが、マイグレーションを行うことでその時点でのデータベースへの変更内容をマイグレーションファイルに記録しておき、随時データベースに反映させることができます。</p>



<p>まずはマイグレーションファイルの追加を行っていきます。</p>



<p>①「ツール」メニューの「NuGetパッケージマネージャー」から今度は「パッケージマネージャーコンソール」を起動します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_016.jpg"><img decoding="async" width="817" height="583" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_016.jpg" alt="" class="wp-image-4236" style="width:613px;height:437px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_016.jpg 817w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_016-300x214.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_016-768x548.jpg 768w" sizes="(max-width: 817px) 100vw, 817px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②パッケージマネージャーコンソールウインドウが表示されるので、まずは環境変数に接続文字列をセットします。「$env:SqldbConnection=&#8221;(SQLServer接続文字列)&#8221;」と入力し、Enterキーを押下します。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box alert-box">
<p>ちなみに環境変数のセットを忘れた場合は、以下のようなエラーメッセージが表示されます。</p>



<p>System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.<br>&#8212;&gt; System.ArgumentNullException: Value cannot be null. (Parameter &#8216;connectionString&#8217;)<br>at Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty(String value, String parameterName)<br>at Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer(DbContextOptionsBuilder optionsBuilder, String connectionString, Action<code>1</code></p>



<p><code> （中略）</code><br>Exception has been thrown by the target of an invocation.</p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③次に、「add-migration (任意のバージョン管理名)」と入力し、Enterキーを押下しましょう。今回は初回の移行なので、「add-migration InitialCreate」としています。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_017.jpg"><img decoding="async" width="826" height="386" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_017.jpg" alt="" class="wp-image-4237" style="width:620px;height:290px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_017.jpg 826w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_017-300x140.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_017-768x359.jpg 768w" sizes="(max-width: 826px) 100vw, 826px" /></a></figure>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box alert-box">
<p>「add-migration : 用語 &#8216;add-migration&#8217; は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。」エラーが発生したときはおそらく「Microsoft.EntityFrameworkCore.Tools」パッケージのインストールが行われていない可能性があるのでもう一度確認してみてください。</p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ちなみに、コンテキストクラスの生成にファクトリークラスを追加して行いましたが、local.settings.jsonに設定した接続文字列はあくまで、Azure Functions実行時にロードされるが、マイグレーションコマンド実行時には別の方法で渡す必要があるのかなぁという感じです。ファクトリークラスを経由しないでadd-migrationを実行すると以下のエラーメッセージが表示されます。</p>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box ng-box">
<p>Unable to create an object of type &#8216;MyContext&#8217;. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728</p>
</div>



<p>リンク先を見ると、「デザイン時ファクトリーを利用して」とあるのでひとまず他のやり方はおいておいてファクトリークラス経由でコンテキストクラスオブジェクトを生成するのが無難そうです。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference-link">

<a rel="noopener" target="_blank" href="https://go.microsoft.com/fwlink/?linkid=851728" title="Design-time DbContext Creation - EF Core" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Design-time DbContext Creation - EF Core</div><div class="blogcard-snippet external-blogcard-snippet">Strategies for creating a design-time DbContext with Entity Framework Core</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://go.microsoft.com/fwlink/?linkid=851728" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">go.microsoft.com</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>④うまくマイグレーションが成功すると、以下の画面のようになり、Migrationsフォルダーとファイルが追加されると思います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_022.jpg"><img decoding="async" width="1024" height="434" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_022-1024x434.jpg" alt="" class="wp-image-4240" style="width:768px;height:326px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_022-1024x434.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_022-300x127.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_022-768x326.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_022-1536x651.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_022.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>⑤マイグレーションファイルができたら、その内容をもとにデータベースに変更を反映させます。パッケージマネージャーコンソールから「update-database」と入力し、Enterキーを押下しましょう。</p>



<p>以下の画面のように表示され、最後にDoneとなっていたらデータベースへの反映は完了です。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_023.jpg"><img decoding="async" width="750" height="364" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_023.jpg" alt="" class="wp-image-4241" style="width:563px;height:273px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_023.jpg 750w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_023-300x146.jpg 300w" sizes="(max-width: 750px) 100vw, 750px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>⑥SSMSからデータベース内容を確認すると、データベースとUserテーブルが作成され、IDフィールドとNameフィールドが存在するのが確認できると思います。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_024.jpg"><img decoding="async" width="819" height="581" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_024.jpg" alt="" class="wp-image-4242" style="width:614px;height:436px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_024.jpg 819w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_024-300x213.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_024-768x545.jpg 768w" sizes="(max-width: 819px) 100vw, 819px" /></a></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc12">Azure FunctionsからEFCoreを利用してDBアクセス</span></h3>



<p>EFCoreのコードファースト、初回構築はうまくいきました。ひとまずコードファーストとしてはここまでですが、最後にAzure FunctionsからUserテーブルに書き込みができるかを確認してみます。</p>



<p>①まずはテンプレで作成されたAzureFunctionsコードをDIでDbContextを受け取れるように修正します。また、URLパラメーターで受け取ったNameパラメーターでUserテーブルに追加するようにし、登録内容（自動採番されたIDとユーザー名）をブラウザーに返すように実装します。以下、そのコードです。</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using CodeFirstExampleFunctionApp.Models;

namespace CodeFirstExampleFunctionApp
{
    public class Function1
    {
        private readonly MyContext dbContext;
        
        public Function1(MyContext context)
        {
            dbContext = context;
        }

        [FunctionName("Function1")]
        public async Task&lt;IActionResult&gt; Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            await dbContext.AddAsync(new User() { Name = name });
            await dbContext.SaveChangesAsync();

            // 自動採番された最後のIDを取得する
            int id = dbContext.Users.Max(x =&gt; x.Id);

            return new OkObjectResult($"ユーザーを登録しました。ID={id}、ユーザー名={name}");
        }
    }
}</pre></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>②Azure Functionsをデバッグ実行します。表示されたURLをコピーしましょう。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_026.jpg"><img decoding="async" width="1024" height="331" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_026-1024x331.jpg" alt="" class="wp-image-4244" style="width:768px;height:248px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_026-1024x331.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_026-300x97.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_026-768x248.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_026.jpg 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>③コピーしたURLをブラウザーのアドレスバーに貼り付け、後ろに「?name=(任意の名前)」を付加し、Enterキーを押下します。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_027.jpg"><img decoding="async" width="589" height="94" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_027.jpg" alt="" class="wp-image-4245" style="width:442px;height:71px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_027.jpg 589w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_027-300x48.jpg 300w" sizes="(max-width: 589px) 100vw, 589px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>④正常にデータベースへ更新されれば以下のようにレスポンスメッセージが返ってくると思います。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_028.jpg"><img decoding="async" width="524" height="163" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_028.jpg" alt="" class="wp-image-4246" style="width:393px;height:122px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_028.jpg 524w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_028-300x93.jpg 300w" sizes="(max-width: 524px) 100vw, 524px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>SSMSでUserテーブルの中を確認すると、ちゃんとIDが自動採番されレコードが登録されたのではないでしょうか。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_029.jpg"><img decoding="async" width="704" height="420" src="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_029.jpg" alt="" class="wp-image-4247" style="width:528px;height:315px" srcset="https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_029.jpg 704w, https://star-moon-sun.com/wp-content/uploads/2023/01/20230106_029-300x179.jpg 300w" sizes="(max-width: 704px) 100vw, 704px" /></a></figure>



<p></p>



<p>以上、Azure FunctionsでもEntityFrameworkCoreのコードファーストでがっつり開発できそうなことが確認できました。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<br>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="4211"
					data-ulike-nonce="e045cf7b5d"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_4211"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>The post <a href="https://star-moon-sun.com/2023/01/07/work/entityframework-in-azurefunctions/">「Azure FunctionsでもEntityFrameworkのコードファーストで開発を行いたいんじゃ！」の巻</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2023/01/07/work/entityframework-in-azurefunctions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Braveブラウザー、はじめました。</title>
		<link>https://star-moon-sun.com/2022/06/29/work/brave-getstarted/</link>
					<comments>https://star-moon-sun.com/2022/06/29/work/brave-getstarted/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Wed, 29 Jun 2022 11:58:11 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=3982</guid>

					<description><![CDATA[<p>ある時の会社での一コマ。 目次 What&#8217;s Brave？Brave Rewardsクリエイター登録を行ってみたBrave Rewardsクリエイター登録自サイトをBrave Rewardsに登録サーバーに認 [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2022/06/29/work/brave-getstarted/">Braveブラウザー、はじめました。</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>ある時の会社での一コマ。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-13 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2019/01/リュウグウノツカイ.png" alt="パイセン" class="speech-icon-image"/></figure><div class="speech-name">パイセン</div></div><div class="speech-balloon">
<p>ブレイブって言うブラウザ知ってる？</p>



<p>広告表示もされないで快適にWEBサイトを閲覧できるんだで！</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2018/12/myProfile_Rev.png" alt="sei" class="speech-icon-image"/></figure><div class="speech-name">sei</div></div><div class="speech-balloon">
<p>しらん。</p>



<p>っていうか、ブラウザはChromeしか使わん。</p>



<p>なんてったってGoogle信者だから。</p>



<p>（心の声：広告表示ないとか、広告表示提供してる</p>



<p>身からしたら脅威でしかないな・・・）</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-13 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2019/01/リュウグウノツカイ.png" alt="パイセン" class="speech-icon-image"/></figure><div class="speech-name">パイセン</div></div><div class="speech-balloon">
<p>おまけにバットっていう仮想通貨がそのブラウザ使ってれば</p>



<p>どんどん貯まってくんよ？どうよ？使ってみんよ？</p>
</div></div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2018/12/myProfile_Rev.png" alt="sei" class="speech-icon-image"/></figure><div class="speech-name">sei</div></div><div class="speech-balloon">
<p>は、はぁ・・・。</p>



<p>（心の声：いや、聞いたことねぇブラウザの上、</p>



<p>仮想通貨貯まるとか怪しさ満点だんべ。ぜってー使わんわｗ）</p>
</div></div>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">What&#8217;s Brave？</a></li><li><a href="#toc2" tabindex="0">Brave Rewardsクリエイター登録を行ってみた</a><ol><li><a href="#toc3" tabindex="0">Brave Rewardsクリエイター登録</a></li><li><a href="#toc4" tabindex="0">自サイトをBrave Rewardsに登録</a></li><li><a href="#toc5" tabindex="0">サーバーに認証用ファイルの配置</a></li><li><a href="#toc6" tabindex="0">登録サイトの所有権の認証</a></li><li><a href="#toc7" tabindex="0">Brave RewardsクリエイターアカウントとbitFlyerアカウントの連携</a></li></ol></li><li><a href="#toc8" tabindex="0">さいごに</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">What&#8217;s Brave？</span></h2>



<p>そんなこんなでまったくもって導入する気はなかったのだが、パイセンのあまりの勧め具合と、最近ちょっと仮想通貨が気になり、口座開設しようか悩んでいたのもあり、軽い気持ちでBraveに関して調べてみました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-official">

<a rel="noopener" target="_blank" href="https://brave.com/ja/" title="進化したユーザーファーストのブラウザ | Brave" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/cocoon-resources/blog-card-cache/f3a26c56129ee229641dbfd9e21b103d.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">進化したユーザーファーストのブラウザ | Brave</div><div class="blogcard-snippet external-blogcard-snippet">Braveブラウザは、PC、Mac、モバイル端末で使用できる高速でプライベートかつ安全なWebブラウザです。今すぐダウンロードして、トラッキングソフトウェアのブロックによるデータとバッテリーを節約した、より高速な広告のないブラウジング体験を...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://brave.com/ja/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">brave.com</div></div></div></div></a>
</div>



<p>Braveブラウザーの特徴は、</p>



<ul class="wp-block-list"><li>Chromiumをベースとした無料のオープンソースWEBブラウザー</li><li>あらゆる広告をデフォルトでブロック</li><li>広告を遮断するため、ページの読み込みを高速化でき、通信データも節約できる。</li><li>Braveが提供する信頼された広告を表示することで仮想通貨「Basic Attention Token」、通称BATを取得することができる。</li><li>bitFlyerと提携しており、取得したBATはbitFlyerの口座で受け取れる。</li><li>Brave Rewardsと呼ばれるコンテンツ制作者への応援機能、つまり匿名でのBATによる投げ銭機能を提供している</li></ul>



<p>しかも調べていて、入れてみよう！となった理由に、Braveブラウザーの開発者がJavaScriptの開発者として知られるブレンダン・アイクというビッグネームであるというのが大きなポイントでした。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-r sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2018/12/myProfile_Rev.png" alt="sei" class="speech-icon-image"/></figure><div class="speech-name">sei</div></div><div class="speech-balloon">
<p>怪しいとか言ってごめんちゃい。</p>



<p>私の認識不足です。。。</p>
</div></div>



<p>ってことでBraveブラウザー入れてみました。導入方法は割愛。なんも難しいこともなく、他のブラウザーからのブックマークなどのインポート機能もあるため、あっという間に完了です。</p>



<p></p>



<p>ちなみにこのサイトをChromeとBraveで表示して違いを見てみました。</p>



<p>Chromeでの表示。赤枠で囲ったところのようにばっちりアドセンス広告が表示されています。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/00Chromeでのサイト表示.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/00Chromeでのサイト表示-1024x616.jpg" alt="" class="wp-image-3985" width="768" height="462" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/00Chromeでのサイト表示-1024x616.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/00Chromeでのサイト表示-300x181.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/00Chromeでのサイト表示-768x462.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/00Chromeでのサイト表示.jpg 1479w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>そしてこちらがBraveで表示したサイトの内容。広告が表示されていないことが一目瞭然かと思います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示-1024x574.jpg" alt="" class="wp-image-3984" width="768" height="431" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示-1024x574.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示-300x168.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示-768x430.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/06/00braveでのサイト表示.jpg 1439w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>bitFlyerアカウントとの連携も可能ですので、bitFlyerに口座を開設している方は連携を行うことができると思います。自分はこのためにbitFlyer口座の新規開設を行いました。</p>



<p>BraveとbitFlyerアカウントの連携方法は以下の動画で確認できます。</p>



<figure class="wp-block-embed aligncenter is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="BraveとbitFlyerアカウントの連携方法" width="1256" height="707" src="https://www.youtube.com/embed/rRX2tgZb7ys?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">Brave Rewardsクリエイター登録を行ってみた</span></h2>



<p>今回の一番のミッションはBraveブラウザーを利用することではなく、実はBrave Rewardsクリエイター登録を行うことです。</p>



<p>Brave Rewardsのクリエイター登録を行うことで、サイト訪問者からBATでの投げ銭を受け取ることができます。</p>



<p>つまり、広告をサイトに表示することで収益化をはかっていた形から、サイト訪問者からのBATによる応援で収益化をはかるビジネスモデルへと変わっていくわけです。今までになくサイトコンテンツの質が重要になることと、定期的にBATを得るためには常連さん、要するにリピーターのサイト訪問者がどれだけいるかが重要になってくるような気がします。</p>



<p>まぁオレのサイトに投げ銭してくれる人がいるとは思えませんが、微かな望みに期待してBrave Rewardsクリエイター登録やっていきたいと思います。</p>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc3">Brave Rewardsクリエイター登録</span></h3>



<p>まずはややこしいのですが<a rel="noopener" target="_blank" href="https://creators.brave.com/?locale=ja">Brave Rewardsクリエイター向けサイト<span class="fa fa-share-square-o external-icon anchor-icon"></span></a>に行き、「登録」をクリックします。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-official">

<a rel="noopener" target="_blank" href="https://creators.brave.com/?locale=ja" title="Earn more for content you publish to the web - Brave Creators" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fcreators.brave.com%2F%3Flocale%3Dja?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Earn more for content you publish to the web - Brave Creators</div><div class="blogcard-snippet external-blogcard-snippet">Viewers who use the Brave Browser may have contributed money to you while surfing the web through Brave Creators. Simply...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://creators.brave.com/?locale=ja" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">creators.brave.com</div></div></div></div></a>
</div>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/01bravecreatorregist.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/01bravecreatorregist-1024x592.jpg" alt="" class="wp-image-3986" width="768" height="444" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/01bravecreatorregist-1024x592.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/01bravecreatorregist-300x174.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/01bravecreatorregist-768x444.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/01bravecreatorregist-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/06/01bravecreatorregist.jpg 1440w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面になるので、メールアドレスを入力し、規約に同意したうえで「新規登録」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/02bravecreatorregist2.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/02bravecreatorregist2-1024x596.jpg" alt="" class="wp-image-3987" width="768" height="447" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/02bravecreatorregist2-1024x596.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/02bravecreatorregist2-300x175.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/02bravecreatorregist2-768x447.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/02bravecreatorregist2.jpg 1438w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面が表示されたら、あとは届いたメールにしたがい認証を行うだけです。MFAの設定を行うか否かの選択があると思うのでなるべくMFAを設定しましょう。自分は認証アプリとしてMicrosoft Authenticatorを利用しているのでスマホでMicrosoft Authenticatorを起動しQRコードを読み取ってMFAを設定しました。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/03bravecreatorregist3.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/03bravecreatorregist3-1024x596.jpg" alt="" class="wp-image-3988" width="768" height="447" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/03bravecreatorregist3-1024x596.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/03bravecreatorregist3-300x175.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/03bravecreatorregist3-768x447.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/03bravecreatorregist3.jpg 1433w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">自サイトをBrave Rewardsに登録</span></h3>



<p>登録が完了したらBrave Rewardsクリエイターサイトへサインインします。サインインは登録したメールアドレスを入力すると、サインイン用のURLリンクが毎回生成されそのリンクからのみサインインが可能となる仕組みです。MFA設定した方は認証アプリのコードを確認し画面に入力すればサインインできます。</p>



<p>クリエイター向けサイトのダッシュボードです。</p>



<p>まだ自分のサイトが登録されていないのでサイトを登録していきましょう。「＋チャンネルを追加」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/04サイト登録.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/04サイト登録-1024x602.jpg" alt="" class="wp-image-3989" width="768" height="452" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/04サイト登録-1024x602.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/04サイト登録-300x176.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/04サイト登録-768x452.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/04サイト登録.jpg 1439w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>何を追加するのかを選択する画面になるので、今回はブログサイトを追加するので「ウェブサイト」をクリックします。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/05サイト登録2.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/05サイト登録2.jpg" alt="" class="wp-image-3990" width="721" height="554" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/05サイト登録2.jpg 961w, https://star-moon-sun.com/wp-content/uploads/2022/06/05サイト登録2-300x230.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/05サイト登録2-768x590.jpg 768w" sizes="(max-width: 721px) 100vw, 721px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ドメイン情報の入力画面が表示されます。自サイトのドメイン（http://やhttps://は不要）を入力し、「ページ内でBraveの広告を配信することを許可する」にチェックをつけて、「続ける」をクリックしましょう。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/06サイト登録3.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/06サイト登録3.jpg" alt="" class="wp-image-3991" width="484" height="386" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/06サイト登録3.jpg 645w, https://star-moon-sun.com/wp-content/uploads/2022/06/06サイト登録3-300x240.jpg 300w" sizes="(max-width: 484px) 100vw, 484px" /></a></figure>



<div style="height:70px" aria-hidden="true" class="wp-block-spacer"></div>



<p>サイトの追加に成功すると、認証方法の選択画面が表示されます。つまり、登録しようとしているサイトが本当に自分のサイトかアクセス権の確認を行う手順です。今回は一番簡単と書いてあったので「認証ファイルを使って認証する」で行います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4-1024x573.jpg" alt="" class="wp-image-3992" width="768" height="430" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4-1024x573.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4-300x168.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4-768x430.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/06/07サイト登録4.jpg 1440w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>認証ファイルを使った認証方法の詳細な手順が表示されます。まずは「ダウンロード」をクリックし、認証用ファイルをダウンロードしておきます。ダウンロードした認証用ファイルはこの後の手順でサーバーの「.well-known」フォルダーに配置することになります。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/08認証ファイルダウンロード.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/08認証ファイルダウンロード-1024x595.jpg" alt="" class="wp-image-3993" width="768" height="446" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/08認証ファイルダウンロード-1024x595.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/08認証ファイルダウンロード-300x174.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/08認証ファイルダウンロード-768x446.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/08認証ファイルダウンロード.jpg 1436w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">サーバーに認証用ファイルの配置</span></h3>



<p>先ほどダウンロードした認証用ファイルを自分のサイト上に「.well-known」フォルダーを作成し、配置していきます。自分はエックスサーバーで契約しているのでエックスサーバーのファイルマネージャにアクセスし、自サイトドメインの「public_html」フォルダー内に「.well-known」フォルダーを作成しました。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/09認証ファイルフォルダー作成.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/09認証ファイルフォルダー作成-1024x594.jpg" alt="" class="wp-image-3994" width="768" height="446" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/09認証ファイルフォルダー作成-1024x594.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/09認証ファイルフォルダー作成-300x174.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/09認証ファイルフォルダー作成-768x446.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/09認証ファイルフォルダー作成.jpg 1442w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「.well-known」フォルダーができたら、先ほどダウンロードした認証用ファイル「brave-rewards-verification.txt」をそのままの名前でアップロードしましょう。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/10認証ファイルアップロード.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/10認証ファイルアップロード.jpg" alt="" class="wp-image-4025" width="438" height="406" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/10認証ファイルアップロード.jpg 585w, https://star-moon-sun.com/wp-content/uploads/2022/06/10認証ファイルアップロード-300x278.jpg 300w" sizes="(max-width: 438px) 100vw, 438px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>エックスサーバーの方であれば、以下のようになればOKかと。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/11認証ファイルアップロード後.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/11認証ファイルアップロード後-1024x596.jpg" alt="" class="wp-image-3996" width="768" height="447" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/11認証ファイルアップロード後-1024x596.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/11認証ファイルアップロード後-300x175.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/11認証ファイルアップロード後-768x447.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/11認証ファイルアップロード後.jpg 1437w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<a rel="nofollow noopener" target="_blank" data-atag-id="13" data-post-id="3982" href="https://px.a8.net/svt/ejp?a8mat=3H7XC1+G1IHKI+CO4+6DC69">
<img decoding="async" border="0" width="336" height="280" alt="" src="https://www20.a8.net/svt/bgt?aid=210321793970&wid=001&eno=01&mid=s00000001642001070000&mc=1"></a>
<img decoding="async" border="0" width="1" height="1" src="https://www17.a8.net/0.gif?a8mat=3H7XC1+G1IHKI+CO4+6DC69" alt="">



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">登録サイトの所有権の認証</span></h3>



<p>認証用のファイルの配置ができたら、再度Brave Rewardsクリエイターサイトの認証ファイルを使った認証方法の詳細な手順の画面に戻りましょう。「認証」ボタンがあるのでプッシュ！</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/12認証実行.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/12認証実行-1024x461.jpg" alt="" class="wp-image-3997" width="768" height="346" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/12認証実行-1024x461.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/12認証実行-300x135.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/12認証実行-768x346.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/12認証実行.jpg 1438w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面に戻り、上部に「Channel verified!」が表示されればサイト所有権の認証は無事OKです。</p>



<p>以下の画面のように、自サイトドメインが表示されているのも確認できます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/14認証完了.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/14認証完了-1024x606.jpg" alt="" class="wp-image-3999" width="768" height="455" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/14認証完了-1024x606.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/14認証完了-300x178.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/14認証完了-768x455.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/14認証完了.jpg 1442w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box information-box">
<p>サイト登録が完了したら、「.well-known」フォルダーおよび、認証用ファイルとも不要となるので削除しても大丈夫そうです。おそらく。</p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-icon-box common-icon-box block-box ng-box">
<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/13認証失敗.jpg" alt="" class="wp-image-3998" width="482" height="314" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/13認証失敗.jpg 643w, https://star-moon-sun.com/wp-content/uploads/2022/06/13認証失敗-300x195.jpg 300w" sizes="(max-width: 482px) 100vw, 482px" /></figure>



<p>ちなみに、常時SSL化されているにもかかわらず上のように「HTTPSが有効になっていませんでしたドメインでHTTPSを有効にするか、別の確認方法を選択してください。」といったエラーが出た場合は、「.well-known」フォルダーや認証用ファイルの配置ディレクトリが正しいか確認しましょう。</p>



<p>自分は、ドキュメントルート（エックスサーバーであればpublic_html）の配下に「.well-known」フォルダーを作成するところを、ドメインのルートに配置してしまっていたため以下の認証エラーとなっていたっぽいです。正しく配置したらさらっと認証通りました。</p>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc7">Brave RewardsクリエイターアカウントとbitFlyerアカウントの連携</span></h3>



<p>さぁこれで無事BATを受け取れる環境が整ったかいなぁと思って自サイトを開いてみてみると、「このクリエイターはまだ登録していません。」と表示されています。何かが足らないようです。１日ぐらい放置したが変化なしだったので、再度クリエイターサイトで確認してみます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/15クリエイター登録前.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/15クリエイター登録前-1024x357.jpg" alt="" class="wp-image-4000" width="768" height="268" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/15クリエイター登録前-1024x357.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/15クリエイター登録前-300x105.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/15クリエイター登録前-768x268.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/15クリエイター登録前.jpg 1436w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>なんかヘルプ見たりいろいろ調べると、BATを受け取るウォレットの登録が必要なようです。おそらくこの赤枠で囲ったところで何かするんだろうなぁ・・・とは思って、右上のアカウントのところから設定やらセキュリティやらのところをいじくっていて戻ってみると・・・</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/16bitFlyerアカウントとの連携1.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/16bitFlyerアカウントとの連携1-1024x415.jpg" alt="" class="wp-image-4001" width="768" height="311" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/16bitFlyerアカウントとの連携1-1024x415.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/16bitFlyerアカウントとの連携1-300x122.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/16bitFlyerアカウントとの連携1-768x311.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/16bitFlyerアカウントとの連携1.jpg 1436w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>BAT受け取り用ウォレットのところが「bitFlyerに接続」に変化しました！！ないす。bitFlyerアカウントならもちろん持ってるｗｗｗそれにしてもどんな仕様・・・。ってことで「bitFlyerに接続」をクリックしていきます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/17bitFlyerアカウントとの連携2.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/17bitFlyerアカウントとの連携2-1024x410.jpg" alt="" class="wp-image-4002" width="768" height="308" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/17bitFlyerアカウントとの連携2-1024x410.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/17bitFlyerアカウントとの連携2-300x120.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/17bitFlyerアカウントとの連携2-768x307.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/17bitFlyerアカウントとの連携2.jpg 1439w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>bitFlyerのログイン画面が表示されるので、bitFlyerのアカウントでログインしましょう。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/18bitFlyerアカウントとの連携3.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/18bitFlyerアカウントとの連携3-1024x458.jpg" alt="" class="wp-image-4003" width="768" height="344" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/18bitFlyerアカウントとの連携3-1024x458.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/18bitFlyerアカウントとの連携3-300x134.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/18bitFlyerアカウントとの連携3-768x343.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/18bitFlyerアカウントとの連携3.jpg 1439w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以下の画面で「許可する」をクリックします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/19bitFlyerアカウントとの連携4.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/19bitFlyerアカウントとの連携4-1024x397.jpg" alt="" class="wp-image-4004" width="768" height="298" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/19bitFlyerアカウントとの連携4-1024x397.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/19bitFlyerアカウントとの連携4-300x116.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/19bitFlyerアカウントとの連携4-768x298.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/19bitFlyerアカウントとの連携4.jpg 1440w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Brave Rewardsクリエイターの画面に戻り、無事bitFlyerウォレットと連携していることが確認できると思います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/20bitFlyerアカウントとの連携5.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/20bitFlyerアカウントとの連携5-1024x404.jpg" alt="" class="wp-image-4005" width="768" height="303" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/20bitFlyerアカウントとの連携5-1024x404.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/20bitFlyerアカウントとの連携5-300x118.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/20bitFlyerアカウントとの連携5-768x303.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/20bitFlyerアカウントとの連携5.jpg 1437w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>自サイトを確認してみると無事「認証済」に代わりました。</p>



<p>※認証済になっていない場合はその右の「更新」ボタンをクリックしてみてください。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><a target="_self" href="https://star-moon-sun.com/wp-content/uploads/2022/06/21クリエイター登録後.jpg"><img decoding="async" src="https://star-moon-sun.com/wp-content/uploads/2022/06/21クリエイター登録後-1024x449.jpg" alt="" class="wp-image-4006" width="768" height="337" srcset="https://star-moon-sun.com/wp-content/uploads/2022/06/21クリエイター登録後-1024x449.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/06/21クリエイター登録後-300x132.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/06/21クリエイター登録後-768x337.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/06/21クリエイター登録後.jpg 1439w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc8">さいごに</span></h2>



<p>Braveブラウザー、広告をブロックし、BAT付与といった付加価値もありこれから利用者増えそうな気配がします。</p>



<p>Braveの利用者が増えればBATの価値も上がっていくでしょうか・・・。</p>



<p>ただ、サイトとしてGoogleアドセンスを提供していながら、Braveの広告ブロック機能を紹介する矛盾。難しいですね。サイト配信者としてはアドセンスの恩恵を受けている部分はありますが、１ユーザーとして広告がないブラウジングの快適さは目を見張るものがあります。</p>



<p>パーソナライズされた広告などとても便利な時もありますが、世の流れとしてはプライバシーを守るということが大前提になってきている流れなのかなとBraveを使っていても感じます。</p>



<p>それでも！Braveもいいですが、Googleも好きですから。</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="3982"
					data-ulike-nonce="ef85e7d1c9"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_3982"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2022/06/29/work/brave-getstarted/">Braveブラウザー、はじめました。</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2022/06/29/work/brave-getstarted/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ThinkPad X1 Carbon 2018(6Gen)のSSDをSATAからNVMeに換装した件</title>
		<link>https://star-moon-sun.com/2022/04/17/work/thinkpad-x1-carbon-nvmessd/</link>
					<comments>https://star-moon-sun.com/2022/04/17/work/thinkpad-x1-carbon-nvmessd/#respond</comments>
		
		<dc:creator><![CDATA[sei]]></dc:creator>
		<pubDate>Sun, 17 Apr 2022 12:20:05 +0000</pubDate>
				<category><![CDATA[お仕事]]></category>
		<guid isPermaLink="false">https://star-moon-sun.com/?p=3897</guid>

					<description><![CDATA[<p>こんにちは。seiです。 以前当サイトでも触れていましたが、我が愛機ThinkPad X1 Carbon2018年モデル、500GBのSSDを搭載していますがディスク容量不足気味となってきましたので新規SSDへ換装してみ [&#8230;]</p>
The post <a href="https://star-moon-sun.com/2022/04/17/work/thinkpad-x1-carbon-nvmessd/">ThinkPad X1 Carbon 2018(6Gen)のSSDをSATAからNVMeに換装した件</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></description>
										<content:encoded><![CDATA[<p>こんにちは。seiです。</p>



<p>以前当サイトでも触れていましたが、我が愛機ThinkPad X1 Carbon2018年モデル、500GBのSSDを搭載していますがディスク容量不足気味となってきましたので新規SSDへ換装してみようと思い付き、決行しましたのでその時のことを書いてみます。</p>



<div style="height:68px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">SSDをSATA→NVMeへ交換</a></li><li><a href="#toc2" tabindex="0">おまけ：余ったM2 SSDを有効活用</a><ol><li><a href="#toc3" tabindex="0">SSDケース組み立て</a></li><li><a href="#toc4" tabindex="0">ケースに格納したSSDをフォーマット</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">SSDをSATA→NVMeへ交換</span></h2>



<p>SSDは新規購入直後にWD Blue500GBSATAのSSDに換装しましたが今回は容量アップと速度アップも兼ねてNVMeタイプのSSDに換装しようと思います。購入したのはWD Black 1TB、16000円程度。2018年当時はSN750が主流でしたが、その後廉価版のSN750SEが登場しさらにその後継として、SN770が登場したとのこと。だいぶ安くなってます。</p>



<p>※現在はさらに後継のSN7100に代わっていますかね・・・。</p>


<div class="rakuten-item-box product-item-box no-icon pis-m no-after jism:14436419 cf"><figure class="rakuten-item-thumb product-item-thumb"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00pukw3.xe7dx425.g00pukw3.xe7dyfff/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fjism%2F0718037893204-44-49580-n%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fjism%2Fi%2F14436419%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-thumb-link product-item-thumb-link" title="Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/jism/cabinet/0466/0718037893204.jpg?_ex=128x128" alt="Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E" width="128" height="128" class="rakuten-item-thumb-image product-item-thumb-image"></a></figure><div class="rakuten-item-content product-item-content cf"><div class="rakuten-item-title product-item-title"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00pukw3.xe7dx425.g00pukw3.xe7dyfff/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fjism%2F0718037893204-44-49580-n%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fjism%2Fi%2F14436419%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-title-link product-item-title-link" title="Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E">Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="rakuten-item-snippet product-item-snippet"><div class="rakuten-item-maker product-item-maker">Joshin web 家電とPCの大型専門店</div></div><div class="amazon-item-buttons product-item-buttons"><div class="shoplinkamazon"><a rel="nofollow noopener" target="_blank" href="https://www.amazon.co.jp/gp/search?keywords=WDS100T4X0E&#038;tag=starjion-22">Amazon<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkrakuten"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/0e27c9e5.757a8e1d.0e27c9e6.248d902a/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FWDS100T4X0E%2F&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FWDS100T4X0E%2F">楽天<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkyahoo"><a rel="nofollow noopener" target="_blank" href="https://ck.jp.ap.valuecommerce.com/servlet/referral?sid=3426557&#038;pid=885464248&#038;vc_url=http%3A%2F%2Fsearch.shopping.yahoo.co.jp%2Fsearch%3Fp%3DWDS100T4X0E">Yahoo!ショッピング<img decoding="async" src="https://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=3426557&pid=885464248" width="1" height="1" border="0"><span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div></div></div></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>パッケージもかっちょよくやる気がみなぎっています。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-1024x577.jpg" alt="" class="wp-image-3899" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-800x451.jpg 800w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/01_WDBlackNVMESSD.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>開封していくぅ。久々にM2SSD見ましたが、こんなに小さかったっけって感じ。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-1024x577.jpg" alt="" class="wp-image-3900" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/02_WDBlackFront.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>片面実装タイプですのでThinkPad X1 Carbonの薄いボディにも問題なく収まります。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-1024x577.jpg" alt="" class="wp-image-3901" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/03_WDBlackBack.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>早速交換していきます。ThinkPad X1 CarbonのSSD交換に関して、詳しくは以前の投稿をご覧ください。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference">

<a target="_self" href="https://star-moon-sun.com/2018/09/03/work/thinkpad-x1-carbon-part3/" title="ThinkPad X1 Carbon 購入日記（第三部～SSD換装編～）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://star-moon-sun.com/wp-content/uploads/2018/11/o3840216014257371581-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://star-moon-sun.com/wp-content/uploads/2018/11/o3840216014257371581-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2018/11/o3840216014257371581-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2018/11/o3840216014257371581-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2018/11/o3840216014257371581.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2018/11/o3840216014257371581-320x180.jpg 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">ThinkPad X1 Carbon 購入日記（第三部～SSD換装編～）</div><div class="blogcard-snippet internal-blogcard-snippet">こんばんわ。せーです。暑さも和らいできた今日この頃。皆様、いかがおすごしでしょうか？さっそくですが、ThinkPad購入日記、今回もお付き合いください。前回はLenovoのノートPC、第6世代ThinkPad X1 Carbon（2018年...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://star-moon-sun.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">star-moon-sun.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2018.09.03</div></div></div></div></a>
</div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>あっという間に完了。交換作業自体は数分で終わるんでないかいな。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-1024x577.jpg" alt="" class="wp-image-3902" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/04_WDBlackSet.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>お決まりのベンチマークです。</p>



<p>単純比較はできないかもしれませんが、なっからパフォーマンスアップしていることは一目瞭然かと。</p>



<p>また、SN770はPCIe Gen4ですので、シーケンシャルリード5150MB/sが公称値ですが、そこまで出てないのはおそらくThinkPad X1 Carbon 2018がPCIe Gen3だからなのかな。</p>



<p>とはいえ今回の目的は容量不足に陥ったSSDの容量アップで、おまけでのパフォーマンスアップなのでその数字としてはとても満足。熱問題なんかは詳しく調べてません。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="504" height="461" src="https://star-moon-sun.com/wp-content/uploads/2018/11/o0504046114256808059.jpg" alt="" class="wp-image-528" srcset="https://star-moon-sun.com/wp-content/uploads/2018/11/o0504046114256808059.jpg 504w, https://star-moon-sun.com/wp-content/uploads/2018/11/o0504046114256808059-300x274.jpg 300w" sizes="(max-width: 504px) 100vw, 504px" /><figcaption class="wp-element-caption">交換前：WD Blue SATA 500GB</figcaption></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="484" height="355" src="https://star-moon-sun.com/wp-content/uploads/2022/04/05_NVMEベンチマーク.png" alt="" class="wp-image-3903" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/05_NVMEベンチマーク.png 484w, https://star-moon-sun.com/wp-content/uploads/2022/04/05_NVMEベンチマーク-300x220.png 300w" sizes="(max-width: 484px) 100vw, 484px" /><figcaption class="wp-element-caption">交換後：WD Black NVMe 1TB</figcaption></figure>
</div>
</div>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">おまけ：余ったM2 SSDを有効活用</span></h2>



<h3 class="wp-block-heading"><span id="toc3">SSDケース組み立て</span></h3>



<p>ということで1TBのM2 NVMe SSDへの換装が終わり、結果として500GBのM2 SATA SSDが余ります。</p>



<p>そんな未来が見えていたので今回はこれも購入しました。はい、USB接続のSSDケースです。一応SATA・NVMe両対応。このSSDケースに余ったWD Blue SATA 500GB SSDをぶっこんでいきたいと思いま～す。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-1024x577.jpg" alt="" class="wp-image-3904" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase01.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>


<div class="rakuten-item-box product-item-box no-icon pis-m no-after r-kojima:11551820 cf"><figure class="rakuten-item-thumb product-item-thumb"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00r8mv3.xe7dx89e.g00r8mv3.xe7dyeaa/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fr-kojima%2F4988755069816%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fr-kojima%2Fi%2F11551820%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-thumb-link product-item-thumb-link" title="玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/r-kojima/cabinet/n0000001278/4988755069816_1.jpg?_ex=128x128" alt="玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA" width="128" height="128" class="rakuten-item-thumb-image product-item-thumb-image"></a></figure><div class="rakuten-item-content product-item-content cf"><div class="rakuten-item-title product-item-title"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00r8mv3.xe7dx89e.g00r8mv3.xe7dyeaa/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fr-kojima%2F4988755069816%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fr-kojima%2Fi%2F11551820%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-title-link product-item-title-link" title="玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA">玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="rakuten-item-snippet product-item-snippet"><div class="rakuten-item-maker product-item-maker">コジマ楽天市場店</div></div><div class="amazon-item-buttons product-item-buttons"><div class="shoplinkamazon"><a rel="nofollow noopener" target="_blank" href="https://www.amazon.co.jp/gp/search?keywords=GWM.2NVMe-U3G2CCA&#038;tag=starjion-22">Amazon<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkrakuten"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/0e27c9e5.757a8e1d.0e27c9e6.248d902a/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FGWM.2NVMe-U3G2CCA%2F&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FGWM.2NVMe-U3G2CCA%2F">楽天<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkyahoo"><a rel="nofollow noopener" target="_blank" href="https://ck.jp.ap.valuecommerce.com/servlet/referral?sid=3426557&#038;pid=885464248&#038;vc_url=http%3A%2F%2Fsearch.shopping.yahoo.co.jp%2Fsearch%3Fp%3DGWM.2NVMe-U3G2CCA">Yahoo!ショッピング<img decoding="async" src="https://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=3426557&pid=885464248" width="1" height="1" border="0"><span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div></div></div></div>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>付属品はこんな感じです。USBタイプAとタイプCの両方に対応してくれているところが地味にうれしい。工具は特殊なトルクスドライバーが付属してます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-1024x577.jpg" alt="" class="wp-image-3928" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/06_SSDCase00.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>まずはケースの裏蓋を外します。内部に基盤が入っているので外します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-1024x577.jpg" alt="" class="wp-image-3905" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/07_SSDCase02.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>外した基盤にThinkPad X1 Carbonから取り外したSATA SSDを装着します。なにも難しいことはないです。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-1024x577.jpg" alt="" class="wp-image-3906" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/08_SSDCase03.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>次に付属しているスペーサーで基盤とSSDをネジで固定します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-1024x577.jpg" alt="" class="wp-image-3907" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/09_SSDCase04.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>そうしたら付属のチューインガム、もとい、冷却シート？熱伝導シート？を透明フィルムを剥がしてSSDに貼り付けましょう。貼り付けたら反対側の透明フィルムも剥がします。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-1024x577.jpg" alt="" class="wp-image-3908" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/10_SSDCase05.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>そうしたらケースに基盤を戻します。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-1024x577.jpg" alt="" class="wp-image-3909" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/11_SSDCase06.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>最後にネジで裏蓋を固定すれば完成です。チョー簡単。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="577" src="https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-1024x577.jpg" alt="" class="wp-image-3910" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-1024x577.jpg 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-300x169.jpg 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-768x433.jpg 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-1536x866.jpg 1536w, https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-120x68.jpg 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-160x90.jpg 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07-320x180.jpg 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/12_SSDCase07.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">ケースに格納したSSDをフォーマット</span></h3>



<p>で、ケースに収納したSSDですが、初期化もせずケースに収納したのでそのままでは以前のデータが残ってしまっているので初期化していきます。</p>



<p>まずは、「ディスクの管理」を起動します。オレはいつも、Windowsボタン右クリックから起動してます。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="639" src="https://star-moon-sun.com/wp-content/uploads/2022/04/13_SSD1TB換装後-1024x639.png" alt="" class="wp-image-3911" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/13_SSD1TB換装後-1024x639.png 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/13_SSD1TB換装後-300x187.png 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/13_SSD1TB換装後-768x480.png 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/13_SSD1TB換装後.png 1105w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>SSDケースをPCに接続すると一応認識されるでしょう。が、Bitlocker暗号化がかかっている場合はそのままではアクセスできないと思います。今回は不要なデータなのでまっさらにしていきます。下の画像で「ディスク１」を初期化していく感じですね。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="539" src="https://star-moon-sun.com/wp-content/uploads/2022/04/14_ディスクの管理-1024x539.png" alt="" class="wp-image-3912" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/14_ディスクの管理-1024x539.png 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/14_ディスクの管理-300x158.png 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/14_ディスクの管理-768x404.png 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/14_ディスクの管理.png 1447w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>いろいろなやり方あるかと思いますが、Windowsならばお手軽にコマンドプロンプロやPowerShellから「DISKPART」コマンドを使って初期化していきます。</p>



<p>手順は、</p>



<ol class="wp-block-list">
<li>PowerShellを起動する。</li>



<li>「diskpart」と入力しEnterキー</li>



<li>「list disk」と入力しEnterキー</li>



<li>PCで認識されているディスク（SSD）が表示されるので初期化を行うSSDのディスク番号を確認する。（今回はディスク1）</li>



<li>「select disk {初期化するディスク番号}」と入力しEnterキー</li>



<li>「clean」と入力しEnterキー</li>



<li>「DiskPartはディスクを正常にクリーンな状態にしました。」と表示されればOK。</li>
</ol>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="574" src="https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド-1024x574.png" alt="" class="wp-image-3942" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド-1024x574.png 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド-300x168.png 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド-768x431.png 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド-120x68.png 120w, https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド-160x90.png 160w, https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド-320x180.png 320w, https://star-moon-sun.com/wp-content/uploads/2022/04/15_diskpartでcleanコマンド.png 1118w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>「ディスクの管理」画面に戻るとディスクが「初期化されていません」と表示されていると思います。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="535" src="https://star-moon-sun.com/wp-content/uploads/2022/04/16_ディスクの管理Clean後-1024x535.png" alt="" class="wp-image-3914" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/16_ディスクの管理Clean後-1024x535.png 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/16_ディスクの管理Clean後-300x157.png 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/16_ディスクの管理Clean後-768x401.png 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/16_ディスクの管理Clean後.png 1445w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>対象のディスクを選択し「右クリック」－「ディスクの初期化」を選択しましょう。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="460" height="253" src="https://star-moon-sun.com/wp-content/uploads/2022/04/17_ディスクの初期化.png" alt="" class="wp-image-3915" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/17_ディスクの初期化.png 460w, https://star-moon-sun.com/wp-content/uploads/2022/04/17_ディスクの初期化-300x165.png 300w" sizes="(max-width: 460px) 100vw, 460px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>ディスクの初期化ダイアログが表示されます。パーティションスタイルをお好みで選択し「OK」ボタンをクリックします。2TBより小さいディスク容量ならMBRでいいんでないでしょうか。</p>



<figure class="wp-block-image aligncenter size-full is-resized"><img decoding="async" width="468" height="364" src="https://star-moon-sun.com/wp-content/uploads/2022/04/18_MBR.png" alt="" class="wp-image-3916" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/18_MBR.png 468w, https://star-moon-sun.com/wp-content/uploads/2022/04/18_MBR-300x233.png 300w" sizes="(max-width: 468px) 100vw, 468px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>初期化が完了するとオンラインになりますが、まだ利用できません。ディスクをフォーマットする必要がありますので、対象のディスクを右クリックし、「新しいシンプルボリューム」を選択します。あとはウィザードが起動するのでドライブレター設定したりNTFS指定したりすればいいんではないでしょか。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="731" height="254" src="https://star-moon-sun.com/wp-content/uploads/2022/04/20_新しいシンプルボリューム.png" alt="" class="wp-image-3918" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/20_新しいシンプルボリューム.png 731w, https://star-moon-sun.com/wp-content/uploads/2022/04/20_新しいシンプルボリューム-300x104.png 300w" sizes="(max-width: 731px) 100vw, 731px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>フォーマットが完了すれば以下のように表示され、外付けUSBSSDドライブの完成です。</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img decoding="async" width="1024" height="355" src="https://star-moon-sun.com/wp-content/uploads/2022/04/19_ディスクフォーマット後-1024x355.png" alt="" class="wp-image-3917" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/19_ディスクフォーマット後-1024x355.png 1024w, https://star-moon-sun.com/wp-content/uploads/2022/04/19_ディスクフォーマット後-300x104.png 300w, https://star-moon-sun.com/wp-content/uploads/2022/04/19_ディスクフォーマット後-768x266.png 768w, https://star-moon-sun.com/wp-content/uploads/2022/04/19_ディスクフォーマット後.png 1070w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>一応、ベンチマークとってみました。USBですからね。こんなもんなんでしょう。それにしてもHDDやUSBメモリーよりは俄然高速なんじゃないでしょか。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="484" height="355" src="https://star-moon-sun.com/wp-content/uploads/2022/04/21_SSDCaseベンチマーク.png" alt="" class="wp-image-3919" srcset="https://star-moon-sun.com/wp-content/uploads/2022/04/21_SSDCaseベンチマーク.png 484w, https://star-moon-sun.com/wp-content/uploads/2022/04/21_SSDCaseベンチマーク-300x220.png 300w" sizes="(max-width: 484px) 100vw, 484px" /></figure>



<div style="height:40px" aria-hidden="true" class="wp-block-spacer"></div>



<p>以上、ThinkPad X1 CarbonをSATA SSDからNVMe SSDへの換装を行ってみました。</p>



<p>※現在は後継のSN7100に代わってます。</p>


<div class="rakuten-item-box product-item-box no-icon pis-m no-after jism:14436419 cf"><figure class="rakuten-item-thumb product-item-thumb"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00pukw3.xe7dx425.g00pukw3.xe7dyfff/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fjism%2F0718037893204-44-49580-n%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fjism%2Fi%2F14436419%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-thumb-link product-item-thumb-link" title="Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/jism/cabinet/0466/0718037893204.jpg?_ex=128x128" alt="Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E" width="128" height="128" class="rakuten-item-thumb-image product-item-thumb-image"></a></figure><div class="rakuten-item-content product-item-content cf"><div class="rakuten-item-title product-item-title"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00pukw3.xe7dx425.g00pukw3.xe7dyfff/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fjism%2F0718037893204-44-49580-n%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fjism%2Fi%2F14436419%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-title-link product-item-title-link" title="Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E">Western Digital｜ウエスタンデジタル WD BLACK SN7100 シリーズ ゲーミング向け M.2 2280 NVMe接続SSD 1TB  WDS100T4X0E<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="rakuten-item-snippet product-item-snippet"><div class="rakuten-item-maker product-item-maker">Joshin web 家電とPCの大型専門店</div></div><div class="amazon-item-buttons product-item-buttons"><div class="shoplinkamazon"><a rel="nofollow noopener" target="_blank" href="https://www.amazon.co.jp/gp/search?keywords=WDS100T4X0E&#038;tag=starjion-22">Amazon<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkrakuten"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/0e27c9e5.757a8e1d.0e27c9e6.248d902a/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FWDS100T4X0E%2F&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FWDS100T4X0E%2F">楽天<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkyahoo"><a rel="nofollow noopener" target="_blank" href="https://ck.jp.ap.valuecommerce.com/servlet/referral?sid=3426557&#038;pid=885464248&#038;vc_url=http%3A%2F%2Fsearch.shopping.yahoo.co.jp%2Fsearch%3Fp%3DWDS100T4X0E">Yahoo!ショッピング<img decoding="async" src="https://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=3426557&pid=885464248" width="1" height="1" border="0"><span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div></div></div></div>


<div class="rakuten-item-box product-item-box no-icon pis-m no-after r-kojima:11551820 cf"><figure class="rakuten-item-thumb product-item-thumb"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00r8mv3.xe7dx89e.g00r8mv3.xe7dyeaa/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fr-kojima%2F4988755069816%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fr-kojima%2Fi%2F11551820%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-thumb-link product-item-thumb-link" title="玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/r-kojima/cabinet/n0000001278/4988755069816_1.jpg?_ex=128x128" alt="玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA" width="128" height="128" class="rakuten-item-thumb-image product-item-thumb-image"></a></figure><div class="rakuten-item-content product-item-content cf"><div class="rakuten-item-title product-item-title"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/g00r8mv3.xe7dx89e.g00r8mv3.xe7dyeaa/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fr-kojima%2F4988755069816%2F&#038;m=http%3A%2F%2Fm.rakuten.co.jp%2Fr-kojima%2Fi%2F11551820%2F&#038;rafcid=wsc_i_is_1077262429315259232" class="rakuten-item-title-link product-item-title-link" title="玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA">玄人志向　M.2対応 /NVMe　GWM.2NVMe-U3G2CCA<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="rakuten-item-snippet product-item-snippet"><div class="rakuten-item-maker product-item-maker">コジマ楽天市場店</div></div><div class="amazon-item-buttons product-item-buttons"><div class="shoplinkamazon"><a rel="nofollow noopener" target="_blank" href="https://www.amazon.co.jp/gp/search?keywords=GWM.2NVMe-U3G2CCA&#038;tag=starjion-22">Amazon<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkrakuten"><a rel="nofollow noopener" target="_blank" href="https://hb.afl.rakuten.co.jp/hgc/0e27c9e5.757a8e1d.0e27c9e6.248d902a/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FGWM.2NVMe-U3G2CCA%2F&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FGWM.2NVMe-U3G2CCA%2F">楽天<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div><div class="shoplinkyahoo"><a rel="nofollow noopener" target="_blank" href="https://ck.jp.ap.valuecommerce.com/servlet/referral?sid=3426557&#038;pid=885464248&#038;vc_url=http%3A%2F%2Fsearch.shopping.yahoo.co.jp%2Fsearch%3Fp%3DGWM.2NVMe-U3G2CCA">Yahoo!ショッピング<img decoding="async" src="https://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=3426557&pid=885464248" width="1" height="1" border="0"><span class="fa fa-share-square-o external-icon anchor-icon"></span></a></div></div></div></div>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<p><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115"><img decoding="async" src="https://blog.with2.net/img/banner/c/banner_1/br_c_9115_1.gif" title="システムエンジニアランキング"></a><br /><a rel="noopener" target="_blank" href="https://blog.with2.net/link/?id=2028608&cid=9115" style="font-size: 0.9em;">システムエンジニアランキング<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>




<p><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571" ><img decoding="async" src="https://b.blogmura.com/it/itmemo/88_31.gif" width="88" height="31" border="0" alt="にほんブログ村 IT技術ブログ IT技術メモへ" /></a><br /><a rel="noopener" target="_blank" href="https://it.blogmura.com/itmemo/ranking/in?p_cid=11090571">にほんブログ村<span class="fa fa-share-square-o external-icon anchor-icon"></span></a></p>

		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="3897"
					data-ulike-nonce="c1c4e3d92f"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_3897"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>The post <a href="https://star-moon-sun.com/2022/04/17/work/thinkpad-x1-carbon-nvmessd/">ThinkPad X1 Carbon 2018(6Gen)のSSDをSATAからNVMeに換装した件</a> first appeared on <a href="https://star-moon-sun.com">星と月と太陽と</a>.]]></content:encoded>
					
					<wfw:commentRss>https://star-moon-sun.com/2022/04/17/work/thinkpad-x1-carbon-nvmessd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
