Azure HPC/CAE環境構築管理ソフト: Azure CycleCloudの環境構築

マイクロソフトの田中です。AzureのHPC/CAE環境構築管理ソフト Azure CycleCloudについてご紹介します。

設計・開発領域で使われる計算環境に構築・管理にはアプリケーションの知識がいるため特殊な領域です。
クラウド環境では、各社クラウドネイティブな方法でHPC/CAE環境を構築していました。
Microsoftのパブリッククラウドでは、いつでも利用できるInifiniBandなどの環境を効率的に利用するため、Azure CycleCloudが利用できます。CycleCloudは旧Cycle Computing社のソフトウェアで今回Microsoftの買収に伴いリブランディングされたということになります。本記事ではドキュメントリソースと構築方法について記載します。

まずは宣伝。デモ中心にご紹介できるので参加可能であればご検討ください。
## セミナー予定
### 11/7 Microsoft Tech Summit 2018 Day3 17:30-18:20（有償セミナー）
設計業務で利用するクラウド CAE/HPC ～Azure CycleCloud/Avere 紹介～
Microsoftの設計・開発領域におけるデジタル改革の取り組みとAzure CycleCloud、関連ソリューションとしてAvereをご紹介します。

### 11/26 Azure CycleCloud ハンズオン 13:00-16:00@MS品川オフィス
ハンズオンセッションを予定しています。サービスプリンシパルをどうするのかという問題があるのですが、具体的なイメージをつけてもらえればと思っています。
登録サイト https://www.microsoftevents.com/profile/4919842　

## Azure CycleCloudとは
HPC/CAE向けのクラスタ構築管理ソリューションです。基本的な機能があり、アプリケーション作成のためのフレームワークが用意されます。無償なのも特徴で、既存のHPCユーザはモダンな利用方法でクラウド上にHPCアプリケーション（ソルバ）を展開できます。Microsoftからも有名商用・OSSソルバのテンプレートが提供される予定です。
![20181104-pic01.png](https://qiita-image-store.s3.amazonaws.com/0/21450/a650ec5a-10fa-ff38-8fe5-64058052f3ae.png)

以下のあたりが利用できる機能です。

 - 計算リソースの管理
 - データの管理
 - リソースの自動調整
 - レポートの作成
 - 監視と分析
 - アラートの作成
 - クラスタ用のテンプレート
 - ワークフローの作成

**リソース・ドキュメント：https://docs.microsoft.com/en-us/azure/cyclecloud/**

#構築のステップ　以下クイックスートの抜粋
https://docs.microsoft.com/en-us/azure/cyclecloud/quickstart-install-cyclecloud　

##Azure CycleCloudクイックスタート
1. Azureの権限等、準備
    - ターミナル環境(Linux, バーチャルコンソール)
    - Azure CLI環境
    -サービスプリンシパル権限
       - Azrue Active Directory –> ユーザー設定 –> アプリの登録]が「はい」になっている
    - Azrueサブスクリプションのアクセス許可
       - サブスクリプション -> Overview「所有者」 または「ユーザーアクセス管理者」ロールが割り当てられている
2. サービスプリンシパルの作成
3. ARMテンプレートを利用してAzure CycleCloudの仮想マシンを展開（もしくはマニュアル）
4. Cycle ServerのパブリックIPアドレス（FQDN）を確認
5. ブラウザからCycle ServerのFQDNへアクセス

###1. ターミナル、Azure CLIの環境の準備をする

###2. サービスプリンシパル
Azure CycleCloudには、Azureサブスクリプションへの投稿者アクセス権を持つサービスプリンシパルが必要です。利用できるサービスプリンシパルがない場合は、今すぐ作成できます。サービスプリンシパル名は一意である必要があります。下の例では、CycleCloudAppを好きなものに置き換えることができます。

Azure CLI
`az ad sp create-for-rbac --name CycleCloudApp --years 1`

出力には一連の情報が表示されます。appId、passwordとtenantのコピーをしてください。特にパスワードは一度だけの表示です。

出力
`"appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"displayName": "CycleCloudApp",
"name": "http://CycleCloudApp",
"password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"`

**SSH鍵ペア**
CycleCloud VMとクラスタにログインするには、SSHキーが必要です。
SSH鍵ペアを生成するには、Linux
`ssh-keygen -f ~/.ssh/id_rsa  -N "" -b 4096`
SSH公開鍵を取得するには：
`cat ~/.ssh/id_rsa.pub`
出力はssh-rsaで始まり、その後に長い文字列が続きます。この公開鍵キーをコピーして保存してください。

### 3. ARMテンプレートでの展開
GitHubに格納されているARMテンプレートを使用して、CycleCloudをAzureリソースにインストールします。 
https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FCycleCloudCommunity%2Fcyclecloud_arm%2Fmaster%2Fazuredeploy.json　

ARMテンプレートの入力内容

 - 3つの別々のサブネットを持つ仮想ネットワークを展開します。
    - cycle：CycleCloudサーバーが起動されているサブネット
    - HPCクラスタのA / 22サブネットを計算する
    - user：ユーザログインを作成するためのサブネット
 - サイクルサブネット内に仮想マシンをプロビジョニングし、Azure CycleCloudをインストールします。

ARMテンプレートの内容が成功したか確認する

### 4. Cycle ServerのパブリックIPアドレス（FQDN）を確認
2つの方法があります。

1. Azure Portal からFQDNを確認
2. CLIコマンドから確認
    3. `az network public-ip show -g ${RESOURCE_GROUP?} -n cycle-ip --query dnsSettings.fqdn`

### 5. ブラウザからCycle ServerのFQDNへアクセス

ブラウザ上での初回設定
1. CycleCloudサイトサイト名設定
2. ユーザパスワード設定

## カスタム例

展開した状態からいくつかのアプリケーションを登録しています。

![20181104-pic02.png](https://qiita-image-store.s3.amazonaws.com/0/21450/8397ddfe-b4dc-7c4d-1c52-c6f7bbd72716.png)