# 23May2022 CloudHub運用
###### tags: `MuleSoftTraining`
- 目次
[ToC]
## モジュール0: 準備
:::info
:information_source: コース資料
- :star: **APOpsCloud4.4_studentFiles_07dec2021.zip**
- 2日間を通して使用するファイル集
- APOpsCloud4.4_studentSlides_JA_07dec2021.zip (受講者スライド)
- 復習に使用
- APOpsCloud4.4_studentManual_JA_07dec2021.pdf (受講者マニュアル)
- 復習に使用
:::
### セットアップ
[CloudHub 運用コース セットアップマニュアル](https://salesforce.quip.com/mfmHABywK5rn)をご参照ください。
1. [Advanced REST Client](http://install.advancedrestclient.com/install)
- [Postman](https://www.postman.com/downloads/)など、その他のREST APIクライアントアプリケーションも使用可能です。
2. [Anypoint Platform CLI](https://docs.mulesoft.com/jp/runtime-manager/anypoint-platform-cli#%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
3. [Open JDK8+](Apache JMeter の実行に使用します)
- [Java インストールと環境変数設定](https://salesforce.quip.com/5B2PAV46QbB5#DCSABAatba1)
4. [Apache JMeter](http://%29https//dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.zip) - zip ファイル
- Mac: bin/jmeter
- Windows: bin/jmeter.bat
5. [OpenSSL](https://github.com/openssl/openssl)
## モジュール1: Anypoint Platform の概要
- Anypoint Platform コントロールプレーン
- Anypoint Platform でアプリケーションを設計・開発・デプロイ・管理・監視etcするためのツール/コンポーネント群
- URL: https://anypoint.mulesoft.com (US)
- ステータスの確認: https://status.mulesoft.com/
- URL: https://eu1.anypoint.mulesoft.com (EU)
- ステータスの確認: https://eu1-status.mulesoft.com/
- EUコントロールプレーンでは、CloudHubのEUのリージョンしか選べない
- Anypoint Platform ランタイムプレーン
- MuleランタイムとMuleアプリケーションをデプロイする環境・インフラ
- :star: **CloudHub**
- MuleSoftが運用管理する
- https://docs.mulesoft.com/jp/runtime-manager/cloudhub-app-runtime-version-updates
- スタンドアロンMuleランタイム
- Runtime Fabric
### 2日間使用する Anypoint Platform 認証情報
- パスワード: @Mulesoft2020
| 受講者名 | ユーザー | 閲覧専用ユーザー |
|:-------- |:--------:| --------:|
| Izuno | Cloud02Student01 | Cloud02Viewer01 |
| Iizima| Cloud02Student02 | Cloud02Viewer02 |
|Murakami| Cloud02Student03 | Cloud02Viewer03 |
| Nakayama| Cloud02Student04 | Cloud02Viewer04 |
|Mori| Cloud02Student05 | Cloud02Viewer05 |
|Kusaka| Cloud02Student06 | Cloud02Viewer06 |
|Sasaki| Cloud02Student07 | Cloud02Viewer07 |
|Anzai| Cloud02Student08 | Cloud02Viewer08 |
|Yamamori| Cloud02Student09 | Cloud02Viewer09 |
|Tanaka| Cloud02Student10 | Cloud02Viewer10 |
|Kim| Cloud02Student11 | Cloud02Viewer11 |
## モジュール2: ユーザーとリソースの管理
### Organization(組織)
- トップレベルのグループ
### Business Group(ビジネスグループ)
- CloudHub vCore リソース
- Network connetion, Load Balancer, VPC などのリソース
- Environments を複数持つことができる
#### サブグループの作成
- Cloud02Class
- Cloud02Group*XX*
- :star: Cloud02SubGroup*XX* `//ココ!`
### Environments(環境)
- Sandbox Type: **Dev**, Stag, QA...
- Production Type: **Prod**...
- Sandbox よりも良い MuleSoft SLA 保証
- (Design Type: Flow Designer で作成したアプリケーションを動かすための vCore)
### Teams(チームズ)
- ビジネスグループを横断したユーザーのグループ。複数のPersmission(権限)を、複数のビジネスグループで柔軟に管理できる。
- Teams 単位での Exchange アセットの共有も可能
- 各チームのメンバーの種類
- Maintainer(管理者)
- Member(メンバー)
- 親チームの権限は、子チームに継承される
- 親チームとなるチームの権限は、最小限で構成していく
- すべてのチームは **Everyone** を親に持つ
- Everyone (X) `//デフォルト`
- CloudHub Network Viewer (XY)
- App Deployer (XYa)
### Roles(役割)
- *非推奨* 新機能であるTeamsを推奨
### Permissions(権限)
- Userに直接付与も可能だが、Teams単位で権限をグルーピングすることを推奨している
#### 権限変更によるViewerの見え方の変化
- 権限がないとき

- Viewer権限の追加

- Deployer権限の追加

### Anypoint Platform 組織
- Organization (Cloud01Class) `//会社のようなもの`
- Business GroupA (Cloud01Group01)
`//部署のようなもの。sakaguchi がリーダー/オーナー`
- 子Business GroupA (Cloud01SubGroup**01**)
`//プロジェクトのような単位。sakaguchi がリーダー/オーナー`
- Production 0.4 vCore
- Prod 環境
- Sandbox 0.8 vCore
- Dev 環境
- DLB(専用ロードバランサー)
- VPC(Virtual Private Cloud)
- Business GroupB (Cloud01Group04)
`//部署のようなもの。Abe san がリーダー/オーナー`
- 子Business GroupA (Cloud01SubGroup**04**)
- Production 0.4 vCore
- Prod 環境
- Sandbox 0.8 vCore
- Dev 環境
- DLB(専用ロードバランサー)
- VPC(Virtual Private Cloud)
*※vCore: CloudHub にアプリケーションをデプロイする際に消費する契約リソースの単位 (1ワーカーあたり: 0.1 vCore ~ 16 vCore)*
[TODO]
Q: Business GroupsのRolesにデフォルトでRoleがいくつか入ってますが、Roleは非推奨であり運用上紛らわしいので削除したりしても問題はないでしょうか?ただ、Organization Administratorsなどは削除できないのかなとは想像してます。
A: 組織全体でRolesを無効化する(Business Groupの設定にあるRolesタブを非表示にする)ことはできません。以下の3つのRolesは、組織作成時にマスター組織にデフォルトで作成されますが、TeamsやPermissionに変換することができます。また、**Organization Administrator以外は**削除することも可能です。
- CloudHub Admin (Design)
- CloudHub Admin (Sandbox)
- Organization Administrator

## モジュール3: Mule アプリケーションの管理
### Muleアプリケーションのデプロイ
- デプロイ可能なアーカイブ (JAR) を Runtime Managerにアップロードする
- このクラスで中心トピック
- Runtime Manager で Exchange Asset を選択
- Anypoint Studio からデプロイ
- Anypoint Platform REST API でデプロイ
- 本コース後半で学びます
- Anypoint-CLI コマンドラインツールでデプロイ
- 本コース後半で学びます
- Maven プラグインでデプロイ
### Runtime Manager
- Muleランタイムのホスティングと、Muleアプリケーションのデプロイを管理
- 実行中のMuleランタイムとアプリケーションの監視も可能
- [アラート](https://docs.mulesoft.com/jp/runtime-manager/alerts-on-runtime-manager)の設定も可能
### MuleアプリケーションをCloudHubデプロイ
- 環境
- Prod
- アプリケーション名
- **server-info-02XX**
- CloudHubアプリケーションの名前は、グローバルで一意である必要がある
- jarファイル (Choose File > Upload File)
- APOpsCloud4.4_studentFiles_07dec2021
- mod03-mule
- **server-info-5.5.0-mule-application.jar**
### CloudHubネットワークの仕組み
- CH Worker (仮想マシン) IP
- 3.112.34.208:**8081**
- DNS (Shared Load Balancer)
- server-info-ch0101.jp-e1.cloudhub.io: **80**
- DNS (wokrker)
- **mule-worker**-server-info-ch0101.jp-e1.cloudhub.io:**8081**

Q: SLB側やWorkerに対して、直接アクセス制限することも可能でしょうか?
A: SLBはCloudHubリージョン(マルチテナント)で共有されているため、無効化やアクセス制限をかけることはできません。Workerにアクセス制限をかけるには、API Managerのポリシーで認証やIP制限をかけるか、Anypoint VPCを構成してVPC内にデプロイすることでFirewallルールによるアクセス制限をかけることができます。
Q: APIにリスナーを設定していない場合、呼べないと思って良いでしょうか
A: HTTP(S)での呼び出しを行うためには、APIにHTTPリスナーが設定されていないと呼び出しを行うことができません。ただし、スケジューラやOn Table Raw(データベースコネクタ)、MQメッセージのリスナー等の別のトリガーによって起動されるフローをCloudHubにデプロイすることは可能です。
[TODO]
Q: DNSの切替えタイミングは?
A: 新しいワーカーが起動するタイミングで、AWSのIPプールからIPアドレスが選択され、DNSに登録されます。SLBが新しいワーカーの起動を検知したら、新しいワーカーにルーティングが行われるようになります。具体的にどの程度の時間がかかるかの記述はありませんが、外部のLoad Balancingを使用する場合の目安として20-60秒のタイムアウトを設定するようにガイドされています。
https://docs.mulesoft.com/jp/runtime-manager/cloudhub-networking-guide#dedicated-load-balancing-configurations
### 0.1 vCore / 0.2 vCore バースタブルインスタンス
- https://blogs.mulesoft.com/dev-guides/how-to-tutorials/cloudhub-vs-runtime-fabric-for-high-performing-mules/
- https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html
[TODO]
Q: Basic Alertで送信されるメールのテンプレートは編集可能か?
A: テキストメッセージ部分は編集可能ですが、添付されるイメージ等のデザインテンプレートは編集できません。テキストのみ、あるいはより小さい画像にすべきだという意見がIdeas Portalに投稿されています。
https://help.mulesoft.com/s/ideas#0872T000000XaUPQA0
## モジュール4: Mule アプリケーションのモニタリング (監視) と分析
### Runtime Manager CloudHub Log
- 制限: 容量100MB もしくは TTL 30日間
- デフォルトのCloudHub log4j2 アペンダーが使用される
- https://docs.mulesoft.com/jp/runtime-manager/custom-log-appender#log4j-%E8%A8%AD%E5%AE%9A%E3%81%AE%E4%BD%9C%E6%88%90
- Log Analyzer
- https://help.mulesoft.com/s/article/Support-Log-file-analyzer-tool

### カスタムダッシュボード


[TODO]
Q: Monitorダッシュボードのデータ更新タイミングは?
A: 対象期間を指定した時にMonitoringのデータを取得します。Titaniumサブスクリプションの場合は自動リフレッシュのオプションがありますが、Gold/Platinumでは手動でデータを更新しなければ表示は自動的に変わりません。
https://docs.mulesoft.com/jp/monitoring/dashboards-using#refreshing-data
Q: Build-in ダッシュボードで確認するときの時間設定方法は?
A: ブラウザの時間が使用されている
### Visualizer

Runtime Managerのプロパティで以下の2つ設定が必要
* anypoint.platform.visualizer.layer=System
* anypoint.platform.config.analytics.agent.enabled=true
### Tracing Module
- 相関IDやログ変数の操作等、問題判別やフロー実行のトレーシングのための機能
- Muleアプリケーションで設定したLogging Variableをログに出力
- Log4jのカスタマイズが必要
https://docs.mulesoft.com/jp/tracing-module/1.0/tracing-module-logging
[TODO]
- カスタムメトリクスとの違い:カスタムメトリクスはTitaniumサブスクリプションのみで利用可能。ビジネスメトリクス可視化のための機能
https://docs.mulesoft.com/jp/monitoring/anypoint-custom-metrics-connector
Q: MonitoringのAlertやdashboard、Visualizerの対象は、CloudHubにデプロイしたAPIのみでしょうか?StandaloneやRuntimeFabricにデプロイしたAPIも対象とできるでしょうか?
A: StandaloneやRuntimeFabricにデプロイしたAPIも監視対象にできます。
Q: MonitoringのAlertは作成できる上限などあるのでしょうか?
A: Gold/Platinumでは組織あたり50個、Titaniumでは100個が上限になっています(追加のvCore契約で増加)
https://docs.mulesoft.com/jp/monitoring/alerts
Q: Propertiesでの設定項目についてはDocumentに記載がありますか?
A: VisualizerやMonitoringの項目に分散していますが記述されています。
- https://docs.mulesoft.com/jp/visualizer/layers
- https://docs.mulesoft.com/jp/runtime-fabric/1.6/manage-monitor-applications
## モジュール5: Mule アプリケーションの設定
`Couldn't find configuration property value for key ${env} `
### Runtime Manager > Properties タブ
`env=dev`



### パスワードの管理
1. Runtiem Manager プロパティタブでデプロイ時に設定する
- [safely hidden properties](https://docs.mulesoft.com/jp/runtime-manager/secure-application-properties#create-safely-hidden-application-properties)を使用する
- GUI上で見えないだけで、ファイルとしては平文(Studioで開いたり、Jarを解凍すると見えてしまう)
2. yamlの設定値を暗号化する (=jarファイルの一部に組み込む)
- [セキュア設定プロパティ](https://docs.mulesoft.com/jp/mule-runtime/4.4/secure-configuration-properties)
```
encrypted:
value1: "![nHWo5JhNAYM+TzxqeHdRDXx15Q5R56YVGiQgXCoBCew=]"
value2: "![nHWo6XyCADP+TzxqeHdRDXx15Q5R56YVGiQgXCoDFaj=]"
testPropertyA: "testValueA"
testPropertyB: "testValueB"
```
3. 外部のプロパティストレージを使用して自動化する (CI/CDパイプライン)
## モジュール6: パフォーマンスと信頼性の目標を達成する
### Object Store & VM on CloudHub
Object Store: key-value ペアのストレージ

### Object Store v2 - only on CloudHub
- 特別な設定なしで使用可能
- Object Store v2 REST API を使用可能
- 多くの場合は、MuleアプリケーションからObject Storeコネクタを使用して、値を作成・更新・保存する
- Cloudベースのkey-value store
`{hoge:fuga}`
- 複数のワーカーで共有が可能
- ワーカーが停止して再起動した後もデータは保持される
- 通信時と保管時のセキュリティ◎
- 制限
- 10 TPS
- アドオン: 100 TPS
- TTL: 30日間
- 更新されればリセット
- 各値 \>10MB
- エントリ数に制限はなし
#### 信頼性
- 高可用性 (High Availability, HA)
- 災害復旧 (Disaster Recovery, DR)
- CloudhubのHADR
https://docs.mulesoft.com/jp/runtime-manager/cloudhub-hadr
- Standalone MuleのHADR
https://docs.mulesoft.com/jp/mule-runtime/4.4/hadr-guide

### Region & AZ
Region: Tokyo(ap-northeast-1), Ohio(US-e2), Singapore
AZ: tokyo-az1, tokyo-az2
- 各AZはデータセンターであり、それぞれで100km以内程度の物理的な距離をとっている

### VM persistent Queue(永続化キュー)

#### Anypoint MQ
https://docs.mulesoft.com/jp/mq/mq-queues
#### Batch Jobと永続化キューについて
- 多くのレコードを分割して非同期&マルチスレッドで処理
- Batch Job は、VMキューを使用する (Batch Queue)
- **VM persistent Queue(永続化キュー)は、Batch Queue にも適用されてしまう**= Cloud上のキューへの読み書きが頻繁に発生=パフォーマンスに悪影響
> MuleSoft recommends that applications containing Batch Component do not use CloudHub Persistent Queue
- **Batch Job をもつMuleアプリケーションでは、VM persistent Queue(永続化キュー)を使用しない**
- https://help.mulesoft.com/s/article/Mule-Batch-Process-and-CloudHub-Persistent-Queues
- もしくは、プロパティを渡して回避
- `batch.persistent.queue.disable=true`
## モジュール7: CloudHub インフラストラクチャの管理
### VPC(Virtual Private Cloud, VPC)
- Firewallを構成できるプライベートなクラウド空間
- プライベートIPアドレス
- VPC <-> オンプレとの接続オプションも多数あります
### CloudHub DNS
1. SLB (共有ロバランサー)
- \<\<appname\>\>.jp-e1.cloudhub.io
2. ワーカー(パブリックIPアドレス)
- **mule-worker-**\<\<appname\>\>.jp-e1.cloudhub.io
3. ワーカー(プライベートIPアドレス)
- **mule-worker-internal**-\<\<appname\>\>.jp-e1.cloudhub.io
4. 専用ロードバランサ
- <<lb-name>>.lb.anypointdns.net
### CIDR
A.B.C.D/**E**
`10.0.1.0/32`
32 - 32 = 0
0^2 = 1
`10.0.1.0/24`
32 - 24 = 8
2^8 = **256**
`10.0.1.0/16`
32 - 16 = 16
2^16 = 65536
- 基本は大きめに作る
- 例えば: VPC にデプロイする CloudHub ワーカーの予定数の最大値の 10 倍
- リサイズにはダウンタイムが発生する
- プライベート IP アドレスの数 ≒ 管理できるワーカーの数(厳密には違う: ゼロダウンタイムを実現するブルーグリーンデプロイメントのために、IPアドレスはワーカーの数以上に必要)

参考:[CIDRブロックの決め方(MuleSoft Blog)](https://blogs.mulesoft.com/api-integration/security/how-to-choose-the-cidr-block-for-your-vpc/)
https://blogs.mulesoft.com/api-integration/security/how-to-choose-the-cidr-block-for-your-vpc/

Proxy appへの設定
```
backend.http.port=18080
backend.http.host= mule-worker-internal-api-backend-0201.jp-e1.cloudhub.io
backend.external.http.host= mule-worker-api-backend-0201.jp-e1.cloudhub.io
```
Backend appへの設定
```
backend.http.port=18080
```
VPC Firewall Ruleを追加: From Anywhereでは外部からアクセスされてしまう!

Internalのみのアクセスに限定する

### DLB (専用ロードバランサ)
OpenSSLで証明書を作成
```
req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
```
• Country: US
• State or Province: CA
• Locality Name: San Francisco
• Organization Name: MuleSoft
• Organization Unit Name: <空のまま>
• Common name: tokyo-dlb-02xx.lb.anypointdns.net
• Email Address: <空のまま>
#### 受信 (インバウンド) http モードの設定
* Off – すべてのhttpリクエストをドロップする
* On – HTTPプロトコルを使用したデフォルトのSSLエンドポイントでの使用を許可する
* リダイレクト – HTTPSプロトコルを使用して, デフォルトのSSLエンドポイントにトラフィックをリダイレクトする
## モジュール8: 管理タスクの自動化
### Anypoint CLI
https://docs.mulesoft.com/jp/runtime-manager/anypoint-platform-cli
- インタラクティブモード
ユーザーがコマンドを打っていくモード
Anypoint Platform と接続
```anypoint-cli --username=Cloud02Studentxx --password=@Mulesoft2020 --organization=Cloud02SubGroupxx --environment=Prod```
//認証情報を渡す
:warning: **プロキシ設定が必要な場合**
https://docs.mulesoft.com/jp/runtime-manager/anypoint-platform-cli#%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E7%B5%8C%E7%94%B1%E3%81%A7%E3%81%AE-anypoint-cli-%E3%81%AE%E4%BD%BF%E7%94%A8
`runtime-mgr cloudhub-application list` // CHアプリケーションの一覧
`runtime-mgr cloudhub-application delete hidden-properties-0101` // CHアプリケーションの削除
`use environment Dev` //開発環境に切り替わる
- スクリプティングモード
スクリプトを読み込んでいくモード

#### Cloud02Viewer01を使ったテスト
Q: CLIの実行者により使用できるコマンドは分けられていますか?
A: CLIでのコマンド実行時に権限がチェックされます。使用可能なコマンドが事前チェックされてフィルタリングされることはありません。
1. Cloud02Viewer01には「Create VPC」の権限はありません。

2. CLIでのコマンド検索はできますが、入力するとUnauthorizedになりました。

3. 「Create VPC」の権限があるCloud02Student01に切り替えて、コマンドを入力すると作成することができました。

### Anypoint Platform REST API
* https://docs.mulesoft.com/jp/runtime-manager/cloudhub-api
* https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/
#### API 呼び出しの手順
1. https://anypoint.mulesoft.com/accounts/login に POST リクエストを送信します。
Header
`Content-Type: application/json`
Body
```
{
"username": "REPLACE_HERE!",
"password": "REPLACE_HERE!"
}
```
2. 403 Forbidden 「invalid csrf token」エラーが表示された場合は、Advanced REST Client の _csrf クッキーを削除します。
- Request > Web session > Cookie manager
3. 再度リクエストを送信すると 200 :ok: と access_token が返されます。
```
{
"access_token": "ffacd52c-2c2d-49a6-9c56-845d924db0fb",
"token_type": "bearer",
"redirectUrl": "/home/"
}
```
4. このアクセストークンを Authorization ヘッダーに使用して、 Anypoint Platform API を呼び出すことが可能になります。
例:
GET: `https://anypoint.mulesoft.com/accounts/api/users/me`
Header:`Authorization: Bearer 80566d46-3827-463c-b624-c36bae02d0df`
Access Managemnt API
https://anypoint.mulesoft.com/accounts/api/users/me

## モジュール9: まとめ
Q: PrivateLinkは未対応でしょうか
A: 2022年5月現在、Anypoint VPCの接続方法は以下の4つです。
- IPSec-VPN
- VPC Peering
- Direct Connect
- Transit Gateway