# 23June2022 CloudHub運用コース - 目次 [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/ - Anypoint Platform ランタイムプレーン - MuleランタイムとMuleアプリケーションをデプロイする環境・インフラ - :star: **CloudHub** - スタンドアロンMuleランタイム - Runtime Fabric ### 2日間使用する Anypoint Platform 認証情報 - パスワード: @Mulesoft2020 | 受講者名 | ユーザー | 閲覧専用ユーザー | |:-------- |:--------:| --------:| | Izuno | Cloud01Student01 | Cloud01Viewer01 | | Anzai| Cloud01Student02 | Cloud01Viewer02 | | Watanabe| Cloud01Student03 | Cloud01Viewer03 | | Takimoto| Cloud01Student04 | Cloud01Viewer04 | | Yamamoto| Cloud01Student05 | Cloud01Viewer05 | | Sudo| Cloud01Student06 | Cloud01Viewer06 | | Nomura | Cloud01Student07 | Cloud01Viewer07 | ### Muleアプリケーション - Anypoint Studio(IDE)で開発 - ローコードで開発可能な Java アプリケーション - XMLで定義 - jar ファイルにパッケージング (Maven) - Mule ランタイム(エンジン/アプリケーションサーバー)にデプロイされ実行される ### CloudHub ワーカー - OS, Java, Mule 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ワーカーのサイズを大きくする/小さくする ## モジュール2: ユーザーとリソースの管理 ### Organization(組織) - トップレベルのグループ ### Business Group(ビジネスグループ) - CloudHub vCore リソース - Network connetion, Load Balancer, VPC などのリソース - Environments を複数持つことができる #### サブグループの作成 - Cloud01Class - Cloud01Group*XX* - :star: Cloud01SubGroup*XX* `//ココ!` ### Environments(環境) - Sandbox Type: **Dev**, Stag, QA... - Production Type: **Prod**... - Sandbox よりも良い MuleSoft SLA 保証 - (Design Type: Flow Designer で作成したアプリケーションを動かすための vCore) ### User(ユーザー) - anypoint.mulesoft.com ログインするユーザー - SSO も使用可能 ### Teams(チームズ) - ビジネスグループを横断したユーザーのグループ。複数のPersmission(権限)を、複数のビジネスグループで柔軟に管理できる。 - Teams 単位での Exchange アセットの共有も可能 - 各チームのメンバーの種類 - Maintainer(管理者) - Member(メンバー) - 親チームの権限は、子チームに継承される - 親チームとなるチームの権限は、最小限で構成していく - すべてのチームは **Everyone** を親に持つ - Everyone (X) `//デフォルト` - CloudHub Network Viewer (XY) - App Deployer (XYa) - TeamZZZ (XYb) ### Roles(役割) - *非推奨* 新機能であるTeamsを推奨 ### Permissions(権限) - Userに直接付与も可能だが、Teams単位で権限をグルーピングすることを推奨している #### 権限変更によるViewerの見え方の変化 - 権限がないとき ![](https://i.imgur.com/MZNh0v4.png) - Viewer権限の追加 ![](https://i.imgur.com/6UU6zXu.png) - Deployer権限の追加 ![](https://i.imgur.com/qiql42u.png) ## Module 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-01XX** - 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-0101.jp-e1.cloudhub.io: **80** - DNS (wokrker) - **mule-worker**-server-info-ch0101.jp-e1.cloudhub.io:**8081** ![](https://i.imgur.com/WbTfmeS.png) ### CloudHubのログ - 100MB, 30日 (Platinum, Gold) - 外部のログツールや、ストレージに保管する運用 ### Anypoint Monitoring のログ For Titanium Subscription, you will get 200 GB per production core. https://help.mulesoft.com/s/article/Anypoint-Monitoring-Log-FAQ ## Module 4: Mule アプリケーションのモニタリング (監視) と分析 - Log Analyzer - https://help.mulesoft.com/s/article/Support-Log-file-analyzer-tool ### CloudHub Runtime Manager Log - CloudHub のアプリケーションログの設定には、デフォルトで 「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 ![logs](https://i.imgur.com/kEjijNr.png) ### 監視対象アプリケーション: price-lookup-01xx jar: {studentFiles}/mod4-monitoring/**price-lookup-service-5.5.0-mule-application.jar** ![cpu-single-stats1](https://i.imgur.com/inrrKgR.png) ![cpu-single-stats2](https://i.imgur.com/1feKSxH.png) ### Tracing https://docs.mulesoft.com/tracing-module/1.0/tracing-module-logging Q.Tracing Module はPlatinumサブスクリプションでも使えますか? A.使用できます。開発者がMuleアプリケーションの中に実装するとともに、Log4j appenderの設定が必要です。 - Tracing Module - https://docs.mulesoft.com/tracing-module/1.0/tracing-module-logging - Logging Variable の追加 + Pattern Layout を変更 = ログの拡張 ``` <!-- <PatternLayout pattern="%-5p %d [%t] [processor: %X{processorPath}; event: %X{correlationId}] %c: %m%n"/>--> <PatternLayout pattern="%-5p %d [%t] [%MDC] %c: %m%n"/> ``` Q:monitoring ダッシュボードで以下はどう違うのでしょうか? A:https://docs.mulesoft.com/monitoring/app-dashboards#overview-charts * Average Response Time (AからNまでの平均) * Muleアプリ内でMuleイベントが処理される平均時間。 * Inbound - Average Response Time (A-N, B-M, D-Gの平均) * インバウンド・リクエストの平均応答時間。Muleアプリが複数のコネクターを持つ場合、すべてのコネクターの応答時間がこの指標に含まれます。 * Outbound - Average Response Time (HからKまでの平均時間) * アウトバウンド・リクエストの平均応答時間。Muleアプリが複数のコネクターを持つ場合、すべてのコネクターの応答時間がこの指標に含まれます。 ![](https://i.imgur.com/pEdla3V.png) Q: (続き)Average Response Timeよりも、Inbound-Avarage Response Timeが長い場合がある。どのようなケースで起きるのか? A: 外部呼び出しを行うコネクターには、同期呼び出しと非同期呼び出しがあるものがあります。非同期の呼び出し(JMSのPublishなど)では、他のフローを呼び出した後、結果を待たずに後続処理が続行されるので、A-Nの応答時間より、B-MやD-Gが長いケースがあります。また、メトリクスの受信/保管は非同期に行われているため、複数のメトリクスの計測/表示タイミングが同時とは限りません。必要に応じて、サポートにお問い合わせください。 ## Module 5: Mule アプリケーションの設定 `Couldn't find configuration property value for key ${env} ` ### Runtime Manager > Properties タブ `env=dev` - プロパティ値は、大文字/小文字が区別されるので、要注意! ![](https://i.imgur.com/ITZjby7.png) ![env-var](https://i.imgur.com/ZHFhjaf.png) ### パスワードの管理 1. Runtiem Manager プロパティタブでデプロイ時に設定する - [safely hidden properties](https://docs.mulesoft.com/jp/runtime-manager/secure-application-properties#create-safely-hidden-application-properties)を使用する 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" ``` ``` <flow name="main"> <set-payload value="${secure::encrypted.value1}"/> </flow> ``` 3. 外部のプロパティストレージを使用して自動化する (CI/CDパイプライン) ### Runtime Manager > Scheduler スケジュール実行の頻度を変更(開発者が変更する必要はありません) - 定期間隔での実行 - CRON式での設定 - https://crontab.guru/ ![](https://i.imgur.com/Zqe9nHY.png) Q: Business Groupをまたいだアプリケーションのコピーはできるか? A: EnvironmentはBusiness Groupに紐づいて作成されるので、環境間の移行の操作では他のBusiness GroupのEnvironmentにあるアプリケーションをそのまま取得して移行することはできません。Exchangeからファイルを取得することは可能です。 Q: Exchangeにjarを公開するには? A: CustomというカテゴリでJarを公開・共有することができます。 https://docs.mulesoft.com/jp/exchange/to-create-an-asset https://varun-verma.medium.com/using-mulesoft-exchange-for-storing-custom-jar-files-55570cb430fd ## Module 6: パフォーマンスと信頼性の目標を達成する ### Object Store & VM on CloudHub Object Store: key-value ペアのストレージ ![](https://i.imgur.com/4xo4Fas.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以下にする - エントリ数に制限はなし #### 信頼性 https://docs.mulesoft.com/jp/runtime-manager/cloudhub-hadr - 高可用性 (High Availability, HA) ![](https://i.imgur.com/nWhKYTd.png) - 災害復旧 (Disaster Recovery, DR) ![](https://i.imgur.com/1kk3BTp.png) #### Object Store v2 テスト - OSv2 に値を保存(/store) http://object-store-0101.jp-e1.cloudhub.io/store?key=Alice&value=first `{"Alice":"first"}` Worker1:`18.176.58.185:8081` Worker2: `3.112.2.89:8081` - Worker1の/storeを直接呼び出す(ポート**8081**) `http://<worker-1>:8081/store?key=Bob&value=second` - Worker2からBobの値を直接参照する(ポート**8081**) `http://<worker-2>:8081/retrieve?key=Bob&value=second` //2つのワーカーでOSv2は共有されている?? #### 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上のキューへの読み書きが頻繁に発生=パフォーマンスに悪影響 > 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` ## Module 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 ### 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アドレスはワーカーの数以上に必要) - Private アドレスを指定して作るのが基本 (TODO) - リサイズにはダウンタイムが発生する ![](https://i.imgur.com/3MuCnGa.png) 参考:[CIDRブロックの決め方(MuleSoft Blog)](https://blogs.mulesoft.com/api-integration/security/how-to-choose-the-cidr-block-for-your-vpc/) ### VPCへのデプロイ #### backend api - name: api-backend-01XX - jar: api-backend-5.5.0-mule-application.jar - `backend.http.port=18080` - URL: api-backend-01XX.jp-e1.cloudhub.io #### proxy api - name: api-proxy-01XX - jar: api-proxy-5.5.0-mule-application.jar - `backend.http.port=18080` - `backend.http.host=mule-worker-internal-api-backend-01XX.jp-e1.cloudhub.io` - URL: api-proxy-01XX.jp-e1.cloudhub.io ![](https://i.imgur.com/k3XV8bH.png) ![vpc](https://i.imgur.com/0NmWsEh.png) 18080 を解放 ![port18080-anywhere](https://i.imgur.com/40Wcu9i.png) ![proxy-backend](https://i.imgur.com/mzsnMlD.png) ### DLB (専用ロードバランサ) ![](https://i.imgur.com/beRxfUe.png) - VPC の中にセットアップ - Firewallの設定が可能 - IPアドレスの許可リストの設定が可能 - 相互のTLS - マッピングルール - {dlnDns}/{app}/ - <lb-name(ロードバランサー名)>.lb.anypointdns.net - CNAME - ヴァニティドメインが使用可能 ### OpenSSL Windows: `bin/openssl.exe req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt` Mac: `oppenssl` `req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt` テスト: https://tokyo-dlb-0101.lb.anypointdns.net/dlb-backend-0101/ https://{dlbDns}/<appName>/ :warning: **最後の / を入れないと 404 Not Found になります** ## Module8: 管理タスクの自動化 ### Anypoint CLI https://docs.mulesoft.com/jp/runtime-manager/anypoint-platform-cli - インタラクティブモード ユーザーがコマンドを打っていくモード Anypoint Platform と接続 ```anypoint-cli --username=Cloud01Student01 --password=@Mulesoft2020 --organization=Cloud01SubGroup01 --environment=Prod``` //認証情報を渡す `runtime-mgr cloudhub-alert list` // CH アラートの一覧 `runtime-mgr cloudhub-application list` // CHアプリケーションの一覧 `runtime-mgr cloudhub-application delete hidden-properties-0101` // CHアプリケーションの削除 `use environment Dev` //開発環境に切り替わる - スクリプティングモード スクリプトを読み込んでいくモード ![スクリプティングモード](https://i.imgur.com/DsArwCq.png) - Proxy経由でAnypoint Platformにログイン - https://docs.mulesoft.com/jp/runtime-manager/anypoint-platform-cli ![](https://i.imgur.com/o6TbLUG.png) ### Anypoint Platform REST 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 ![_csrf](https://i.imgur.com/y1t3M49.png) 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 ![arc](https://i.imgur.com/HUkMe5J.png) #### PostmanのProxy設定 ![](https://i.imgur.com/FFx7SOB.png) #### Advanced Rest ClientのProxy設定 ![](https://i.imgur.com/UmkCJKc.png) ## Module 9: まとめ Q: Prod DLBとSandboxのDLBを編集する権限を分けるにはどうすれば良いか? A: CloudHub Network AdministratorのPremissionでは、Business Group内の権限を分離することができないので、**リソースを分割するためのBusiness Group**を作り、Permissionを割り当てるのが良いです。 将来的な製品の改善のため、機能改善要望を[Ideas Portal](https://help.mulesoft.com/s/ideas)からVoteしていただくこともお勧めです。 - :NG:Permission (CloudHub Network Administrator)を割り当てた状態では、DevもProdも操作できてしまう。 ![](https://i.imgur.com/N4ZzeWw.png) ![](https://i.imgur.com/t40wEbs.png) - :NG:CloudHub Admin(Dev)ではアプリのデプロイはできるが、ネットワークは管理できない ![](https://i.imgur.com/Xh6HERb.png) ![](https://i.imgur.com/WEW4KWq.png) - :NG:カスタムRole(CloudHub Admin-Devに、Network AdministratorのPremissionを追加) ![](https://i.imgur.com/Xb0ZwEH.png) ![](https://i.imgur.com/yRhnIHh.png) - :star:リソース(Environment, VPC, DLB)を分割するためのBusiness Groupを作成 ![](https://i.imgur.com/9u5nFSQ.png) Q: Client ごとに流量が多くなったときにアラートを発報する機能はあるか? A: 製品付属の機能で、そのまま該当するものはありません。Clientごとのリクエスト数を計測するカスタムポリシーを作成して、ポリシー違反が発生したときにアラートをONにするような設定が必要です。 Q: Object Storeを冗長化することはできるか? A: アプリケーションのデプロイ時に自動作成される一時データの保管場所なので、ユーザがカスタマイズして構成変更することはできません。 https://help.mulesoft.com/s/article/The-Different-Types-of-Object-Stores-Explained https://docs.mulesoft.com/jp/object-store/osv2-faq 参考:Forumサイト https://help.mulesoft.com/s/forum