銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

SQL Server Always On 可用性セットをOpenShift 3.11上にデプロイしてみた

SQL Server 2019 から Kubernetes (k8s) が利用されたAlways On可用性セットの構成がサポートされました。詳細はSEの雑記のこの記事を読んでいただきたいのですが、kubernetesで動くならOpenShiftでも動くだろうということで試してみました。現在この機能が利用可能なSQL ServerのコンテナイメージはRHELではありませんが、基本的にもRHELではないコンテナイメージであってもOpenShift上で動きます。なお、Microsoftのプレゼンなどではkubernetes/OpenShiftをサポートと書かれていたりするので、将来的にはOpenShift向けの手順も公開されるものと思われます。

AKS を使用した SQL Server 2019 の AlwyasOn 可用性グループの構築 at SE の雑記

具体的な構築手順はこちらのドキュメントを参考に進めます*1

Kubernetes クラスター上の SQL Server Always On 可用性グループをデプロイします。 | Microsoft Docs

*1:日本語があやしいですが

続きを読む

Quantum Development Kit が 0.3に更新されました

こちらのブログで案内されています。

cloudblogs.microsoft.com

今回は大きく3つの更新があります。

化学計算向けライブラリの追加

ドキュメントも追加されています。 docs.microsoft.com

Q# 開発環境の改善

Visual Studio向け、Visual Studio Code向けのQ#拡張が更新されています。それぞれアップデートする必要があります。 Q#コードを編集しても自動コンパイルしてくれなかったり(Live Compile)、コンパイルエラーのメッセージが不親切だったりしたのですが、その辺りが改善されました。また、定義へ移動や、Operation定義のポップアップ表示などが追加されています。

f:id:tanaka733:20181031145816p:plain

Q# 言語の仕様変更

Q# 言語としても仕様変更が入っています。改善として追加された項目が多いですが、破壊的変更となっている点もあるので注意が必要です。先程の開発環境の改善含めこちらに詳細にまとまっています。

QDK 0.3 Language Review and Migration Guide | Microsoft Docs

ざっと見たところ、配列要素の区切りが;から,に変更になるのが一番多く変更の必要がありそうです。以前のバージョンのプロジェクトを新しいバージョンに更新するためには、そのドキュメントの最後にmigrationの手順および自動化のPowerShellスクリプトが提供されています。

QDK 0.3 Language Review and Migration Guide | Microsoft Docs

Q# Development KitはC#の.NET Core ConsoleプロジェクトにNuGetパッケージの形式で参照として追加されています。そのため、バージョンアップするためには参照しているNuGetパッケージのバージョンを上げる必要があります。また、コードの変更が必要な点については、新しいバージョンのコンパイラーが変更する機能を提供しているため、dotnet msbuild /t:qsharpformatを実行すると変更されるとあります。スクリプトはPowerShell Coreにも対応しているので、LinuxやmacOSでもPowerShell Coreをインストールすれば利用可能ですが、手動でやることもできます。

文法の変更については、このブログでも解説したいと思います。

Q# の開発環境を準備する (.NET Core CLI + Visual Studio Code編)

最近 Q# のセッションをすることが増えたので、開発環境の準備をまとめておこうと思います。今回は、.NET Core と Visual Studio Codeを利用する環境なので、Windows, Linux, macOSで使えるはずです。11月4日時点の情報で、Quantum Development Kit 0.3の情報に更新しました。

Installing the Q# development environment for VS Code | Microsoft Docs

始めての場合はインストール手順を、0.2など以前のバージョンをインストール済みの場合はアップデート手順を参照してください。

 インストール手順

まずはじめに .NET Core SDK をインストールします。バージョンは2.0 より新しければサポートされますが、原則として最新版をインストールするのがよいでしょう。詳細は未検証なのですが、いくつかのコマンドが.NET Core 2.0の古いージョンで動作しないことがあるようです。.NET CoreのダウンロードページからWindows, Linux, macOSごとのリンクに移動しインストールします。SDKとRuntimeというものがありますが、SDKの方をインストールします。SDKはRuntimeを含んでいるのでRuntimeを追加でインストールする必要はありません。また、Runtimeだけだとソースコードがコンパイルできないので開発ができません。

www.microsoft.com

Windows、macOSはインストーラーがダウンロードできるようですが、Linuxの場合ディストリビューションごとのパッケージを提供しており、例えばCentOSならyumを使ってインストールできます。インストール後、dotnetコマンドにPATHが通っていることを確認してください*1

次に、Q#で開発するための.NET Coreのプロジェクトテンプレートをインストールします。WindowsならPowerShellもしくはコマンドプロンプト、Linux, macOSならbashなどお好きなシェルで実行します。Administratorもしくはrootユーザーではなく、実際に開発を行うユーザーで実行するほうがいいでしょう。

dotnet new -i "Microsoft.Quantum.ProjectTemplates::0.3.1810.2508-preview"

ちなみに、Q#で開発するための.NET Coreのプロジェクトテンプレートと回りくどい言い方をしているのは、実はこれがQuantum Developmenet Kitそのものではないからなのですが、今のところは細かいところは気にせずこれをインストールしてください。

ここから先はQ#の開発にVisual Studio Codeを利用する場合の手順になります。vimやemacsなどそれ以外のエディタで開発したい場合は不要なので、インストール後の確認手順に進んでください。今のところ、Visual Studio CodeでもQ#の開発にそこまで便利な支援がないため、vimやemacsに慣れていればそちらが使いやすいかもしれません。

まず、Visual Studio Codeをインストールします。次のページから、これもWindows, Linux, macOSごとのページに移動して指示にしたがってください。

code.visualstudio.com

StableもしくはInsider Buildのどちらでも問題ないはずですが、私はStableを使っています。

あわせて、gitのインストールもおすすめします。サンプルコードなどがGitHubリポジトリとして公開されているので、gitでクローンできるようにしておくと便利です。

Git - Downloads

最後に、Visual Studio Code用のMicrosoft Quantum Development Kit for Visual Studio Codeをインストールします。次のページに移動して、Installボタンをクリックしてもよいですし、

marketplace.visualstudio.com

Visual Studio Codeの拡張画面から検索してインストールしてもよいです。スクリーンショットはインストール済みなので、アンインストールするボタンになっています。

f:id:tanaka733:20181026200925p:plain

動作確認

これでQ#の開発環境は整いました。動作の確認ですが、次の3つのいずれか(もしくは全部)がおすすめです。

とりあえずサンプルコードを読みたい、もしくはQ# SDKの中身のコードを読みたいという場合は、Microsoft/QuantumというGitHubリポジトリをクローンします。ビルドのテストには、Samples以下のどれかのフォルダ(Teleportationが最初のドキュメントでも紹介されてます)に移動してビルドしてみましょう。

github.com

.NET Core CLIでビルドする場合は、シェル上でディレクトリを移動してdotnet runコマンドを実行します。Visual Studio Code上でビルドする場合は、ビルドするフォルダを含むフォルダを開いたあとに、Visual Studio Codeの統合シェルを開いてdotnet runコマンドを実行します。

cd Samples/Teleportation/
dotnet run

次に実際にプロジェクトを作成しコンパイルする動作を確認したい場合は、次のページに従って確認します。

docs.microsoft.com

Q#について手を動かしながら勉強したいという場合は、Microsoft/QuantumKatasというリポジトリをクローンします。詳細な手順はReadmeに書かれていますが、.NET CoreのUnit Testを使って問題が記述されています。テーマごとにフォルダがわかれていて、その中のTasks.qs に問題が書かれています。問題の条件を満たすようなQ#のコードを指定された場所に記述し、dotnet testを実行すると、正解していればその問題のUnit Testが成功するようになります。

github.com

アップデート手順

アップデートは、.NET Coreのプロジェクトテンプレート、Visual Studio Codeの拡張機能、既存のプロジェクトの更新の大きく3つが必要です。まず、プロジェクトテンプレートは最新版で上書きされるので、dotnet new -iコマンドを与えらしいバージョンを指定して実行すればよいです。次のコマンドを実行すれば、0.2のテンプレートがインストールされていても0.3に更新されます。

dotnet new -i "Microsoft.Quantum.ProjectTemplates::0.3.1810.2508-preview"

Visual Studio Code (Visual Studioの場合も同じ)の拡張機能は、拡張機能の管理メニューから更新しましょう。ここまでやれば、これから新規に作成するQ#のプロジェクトは新しいバージョンに対応したプロジェクトとして作成されます。

もし以前のバージョンで作成したプロジェクトを新しいバージョンに対応させたい場合は、まずRelease Notesを読みましょう。0.3の場合はここです。

QDK 0.3 Language Review and Migration Guide | Microsoft Docs

0.3の場合の手順は次のようになります。

  1. dotnet cleanで対象プロジェクトをクリーンする
  2. プロジェクトのcsprojファイル(XML形式)内のPackageReference要素のVersion属性を指定のバージョン(0.3の場合は0.3.1810.2508-preview)に変更する <PackageReference Include="Microsoft.Quantum.Canon" Version="0.3.1810.2508-preview" /> <PackageReference Include="Microsoft.Quantum.Development.Kit" Version="0.3.1810.2508-preview" />
  3. 文法の破壊的変更を自動で修正するため、dotnet msbuild /t:qsharpformatを実行する。コンパイラーの機能により、基本的には変更が必要なすべての部分が変更されるはず。
  4. 念のためビルドし、ビルドが成功することを確認する。

必要があれば動作確認の手順を再度実行しておきましょう。

*1:必須ではないが、通っていることを前提とする説明が多いため推奨