# 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 終わりに