# 09feb2022CloudHub
###### tags: `MuleSoftTraining`
[TOC]
## Day1
### Module0 準備
#### 資料のダウンロード
[学習ポータル Training Dashboard](https://training.mulesoft.com/dashboard)
Enrollments > Instructor-led > コース名 > Resources タブ
- :star: **APOpsCloud4.4_studentFiles_07dec2021.zip**
- 2日間を通して使用するファイル集
- APOpsCloud4.4_studentManual_JA_07dec2021.pdf
- 復習に使用
- APOpsCloud4.4_studentSlides_JA_07dec2021.zip
- 復習に使用
#### セットアップ
[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)

### Module1 Anypoint Platform の概要
- Anypoint Platform コントロールプレーン
- Anypoint Platform でアプリケーションを設計・開発・デプロイ・管理・監視etcするためのツール/コンポーネント群
- URL: https://anypoint.mulesoft.com/home (US)
- ステータスの確認: https://status.mulesoft.com/
- Anypoint Platform ランタイムプレーン
- MuleランタイムとMuleアプリケーションをデプロイする環境・インフラ
- **CloudHub!**
- スタンドアローンMuleランタイム
- Runtime Fabric
#### 2日間使用する Anypoint Platform 認証情報
- ユーザー名: Cloud02Student*XX*
- 01: Sakaguchi
- 02: Naganuma san
- 03: Yamaguchi san
- 04: Okimoto san
- 05: Moriyama san
- 06: Suzuki san
- 07: MIyazawa san
- 08: Okada san
- 09: Torii san
- 10: Okumura san
- パスワード: @Mulesoft2020
#### Anypoint Access Management
Anypoint Platform のユーザー、リソース(CloudHub アプリケーションをデプロイするための vCore など)、ビジネスグループ、環境、チームの管理を行うツール
#### Anypoint Platform 組織
- Organization (Cloud01) `//会社のようなもの`
- Business GroupA (Cloud02Group01)
`//部署のようなもの。sakaguchi がリーダー/オーナー`
- 子Business GroupA (Cloud01SubGroup01)
`//プロジェクトのような単位。sakaguchi がリーダー/オーナー`
- Production 0.4 vCore
- Prod 環境
- Sandbox 0.8 vCore
- Dev 環境
- DLB(専用ロードバランサー)
- VPC(Virtual Private Cloud)
- Business GroupB (Cloud01Group01)
- 子Business GroupA (Cloud01SubGroup01)
- Production 0.4 vCore
- Prod 環境
- Sandbox 0.8 vCore
- Dev 環境
- DLB(専用ロードバランサー)
- VPC(Virtual Private Cloud)
*※vCore: CloudHub にアプリケーションをデプロイする際に消費する契約リソースの単位 (1ワーカーあたり: 0.1 vCore ~ 16 vCore)*
#### Muleアプリケーション
- Anypoint Studio(IDE)で開発
- ローコードで開発可能な Java アプリケーション
- XMLで定義
- jarファイルにパッケージング
- Mule ランタイム(エンジン/アプリケーションサーバー)にデプロイされ実行される
#### CloudHub ワーカー
- OS, Java, Runtime などMuleSoftが管理するAWS EC2 = 仮想マシン
- 管理するインフラの数を抑制=お客様はMuleアプリケーションの開発側により集中することができる
- [CloudHubワーカーについて](https://docs.mulesoft.com/jp/runtime-manager/cloudhub-architecture#cloudhub-%E3%83%AF%E3%83%BC%E3%82%AB%E3%83%BC)

#### スケーリング
- スケールイン/スケールアウト: CloudHubワーカーの数を増やす/数を減らす
- スケールアップ/スケールダウン: CloudHubワーカーのサイズを大きくする/小さくする
### Module2 ユーザーとリソースの管理
#### Organization(組織)
- トップレベルのグループ
#### Business Group(ビジネスグループ)
- CloudHub vCore リソース
- Environments を複数持つことができる
#### Environments(環境)
- Sandbox Type: **Dev**, Stag, QA...
- Production Type: **Prod**...
- Sandbox よりも良いMuleSoft SLA 保証
- (Design Type: Flow Designer で作成したアプリケーションを動かすためのvCore)
#### User(ユーザー)
- anypoint.mulesoft.com ログインするユーザー
- SSO も使用可能
#### Teams(チームズ)
- ビジネスグループを横断したユーザーのグループ。複数のPersmission(権限)を、複数のビジネスグループで柔軟に管理できる。
- 各チームのメンバーの種類
- Maintainer(管理)
- Member(メンバー)
- 親チームの権限は、子チームに継承される
- 親チームとなるチームの権限は、最小限で構成していく
- すべてのチームは **Everyone** を親に持つ
- Everyone (X) `//デフォルト`
- TeamA (XY) `//CloudHub Network Viewer`
- TeamA1 (XYa) `//Runtime Deployer`
- TeamA2 (XYb)
- Runtime Managaer Viewers (XZ)
- App Deployers (XZc)
#### Roles(役割)
- *非推奨* 新機能である Teams を推奨
#### Permissions(権限)
- Userに直接付与も可能だが、Teams単位で権限をグルーピングすることを推奨している
#### サブグループの作成
- Cloud02
- Cloud02Group*XX*
- Cloud02SubGroup*XX* `//ココ!`
#### Cloud02ViewerXXでログイン
- ユーザー名: Cloud02ViewerXX
- パスワード: @Mulesoft2020
### Module3 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**
#### ideas portal
https://help.mulesoft.com/s/ideas
#### ワーカーのIPアドレス vs CloudHub Shared Load Balancer (SLB, 共有ロードバランサー)
- CH Worker (仮想マシン) IP
- 54.199.194.201
- Domain(Shared Load Balancer)
- server-info-ch0201.jp-e1.cloudhub.io

- API Client (ブラウザ含む)
↓HTTP(80)/HTTPS(443)
- SLB(共有ロードバランサー)
`server-info-ch0201.jp-e1.cloudhub.io`
↓80->**8081** ↓ 443->**8082**
- old CH Worker `54.199.194.201:8081`
- new CH Worker `18.183.181.198:8081`
#### Runtime Manager CloudHub Log
- 制限: 容量100MB もしくは TTL 30日間
#### アプリケーションの再デプロイ
ゼロダウンタイム

#### 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
- 0.X シミュレーション (メモリ) https://www.youtube.com/watch?v=FVFTk2ubk_0
- Slack Connector (https://www.youtube.com/watch?v=FNDDfsT152M)
- 1 Mule アプリケーション
- 1 API (XX SAPI, GET:/customers, POST:/customers)
- N個 CloudHubワーカー(高可用性,HA)
### Module4 Muleアプリケーションの監視と分析
- Log Analyzer
- https://help.mulesoft.com/s/article/Support-Log-file-analyzer-tool
#### CloudHub Runtime Manager Log
- デフォルトの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
#### Tracing
https://docs.mulesoft.com/tracing-module/1.0/tracing-module-logging
#### 監視対象アプリケーション: price-lookup-0201
jar: studentFiles/mod4-monitoring/**price-lookup-service-5.5.0-mule-application.jar**
#### snippet(コードスニペット)
```
# Service Endpoint
<<App url>>(×3) は変更してください
[http://<<App url>>/flights/prices] (http://<<App url>>/flights/prices)
## Allowed methods
```GET```
## Parameters
|Parameter name|Type|Required?|
|---|---|---|
|destination | query | yes|
### Sample HTTP request
```http://<<App url>>/flights/prices?destination=SFO```
```
#### Anypoint Monitoring Agent
- https://docs.mulesoft.com/jp/monitoring/configure-monitoring-cloudhub
#### SLB(共有ロードバランサー) - レート制限 (429)
https://docs.mulesoft.com/jp/runtime-manager/dedicated-load-balancer-tutorial#%E5%85%B1%E6%9C%89%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B5
#### Mule 4 - Back Pressure
https://blogs.mulesoft.com/dev-guides/how-to-tutorials/mule-4-reactive-programming/
https://docs.mulesoft.com/jp/mule-runtime/4.4/tuning-backpressure-maxconcurrency
## Day2
### Module5 Muleアプリケーションの設定
#### Runtime Manager > Properties タブ
`env=dev`

#### safely-hidden properties
https://docs.mulesoft.com/jp/runtime-manager/secure-application-properties
mule-artifact.json `//開発者側タスク`
```
{
"secure.properties":
["db1.password", "hoge", "fuga.bar"]
}
```
#### Runtime Manager > Scheduler
スケジュール実行の頻度を変更(開発者が変更する必要はありません)
### Module6 パフォーマンスと信頼性の目標を達成する
#### https://app.diagrams.net/ の使い方
1. https://app.diagrams.net/
2. File
3. Open from
4. Device
5. xml を指定する
- APP-NET_ArchitectureDiagrams.drawio.xml
- INT-SOL_ArchitectureDiagrams.drawio.xml
#### Object Store & VM on CloudHub

#### 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)
#### Object Store v2 テスト
- OSv2 に値を保存(/store)
http://object-store-0201.jp-e1.cloudhub.io/store?key=Alice&value=first
`{"Alice":"first"}`
Worker1: `13.231.183.230:8081`
Worker2: `3.112.255.43:8081`
- Worker1の/storeを直接呼び出す(ポート**8081**)
http://13.231.183.230:8081/store?key=Bob&value=second
- Worker2からBobの値を直接参照する(ポート**8081**)
http://3.112.255.43:8081/retrieve?key=Bob
`second` //2つのワーカーでOSv2は共有されている???
#### OSv2 はアプリケーションの再起動に耐えるか?
`runtime-mgr cloudhub-application restart object-store-0201`
http://object-store-0201.jp-e1.cloudhub.io/retrieve?key=Alice
http://object-store-0201.jp-e1.cloudhub.io/retrieve?key=Bob
#### スケーリング
- 垂直方向へのスケーリング (vertical scaling) / スケールアップ・スケールダウン
- マシン処理の能力自体が上がる → パフォーマンス :up:
- 水平方向へのスケーリング (horizontal scaling) /スケールイン・スケールアウト
- 信頼性 :up:
- 処理するノード/ワーカーの数が増える → パフォーマンス :up:
#### 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と永続化キューについて
- 多くのレコードを分割して非同期&マルチスレッドで処理
- https://docs.mulesoft.com/jp/mule-runtime/4.4/batch-processing-concept
- 10000件のレコードを分割して、**Batch Queue**で管理する
- 100
- 100
- 100
- 100
- 100
- ..
- Batch Job は、VMキューを使用する (Batch Queue)
- **VM persistent Queue(永続化キュー)は、Batch Queue にも適用されてしまう**= Cloud上のキューへの読み書きが頻繁に発生=パフォーマンスに悪影響
- **Batch Job をもつMuleアプリケーションでは、VM persistent Queue(永続化キュー)を使用しない**
- https://help.mulesoft.com/s/article/Mule-Batch-Process-and-CloudHub-Persistent-Queues
- もしくは、プロパティを渡して回避
- `batch.persistent.queue.disable=true`
#### CloudHub アプリケーションを削除
1. `use environment Dev`
2. `runtime-mgr cloudhub-application list`
3. `runtime-mgr cloudhub-application delete XXX`
### Module7 CloudHub インフラストラクチャの管理

#### VPC(Virtual Private Cloud, VPC)
- Firewallを構成できるプライベートなクラウド空間
- プライベートIPアドレス
- VPC <-> オンプレとの接続オプションも多数あります
#### CloudHub URL
1. SLB
- \<\<appname\>\>.jp-e1.cloudhub.io
- http://process-orders-0201.jp-e1.cloudhub.io/
2. ワーカー
- **mule-worker-**\<\<appname\>\>.jp-e1.cloudhub.io
- http://mule-worker-process-orders-0201.jp-e1.cloudhub.io:8081/
3. ワーカー(プライベートIPアドレス)
- **mule-worker-internal**-\<\<appname\>\>.jp-e1.cloudhub.io
### VPC -> CIDR Block
プライベートIP アドレスの数 ≒ 管理できるワーカーの数(厳密には違う: ゼロダウンタイムを実現するブルーグリーンデプロイメントのために、IPアドレスはワーカーの数以上に必要)
A.B.C.D/**E**
E = 32
32 - 32 = 0 -> 2^0 = IP アドレス 1個
E = 28
32 - 28 = 4 -> 2^4 = 16
E = 24 (MuleSoft CloudHubの最小構成)
32 - 24 = 8 -> 2^8 = **256**
E = 16 (MuleSoft CloudHubの最大構成)
32 - 16 = 16 -> 2^16 = **65536**
- 10.0.0.0/16
- 基本は大きめに作る
- 例えば: VPC にデプロイする CloudHub ワーカーの予定数の最大値の 10 倍
- リサイズにはダウンタイムが発生する
#### backend api
- name: api-backend-02XX
- jar: api-backend-5.5.0-mule-application.jar
- `backend.http.port = 18080`
- URL: api-backend-0201.jp-e1.cloudhub.io
#### proxy api
- name: api-proxy-02XX
- jar: api-proxy-5.5.0-mule-application.jar
- `backend.http.port = 18080`
- `backend.http.host = mule-worker-internal-api-backend-02XX.jp-e1.cloudhub.io`
- URL: api-proxy-0201.jp-e1.cloudhub.io


#### 直接バックエンドを呼び出す
- http://mule-worker-api-backend-0201.jp-e1.cloudhub.io:18080/
- http://\<ipAddress\>:18080/
#### 確認!
:star: 1. http://api-proxy-0201.jp-e1.cloudhub.io/
- /api/lookup が上手くいく!
- = VPC間の18080は許可されている
:star: 2. http://mule-workerapi-backend-0201.jp-e1.cloudhub.io:18080/
- 外からの18080への呼び出しはふさがれている

#### DLB(専用ロードバランサー)

- VPC の中にセットアップ
- Firewallの設定が可能
- IPアドレスの許可リストの設定が可能
- 相互のTLS
- マッピングルール
- <lb-name(ロードバランサー名)>.lb.anypointdns.net
- CNAME
- ヴァニティドメインが使用可能
#### Net-Tools
https://help.mulesoft.com/s/article/How-To-Use-Network-Tools-Application
#### OpenSSl
cd C:\Program Files\OpenSSL-Win64\bin
`openssl.exe req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt`
- Country:US
- State:CA
- City:San Fransisco
- Organization:Mulesoft
- OUN:空のまま
- Common Name: ch0201.lb.anypointdns.net
- Email Address:空のまま
- Public Key
- certificate.crt
- Private Key
- privateKey.key
#### DLBのバックエンド app
dlb-backend-5.5.0-mule-application.jar
### Module8 運用タスクの自動化
#### Anypoint CLI
https://docs.mulesoft.com/jp/runtime-manager/anypoint-platform-cli
- インタラクティブモード
ユーザーがコマンドを打っていくモード
Anypoint Platform と接続
```
anypoint-cli --username=Cloud02Student01 --password=@Mulesoft2020 --organization=Cloud02SubGroup01 --environment=Prod
```
1. `help` //コマンドの一覧
2. `runtime-mgr cloudhub-application list` //CloudHub アプリケーションの一覧
3. `runtime-mgr cloudhub-application delete server-info-ch0201` // server-info-ch0201の削除
4. `runtime-mgr cloudhub-application delete server-info-env-prod-0201` // server-info-env-prod-0201の削除
5. `runtime-mgr cloudhub-application start object-store-0201` // object-store-0201のスタート
- スクリプティングモード
スクリプトを読み込んでいくモード

#### Anypoint Platform REST API
https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/
##### レート制限
https://help.mulesoft.com/s/article/Anypoint-Platform-REST-API-Rate-Limit#:~:text=Anypoint%20platform%20detects%20usage%20based,from%20an%20individual%20client%20IP.
> As a guidance, it is recommended that applications do not exceed 15 requests per second from an individual client IP.
>
> Should an API Rate Limit be exceeded, the Anypoint Platform will reject requests with a 503 Service Unavailable or 503 Service Temporarily Unavailable HTTP Response Code.
#### 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

### Module9 終わりに