Microsoft/VMware 製品はこう使う。

好きなことを好きに描く.

GPT-4o Realtime Audio: 初心者向けサンプルアプリの使い方ガイド

GPT-4o Realtime Audio がリリースされ、サンプルアプリが公開されており、使い方について可能な限り、”初心者向け” に記載していきます。

 

せっかくなので、説明文や解説の70%以上は、GPT4o に作文してもらいました

この記事を読むことで、GPT-4o Realtime Audio が何なのか、どういうユースケースがあるのかを理解し、サンプルアプリをデプロイして使ってみるところまでをゴールとして記載していきます。長文となりますが、妥協なくゴールまでお付き合いください。

また、前提として、ユーザーが一番多い Windows を想定した流れとなっています。

 

目次

大きくこれらの順に記載していきますので、知っている部分は流し読みして必要なところを読んで頂ければと思います。

GPT-4o Realtime Audio とは?どんなユースケースが?

事前準備(モデルのデプロイなど)

まず試すには?(Azure Portal からGPT-4o Realtime Audio を試す)

サンプルアプリで動作を見てみる

出来上がりイメージ



GPT-4o Realtime Audioとは?

GPT-4o Realtime Audioは、OpenAIが開発した高度な音声対話システムで、リアルタイムでの音声認識と自然言語処理を可能にするものです。これにより、ユーザーとの対話がより自然でスムーズに行えるようになりました。

 

特徴

リアルタイム処理:
GPT-4o Realtime Audioは、ユーザーの発話を瞬時に認識し、リアルタイムで応答を生成します。この高速処理により、対話が途切れることなく進行します。
高度な自然言語理解:
GPT-4の強力な自然言語処理能力を活用し、複雑な質問や要求にも対応可能。文脈を理解し、適切な回答を提供します。
高品質な音声合成:
応答は自然な音声で生成され、人間の声と区別がつかないほどのクオリティを実現しています。これにより、ユーザーは違和感なく対話を続けることができます。
多言語対応:
GPT-4o Realtime Audioは、複数の言語に対応しており、グローバルなユーザーにも対応可能です。言語の壁を超えて、様々な地域のユーザーと対話することができます。

 

利用シーン(ユースケース:想定)

カスタマーサポート:
企業のカスタマーサポートにおいて、GPT-4o Realtime Audioは24時間体制での顧客対応を可能にします。問い合わせに対して迅速かつ適切に対応し、顧客満足度を向上させます。
教育:
教育分野では、リアルタイムでの質疑応答や対話型の学習サポートが可能です。学生の疑問に瞬時に答えることができ、学習効率を高めます。
ヘルスケア:
医療現場でもGPT-4o Realtime Audioは活躍します。患者との対話を通じて症状を把握し、必要な医療情報を提供することで、診療の質を向上させます。

 

Azure OpenAI Service を無料で試すには

Azure アカウントの作成
まず、Azure アカウントを持っていない場合は、公式サイト(https://azure.microsoft.com/)で新しいアカウントを作成します。
新規ユーザーには、無料クレジット($200相当)と12か月間の無料サービスが提供されます。このクレジットを利用して、Azure OpenAI Service を試すことができます。

無料クレジットの管理:
ポイントとして、無料クレジットには使用期限があります。クレジットの残高や使用状況を定期的に確認し、計画的に利用することが重要です。

 

事前準備(モデルのデプロイなど)

Azure Portal にログイン
アカウントを作成後、Azure Portalにログインします。

 ※画像省略

Azure OpenAI Service のリソース作成
Azure Portal の検索ボックスから 「Azure OpenAI」を入力し、検索に表示された Azure OpenAI をクリックします。

[作成]ボタンをクリックします。

 

サブスクリプション:
使用するサブスクリプションを選択します。いわゆる課金先になります。

リソースグループ:
新規で作成して、任意の名前をつけます。
リソースグループの設定が影響してこの手順が進めれないことはないので、ご安心ください。リソースグループとは、関連するリソースを一つのグループにまとめて管理することができます。これにより、プロジェクトや環境(開発、テスト、本番など)ごとにリソースを整理しやすくなる、などの利点があります。
リージョン:
Azure OpenAI Service を配置するリージョンを選択します。
Azure OpenAI Serviceは、現在 "East US 2" もしくは、"Sweden Central" で利用可能!
他のリージョンを選ぶと使えないのでご注意ください。

名前:
任意の名前を入力してください。

デフォルト値のまま 「次へ」をクリックしましょう。

 

Tags もデフォルト値のまま 「次へ」をクリックしましょう。
(管理するときに便利ですが、今は不要でしょう)

 

[作成]をクリックして、デプロイします。

 

[Azure OpenAI Studio に移動する] をクリックします。

左ペインから [モデル カタログ] をクリックし、[GPT-4o-realtime-preview] をクリックします。

次に [デプロイ] をクリックします。

モデルのデプロイ確認画面です。
既定の値のまま [デプロイ] をクリックします。

※この画面で 制限がかかっているようなメッセージが表示される場合は、クォータの要求が必要な可能性があります。会社用のアカウントで実施している際にエラーが発生する場合は、サブスクリプションの管理者の方にご確認頂くのがよいです。
クォータの要求は Azure OpenAI Studio の左ペインの [クォータ] をクリックし、[クォータの要求]ボタンから申請することができます。

無事デプロイが完了しました。

やっと下準備が完了です。

まず試すには?(Azure Portal からGPT-4o Realtime Audio を試す)

Azure OpenAI Studio の 左ペインから [リアルタイム オーディオ] をクリックします。

[音声を選択する] から 声の種類を選びます。(もちろんデフォルトのままでもOK)

[聞き取り開始]ボタンをクリックすると、ブラウザからマイクの使用許可するためのダイアログが表示されるので、許可してください。

接続しているマイク・スピーカーからAIとの会話をお楽しみください!!!

サンプルアプリで動作を見ていく

皆様に GPT-4o Realtime Audio を利用したアプリケーション開発をお試し頂きたいため、Microsoft では GitHub にサンプルアプリケーションのコードを公開しています。

一方で、GitHubを使ったことない人にとっては取っ付きづらいと思うので、Step by Step で解説していきます。

どのようなアプリケーションなのか?

リアルタイム音声対話を実現するためのサンプルアプリケーションです。このリポジトリには、音声認識、音声合成、および自然言語処理(NLP)を組み合わせた高度な対話システムの実装例が含まれています。開発者は、このSDKを利用して、コールセンター、バーチャルアシスタント、教育アプリケーション、アクセシビリティ向上など、様々な音声インターフェースを迅速に構築できます。

このリポジトリには、詳細なドキュメント、セットアップ手順、コード例が含まれており、開発者は簡単にプロジェクトを開始し、カスタマイズ可能な音声対話ソリューションを作成できます。

実際の画面はこちら

サンプルアプリが動作する環境を作る

このアプリは主に TypeScript で記述されています。

サンプルコードの実行環境として、Node.js の最新版をインストールします。

aoai-realtime-audio-sdk/  
├── src/  
│   ├── index.ts  
│   ├── audio/  
│   ├── services/  
│   └── ...  
└── ...  

現時点の最新は 20.18.0 でした。全て既定値でインストールを実施します。

以下のレポジトリに、サンプルが入っています。

まずは以下のページを開きましょう。

緑色の [<> Code ] ボタンをクリックし、[Download ZIP] をクリックして、ソースコードを入手します。

私のPCがCドライブしかないため、Cドライブ直下にダウンロードしたZipファイルを展開します。

サンプルアプリを動かしていく

キーボードのWindows キーを押し、Windows PowerShell を [管理者として実行する] をクリックします。

Cドライブに cd コマンドで移動します。
 cd C:\aoai-realtime-audio-sdk-main\javascript\samples

今回は Windows 環境想定なので  download-pkg.ps1 を実行します。
警告が表示されても、動じず [R] を押して実行します。
必要なパッケージをダウンロードしてくれています。

./download-pkg.ps1


サンプルアプリケーションを起動していく

下準備が整ったので、アプリケーションを起動していきます。

1つ下の階層のwebフォルダに移動します。

cd web 

node.js のパッケージを npmコマンドでインストールします。

私の環境は一度作成した環境で再度作成しているので、もしかすると少し異なる結果になっているかもしれませんが、おそらく同じ画面になるはずです。

npm install

npmとは、NodePackageManagerの略でNode.jsのパッケージを管理するツール
Node.jsをインストールすると、同時にnpmもインストールされます。

 

ローカルの開発サーバーでサンプルアプリを起動します。
※npm run devコマンドは、プロジェクトを開発モードで実行するためのものです。

npm run dev

以下の画面が表示されます。
ブラウザで、以下のURLにアクセスします。

http://localhost:5173/

Webアプリが起動してきました。(少しワクワクしてくるところですね)

ここからは、画面右に表示されている項目を順番に埋めていく作業になります。

具体的には、Azure OpenAI Service の 接続先、認証キーを入力していくことになります。

 

Azure OpenAI Studio から必要な情報をメモする

もう1度 Azure OpenAI Studio を開き、右上の 下矢印のアイコンをクリックします。

[エンドポイント] と [キー] をコピーして、メモ帳などに保存します。

 

以下の内容を入力します。

・EndPoint :メモしたURLを貼り付ける

・Azure OpenAI:チェックをいれる

・API Key:メモしたKeyを貼り付ける

・Deployment:gpt-4o-realtime-preview

 ※デフォルト値

・System Message:(任意で入力)

例)あなたは晩ごはんを作るときに、何を作ったら良いかアドバイスする人です。材料から作れそうな晩ごはんをアドバイスしてあげてください。アドバイスは日本語でお願いします。

・Voice:声が違うだけなので、どれでも可

 

[Record] ボタンをクリックします!
マイクの使用許可が出ますので、許可しましょう。

 

私がヘッドセットで、「今日の晩御飯、迷ってるんだけれども、教えてくれない?」と話しかけると、即座に返答してくれました。

話しかけた内容や、返答された内容が画面に表示されるようにもなっています。

※まだ、Preview 版であることやサンプルアプリであるため、不自然な部分や画面上のテキスト表示がイマイチなことが多々あります。
Preview からGA(正式リリース)される際にはいろいろ良くなっているとは思うので、こういうものなんだな、という理解頂くのがよいです。

 

まとめと感想

ここ10年くらい開発を全くしていない私でもサンプルコードを動かすことができたので、AI と会話を楽しんでみよう、という簡単な気持ちでお試しいただければと思い、本記事を作りました。玄人だけが使えるAIは意味がなく、知識がない人でもAIに触れていけるように今後も初心者の方にもわかるようなコンテンツをご紹介していくつもりです。

 

 

 

 

[Azure/AzureVM] Azure VM 環境で RHEL を利用するときの考え方

こんばんは。

ここ数年、AWSに所属していたり、Microsoftの中の人になっていたりと変化が多いこの頃です。いろいろAzure のTips が溜まってきていることや、いろんな方に Microsoft Azure の理解を深めて頂きたいので、短い記事を連発していく予定です。

 

中の人になって、Microsoft はLinux に積極的に投資や活動をおこなっているな、と改めて感じました。

サティア・ナデラCEOになったときに Microsoft ♥ Linux と発信しはじめてから、以下のようなBlog が公開され、今でも閲覧可能になっています。


Microsoft Loves Linux - Microsoft Windows Server Blog

 

では、Azure VM 上でRHEL をご利用頂く際に、考えていくことを順番に書いていきます。大きくはこれらがわかれば使っていけると思います。

1.支払い方法

2.一般的にどのVMイメージを使うのか

3.Azure VM(オンデマンド) のRHELの更新プログラムはどうやって入手、適用するのか

 

1.支払い方法

支払い方法として、大きく2つあります。

1.オンデマンドの利用(Azure VM(RHEL)の従量課金の料金にライセンス費用を盛り込んで使う方法)

多くのユーザーがライセンスの管理が煩雑になるため、1のオンデマンドの利用をご選択いただいています。システム管理の観点で、ライセンスがXX年XX月に切れる、サブスクリプションがXX年XX月に切れる、保守がXX年XX月に切れる、のような管理を数百台、数千台のOS分管理するのはしんどいものです。

Excelで管理しているけど、最新かわからない、なんてよくある話。。

 

2.RHELのライセンスを持ち込んでAzure VM でお使い頂く方法

Azure上のVM利用時にもともと持っているRHELのライセンスを持ち込んで、Azure VMとして利用する方法があります。
Azure の月額の利用料は減るものの、サポート窓口がOS部分がRHEL社になるなど、運用観点でワンストップサポートにならないことが多いのが難点です。

 

2.一般的にどのVMイメージを使うのか

Azure Virtual Machine のイメージ選択時に ↓ を選びます。

実は、RHEL のイメージは複数種類あって、選ぶときにややこしい!と思うことが多々あります。今回もパット見だけでわかりずらいものがありました。例えば「Red Hat Inc」で検索をかけた結果がこちら。わかりずらい。

 

きちんとバージョンごとにOSイメージが用意されているのが本物なので、きちんと目的のイメージを選択するようにしてほしい。

 

3.Azure VM(オンデマンド) のRHELの更新プログラムはどうやって入手、適用するのか

オンプレミスやハウジング環境等でこれまでRHELを使っていた方は、オンライン上にあるRed Hatパッケージリポジトリを使用するために、Subscription Managerを使って登録したあと、Red Hat のレポジトリにアクセス可能か確認し、yumで更新するのが一般的でした。
もしくは、隔離された環境であれば、RHELのサイトへログインし必要なパッチを確認し手動アップデートを行っている人もいるかもしれません。

Azure VM としてRHELを稼働させる場合、RHELの更新プログラム適用については、すごく簡単になっています。

まず、Subscription Manager でRHELのサブスクリプションを登録などといった作業は不要です。

なら、どこからどうやって更新プログラムを入手するんや!ということになるわけですが、最新の更新プログラムを取得するには、sudo yum update の実行で更新可能です。

yum は大まかにいうとパッケージのインストールやアップデート、削除などを簡単に実行してくれるものですが、sudo yum update の実行で参照される先(レポジトリ)は、Azure RHUI になります。

(参考資料)

Red Hat Update Infrastructure - Azure Virtual Machines | Microsoft Learn

Azure RHUI については、上記の公開ドキュメントが参考となりますが、ポイントとしてはこの2つになります。

 ・Red Hat 社でホストされているリポジトリのコンテンツをミラーリングする

 ・Azure 固有のコンテンツを使用してカスタム リポジトリを作成する

つまり、Red Hat 社のレポジトリをミラーした場所のレポジトリが使用可能ということです。


一般的な、オンデマンドでの利用(Azure VM(RHEL)のご利用料金にライセンス費用が内包されている)の場合は、Azure RHUI にアクセスするための構成が事前に設定されているため、sudo yum update の実行で更新可能となっています。

 

yum 自体は一般的なRHEL系Linuxのコマンドのため、Azure 特有のことは特にありません。

 

更新プログラムリストを見る場合は、Updateinfo から確認できますし、セキュリティ重要度を知りたい場合は、 list security all オプションを書けばよいです。

# sudo yum updateinfo list security all

 

kernel に関するアップデートの情報を除外したい場合は、--exclude=kernel*  リストを追加すればよいです。

「--exclude」 指定することで除外されます。

# sudo yum updateinfo list security all --exclude=kernel*

(実行サンプル)

[root@RHEL8 ]# sudo yum updateinfo list security all --exclude=kernel*

Last metadata expiration check: 2:47:56 ago on Wed 21 Aug 2024 05:22:03 AM UTC.

RHSA-2024:2621 Important/Sec. bpftool-4.18.0-477.55.1.el8_8.x86_64

RHSA-2024:3810 Moderate/Sec.  bpftool-4.18.0-477.58.1.el8_8.x86_64

RHSA-2024:4740 Moderate/Sec.  bpftool-4.18.0-477.64.1.el8_8.x86_64

RHSA-2024:5255 Important/Sec. bpftool-4.18.0-477.67.1.el8_8.x86_64

 

実際にパッケージを適用の際は、yum updateinfo を yum update に変更し、オプションはそのままで実施することで除外したものを適用することが可能です。

 

Microsoft は  な会社なので、Microsoft Azure でRHEL使ってくれる人が増えるといいなと思っています。

ゲストOSとして稼働する Windows Server にも サブスクで。(Azure Stack HCI)

私は Azure Stack HCI の投稿が多いわけですが、面白いものがリリースされました。

 

Azure Stack HCI OS の上で稼働する仮想マシンのWindows Server ライセンスを

サブスクでゲットして運用しようというものです。

 

きちんと Microsoft のサイトに記載があります。 

 

azure.microsoft.com


このアドオンワークロード のところですね。

意外に安い?気がする…。

$23.25/物理コア/月

f:id:japan-vmware:20220414191911p:plain

 

どのようなとき Windows Server サブスクリプションが使えるか、というと、

Azure Stack HCI(専用OS)の上で稼働させるゲスト用のライセンスをサブスクで入手できるということです。

docs.microsoft.com

 

 

このように書いてある。

 

  • Windows Server サブスクリプション: Windows Server のゲスト ライセンスを Azure 経由でサブスクライブします。 Azure Stack HCI に対してのみ利用できます。

 

ということは、これまでゲストOSのWindows Server のライセンスを購入して、

届くまで時間がかかってイライラしていたものが、必要なときにすぐ入手できるということになりますね。

 

オンプレにもスピード感を。ということなのかもしれない。

 

ハイブリッドクラウドのMicrosoft の方針はやはり本気なのだなとおもった次第です。

 

 

 

手順)Azure Stack HCI OS + AX ノードでの構築の流れを紹介

こんにちは。

 

いま、マイクロソフトがすごくハイブリッドクラウドに前のめりになり、

Azure Hybrid 戦略 という名前まで付けて推進している、Azure Stack HCI の

大まかな構築の流れを公開します。

 

2021年12月に 基本誰でも参加可能な Microsoft 超進化研究所ウェビナー でMicrosoft の高添さんと対談した資料です。

 

試した環境は ハードウェア AX-6515 , Azure Stack HCI OS 21H2 で試しています。

ハイブリッドクラウド専用OSなので、ぜひ興味をもってくださいねw

 
 
 

Windows Server 2022 で WSL(Windows Subsystem for Linux) を使えるようにする

WSL(Windows Subsystem for Linux) を Windows Server 2022 で有効化する手順をご紹介します。

 

WSL ではLinux をエミュレーションしたサブシステムで、Linuxカーネルそのものが動作します。

インストールできるLinuxの種類(ディストリビューション)は、wsl -l -o で確認することができます。

f:id:japan-vmware:20211127212102p:plain

PS C:\Users\administrator.DELLTECH> wsl -l -o
インストールできる有効なディストリビューションの一覧を次に示します。
既定の分布は ' * ' で表されます。
 'wsl --install -d <Distro>'を使用してインストールします。

  NAME            FRIENDLY NAME
* Ubuntu          Ubuntu
  Debian          Debian GNU/Linux
  kali-linux      Kali Linux Rolling
  openSUSE-42     openSUSE Leap 42
  SLES-12         SUSE Linux Enterprise Server v12
  Ubuntu-16.04    Ubuntu 16.04 LTS
  Ubuntu-18.04    Ubuntu 18.04 LTS
  Ubuntu-20.04    Ubuntu 20.04 LTS

-------------------------------------------------------------------------------

 

◆WSLをインストールする

インストールコマンド

  wsl --install -d Ubuntu

このコマンドだけでインストールできます。Ubuntuじゃないディストリビューションの方がいい場合は、ubuntu の部分をDebian とかに変えるだけでインストールできます。

 

大体、私の環境だと30秒くらいでインストール完了しました。その後再起動させます。

f:id:japan-vmware:20211127213119p:plain

 

再起動後、ログインすると、自動的にプロンプトが起動してセットアップが続行されます。

f:id:japan-vmware:20211127214117p:plain

 

しばらく待ちます。

f:id:japan-vmware:20211127214139p:plain

 

別のプロンプトがまた自動的に起動されます。

Linuxで使うユーザーネームを問われるので、任意のものを入力します。

f:id:japan-vmware:20211127214249p:plain

 

すると、Ubuntu が起動し、普通にLinuxが使えるようになります。

f:id:japan-vmware:20211127214332p:plain

 

試しに apt update を実行して、アップデートをかけてみました。

f:id:japan-vmware:20211127214705p:plain

すんなり、アップデート完了。

f:id:japan-vmware:20211127214842p:plain

 

Windows のスタートボタンをクリックすると、Ubuntu というアイコンが表示され、

次回からこれをクリックすることでLinuxが使えるようになります。

仮想マシンを稼働させるほどのオーバーヘッドがなく、便利ですね。

 

f:id:japan-vmware:20211127215149p:plain

 

搭載しているディスクを綺麗サッパリ初期化してくれるスクリプト(Azure Stack HCI OS, Windows 版 Azure Stack HCI 共通)

こんにちは。

 

前回の記事でAzure Stack HCI OS 21H2 をNested で構築する方法をご紹介しました。

今回は、構築する中で、めちゃくちゃ便利なスクリプトをご紹介します。

 

構築中に あ!間違えた!とか入力ミスして構築をしてしまったことがある人は結構いるとおもいます。構築したあとに フェールオーバークラスタ名が違っていた、とか、
構築に失敗して、ファイルシステムのゴミがいっぱい生まれて、次構築しようとしたらうまく構築ができず四苦八苦、、、などエンジニアのみなさまなら想像がつくかとおもいます。

 

そんなときに使えるスクリプトを 海外のMicrosoft MVP の方が作ってくれていて、これがめちゃくちゃ重宝します。

私のチームではこのスクリプトを "魔法のスクリプト" と呼んでいます 笑

https://github.com/dkawula/Operations/blob/master/S2D/FactoryReset-Clear-SDSConfig.ps1

 

【私が試して動作問題なかったOS】

Windows Server 2019 のS2D
Azure Stack HCI OS 21H2
Azure Stack HCI OS 20H2

 

【ハードウェア環境】
ESXi 上で作成したNested 環境で実行 → 普通に使えた
AX6515(Dell のS2D ReadyNode) → 普通に使えた 
 BOSS Boot Device  240GB x 2 (Raid1)
    SSD 960GB x 4 本(All Flash 構成)

 

想定トラブル時1

実際に私が困って使った状況をご紹介します。
現在、AX6515 というDell Technologiesの S2D Ready Node を使って検証をしているのですが、いざ構成しようとしたら、以前に誰かが使っていてファイルシステムが残っていてこのような状態になっていました。

 

f:id:japan-vmware:20211111121037p:plain

 

これは Get-physicaldisk コマンドレットを実行した結果なのですが、このマシンは SSD 4本とBoot Devce(BOSS)を積んでいるのみのマシンにもかかわらず、過去に誰かが検証した際のゴミが残っています。
OS をインストールするときのセットアップウィザードで消したらいいのでは?という方もいらっしゃるかもしれませんが、残念ながらその画面では消せませんでした。
(状況によりますが)

みて頂くとわかりますが、CanPool 列 が False  になっていますよね。
False になっていると S2D を構成できないのでここを True  にする必要があるわけです。

 

そのため、魔法のスクリプトを実行します。
その前にスクリーンショットの環境は Azure Stack HCI OS 21H2 で実行しているので、Server Core (CLI) のみのOSですので、ネットワーク上に共有ファイルを作って、そこにスクリプトを置いて、ASH OS 側にコピーして実行しました。

172.31.90.5 のCドライブの共有設定して、そこに魔法スクリプトを置いています。
置いた魔法スクリプトを Azue Stack HCI OS の Cドライブ配下にコピーしています。

f:id:japan-vmware:20211111115659p:plain

 

コピーしてきた、スクリプトを実際に実行します。
※元のスクリプト名が長いので 短いスクリプト名に名前変更だけしています。

f:id:japan-vmware:20211111114640p:plain

 

実行開始します。

f:id:japan-vmware:20211111115926p:plain

 

途中で エラーなども多く表示されますが、無視して大丈夫です。
理由は最後に記載します。

f:id:japan-vmware:20211111120011p:plain

 

ディスクがクリーニングされているのがわかります。

f:id:japan-vmware:20211111120144p:plain

 

4本のディスクとBootDevice が削除されていることが表示されています。

f:id:japan-vmware:20211111120251p:plain

 

では実際に、Get−Physicaldisk を実行してみましょう。
ゴミが消えて、SSD 4本とBoot Devce(BOSS) のみ表示されるようになりました。
また、CanPool の値が True になっているので、Azure Stack HCI の構成ができるDisk になっているのがわかります!

f:id:japan-vmware:20211111121359p:plain

 

想定トラブル時2

構築が終わったあとに、再構築する必要がでた場合にも魔法スクリプトは素晴らしい活躍をします 笑

一度2ノードでも、3ノードでもいいのですが、構築し終わったあとの Azure Stack HCI は、フェールオーバークラスタが構成され、S2D(Storage Space Direct)も構成されている状況です。もちろんクラスターが構成されているわけですから、クラスターディスクも作成されているので、再構築になると猛烈にダルい作業が発生します。
エンジニアの人だと「OS再インストールからなのか…?」「ファイルシステムにゴミが残る…」「IP Address 振り直し…?」いろいろ思い浮かぶと思います。

それらの一気に解消するのも魔法スクリプトです。😋

 

先程、ここでエラーがでていましたよね。
ここで何をしているか、というとクラスターの削除やクラスターディスクの削除をしています。

f:id:japan-vmware:20211111120011p:plain

 

つまり、この魔法スクリプトは、クラスターを削除し、S2D 機能をオフにしたのち、
ディスクを綺麗サッパリしてくれるということです。

 

注意点

もし仮想スイッチが作成されている場合は、仮想スイッチだけコマンドで削除する必要があります。そのときは Remove-VMSwitch コマンドレットで削除をお願いします!
コマンドだるいな。。。というときはWindows Admin Centerからホストに接続して仮想スイッチの削除もできます。

最後に

個人的にすばらしいとおもったのは、IP Address の設定は初期化されないですし、ドメインに参加している場合はドメインから離脱することもありません。
つまり、魔法スクリプトを各ノードで実行するだけで再度Azure Stack HCI の構築を開始することができます。
ESXi の Nested とかでここまでの便利なものはみたことが個人的になかったので感動的でした…検証時や実際の構築時に困ったらつかってみてはいかがでしょうか。

一応念の為申し上げておくと、使用については自己責任でお願いしますね😋
Microsoft MVP の方が善意で公開してくれてるものですので。

 

よい Azure Stack HCI 生活を!!!

 

一応スクリプト内容をそのまま張っておきます。

 

-------------------------------------

# #
# *** USE AT YOUR OWN RISK *** #
# PERMANANT DATA LOSS WILL OCCUR #
# #
# This script completely clears any existing Storage Spaces configuration #
# and all data on EVERY non-system drive PERMANENTLY! #
# #
# Notes: #
# #
# If certain drives cannot be cleared and the reason given is #
# 'Redundant Path' then MPIO may need to be installed and/or configured. #
# #
# Power cycling the JBOD enclosures can also remove additional #
# errors encountered during the run. #
# #
# Run cmdlet with Administrator rights. #
# #
################################## WARNING ################################
################################# Change Log ################################
# #
# 02/13/2014: Changed logic to remove SAS-connected boot/system disks #
# 02/13/2014: Changed output for clearing disks and tracking runtime #
# 04/07/2014: Corrected logic to deal boot and system drives #
# 04/07/2014: Added logic to deal with non-core cluster objects #
# 07/23/2015: Changes to better support Storage Spaces Direct #
# #
#############################################################################
#Script has been tested and verified to work to Factory Reset Storage Spaces Direct by Dave Kawula#
[CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact="High")]
param()
if ($PSCmdlet.ShouldProcess("localhost","Clear Storage Spaces configuration and wipe disks"))
{
Write-Host ""
Write-Host Clearing existing Storage Spaces configuration and wiping disks...
Write-Host ""
$runStart = [DateTime]::Now
# Install necessary tools if needed
$toolsInstalled = $false
if (!(Get-WindowsFeature -Name "RSAT-Clustering-PowerShell").Installed)
{
Write-Host Installing required tools... -ForegroundColor Cyan -NoNewline
Install-WindowsFeature -Name "RSAT-Clustering-PowerShell"
$toolsInstalled = $true
Write-Host Done.
Write-Host ""
}
# Remove any cluster objects if present
Write-Host "Removing any cluster objects" -NoNewline -ForegroundColor Cyan
Write-Host "..." -NoNewline
foreach ($clusterGroup in (Get-ClusterGroup -ErrorAction SilentlyContinue -WarningAction SilentlyContinue))
{
if (!$clusterGroup.IsCoreGroup)
{
Remove-ClusterGroup -Name $clusterGroup.Name -Force:$true -RemoveResources:$true -ErrorAction SilentlyContinue
}
}
Remove-Cluster -Force -CleanupAD -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
Write-Host "Done."
$disks = Get-PhysicalDisk | Where-Object {($_.BusType -EQ "SAS") -or ($_.BusType -EQ "SATA")} # -or ($_.BusType -EQ "RAID")}
Write-Host ""
Write-Host "Removing any stale PRs" -NoNewline -ForegroundColor Cyan
Write-Host "..." -NoNewline
foreach ($disk in $disks)
{
Clear-ClusterDiskReservation -Disk $disk.DeviceId -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
}
Write-Host "Done."
Write-Host ""
Write-Host "Updating the storage provider cache (x2)" -NoNewline -ForegroundColor Cyan
Write-Host "..." -NoNewline
Update-StorageProviderCache -DiscoveryLevel Full
Start-Sleep 1
Update-StorageProviderCache -DiscoveryLevel Full
Write-Host "Done."
# Remove virtual disks and storage pools
Write-Host ""
Write-Host "Removing Virtual Disks and Pools" -NoNewline -ForegroundColor Cyan
Write-Host "..." -NoNewline
$storagePools = Get-StoragePool | ? FriendlyName -NE "primordial"
$storagePools | Set-StoragePool -IsReadOnly:$false
Get-VirtualDisk | Set-VirtualDisk -IsManualAttach:$false
Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false
$storagePools | Remove-StoragePool -Confirm:$false
Write-Host "Done."
Write-Host ""
Write-Host "Updating the storage provider cache (x2)" -NoNewline -ForegroundColor Cyan
Write-Host "..." -NoNewline
Update-StorageProviderCache -DiscoveryLevel Full
Start-Sleep 1
Update-StorageProviderCache -DiscoveryLevel Full
Write-Host "Done."
Write-Host ""
# Collect IDs of any system/boot disks
$disks = Get-Disk
$diskIdsToRemove = @()
foreach ($disk in $disks)
{
if ($disk.IsBoot -or $disk.IsSystem)
{
$diskIdsToRemove += $disk.UniqueId
}
}
# Get collection of physical disks
$allPhysicalDisks = Get-PhysicalDisk | Where-Object {($_.BusType -EQ "SAS") -or ($_.BusType -EQ "SATA")} # -or ($_.BusType -EQ "RAID")}
# Create a new collection of physical disks without any system/boot disks
$physicalDisks = @()
foreach ($physicalDisk in $allPhysicalDisks)
{
$addDisk = $true
foreach ($diskIdToRemove in $diskIdsToRemove)
{
if ($physicalDisk.UniqueId -eq $diskIdToRemove)
{
$addDisk = $false
}
}
if ($addDisk)
{
$physicalDisks += $physicalDisk
}
}
# Iterate through all remaining physcial disks and wipe
Write-Host "Cleaning disks" -ForegroundColor Cyan -NoNewline
Write-Host "..."
$totalDisks = $physicalDisks.Count
$counter = 1
foreach ($physicalDisk in $physicalDisks)
{
$disk = $physicalDisk | Get-Disk
# Make sure disk is Online and not ReadOnly otherwise, display reason
# and continue
$disk | Set-Disk –IsOffline:$false -ErrorAction SilentlyContinue
$disk | Set-Disk –IsReadOnly:$false -ErrorAction SilentlyContinue
# Re-instantiate disks to update changes
$disk = $physicalDisk | Get-Disk
if ($disk.IsOffline -or $disk.IsReadOnly)
{
Write-Host "Warning: " -NoNewline -ForegroundColor Yellow
Write-Host "Unable to process disk " -NoNewline
Write-Host $disk.Number -NoNewline
Write-Host ": Offline Reason: " -NoNewline
Write-Host ($disk.OfflineReason) -NoNewline -ForegroundColor Yellow
Write-Host ", HealthStatus: " -NoNewline
Write-Host $disk.HealthStatus -ForegroundColor Yellow
}
else
{
Write-Host "Cleaning disk " -NoNewline
Write-Host $disk.Number -NoNewline -ForegroundColor Cyan
Write-Host " (" -NoNewline
Write-Host $counter -NoNewline -ForegroundColor Cyan
Write-Host " of " -NoNewline
Write-Host $totalDisks -NoNewline -ForegroundColor Cyan
Write-Host ")..." -NoNewline
# Wipe disk and initialize
$disk | ? PartitionStyle -NE "RAW" | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false
$disk | Initialize-Disk -PartitionStyle GPT
Write-Host Done.
}
$counter++
}
# Remove any installed roles/tools
if ($toolsInstalled)
{
Write-Host Uninstalling Failover Cluster tool... -NoNewline -ForegroundColor Cyan
Remove-WindowsFeature -Name "Failover-Clustering","RSAT-Clustering-PowerShell"
Write-Host Done.
}
Write-Host ""
Write-Host "Updating the storage provider cache (x2)" -NoNewline -ForegroundColor Cyan
Write-Host "..." -NoNewline
Update-StorageProviderCache -DiscoveryLevel Full
Start-Sleep 1
Update-StorageProviderCache -DiscoveryLevel Full
Write-Host "Done."
# Output physical disk counts
Write-Host ""
Write-Host Physical Disks:
Get-PhysicalDisk | Group-Object Manufacturer,Model,MediaType,Size | ft Count,Name -AutoSize
Write-Host Configuration and data cleared!
Write-Host ""
Write-Host "Run duration: " -NoNewline
Write-Host ([Math]::Round((([DateTime]::Now).Subtract($runStart)).TotalMinutes,2)) -ForegroundColor Yellow -NoNewline
Write-Host " minutes"
}