---
# System prepended metadata

title: 09feb2022CloudHub
tags: [MuleSoftTraining]

---

# 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)


![画面共有](https://i.imgur.com/mb9FMxs.png)

### 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](https://i.imgur.com/orPXb8R.png)

#### スケーリング
- スケールイン/スケールアウト: 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

![SLB](https://i.imgur.com/DuSWoYm.png)

- 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日間

#### アプリケーションの再デプロイ
ゼロダウンタイム
![](https://i.imgur.com/wJthehy.png)

#### 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`

![env-var](https://i.imgur.com/ZHFhjaf.png)

#### 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 & VM on CloudHub](https://i.imgur.com/RiNQQs3.png)

#### 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以内程度の物理的な距離をとっている

![Region&AZ](https://i.imgur.com/5YjJP6F.png)

#### VM persistent Queue(永続化キュー)
![VM-persistent-Q](https://i.imgur.com/4Nx9K9R.png)

![checkbox](https://i.imgur.com/UcU93Az.png)

#### 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 インフラストラクチャの管理
![mod7](https://i.imgur.com/j8ULXHe.png)

#### 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
![](https://i.imgur.com/d82lZ24.png)

![](https://i.imgur.com/5PPb3lo.png)

#### 直接バックエンドを呼び出す

- 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への呼び出しはふさがれている
 
![VPC](https://i.imgur.com/p3iNsWH.png)

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

![DLB](https://i.imgur.com/oajlvdl.png)
- 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のスタート


- スクリプティングモード
スクリプトを読み込んでいくモード
![](https://i.imgur.com/DsArwCq.png)


#### 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

![](https://i.imgur.com/HUkMe5J.png)


### Module9 終わりに