---
# System prepended metadata

title: 28feb2022CloudHub
tags: [MuleSoftTraining]

---

# 28feb2022CloudHub
###### tags: `MuleSoftTraining`

- 目次
[ToC]

## Module0: 準備

- :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
    - [TODO](Creating note...) Mac のセキュリティの説明
  - Windows: bin/jmeter.bat
5. [OpenSSL](https://github.com/openssl/openssl)

## Module1: 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 認証情報
- ユーザー名: Cloud01Student **XX**
  - Sakaguchi: 01
  - Izuno san: 02
  - Sato san: 03
  - Abe san: 04
  - Hoshino san: 05
  - Anzai san: 06
  - Tsutsumi san: 07
  - Niitsuma san: 08 
- 閲覧専用ユーザー名: Cloud01Viewer **XX**
- パスワード: @Mulesoft2020

### 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ワーカーのサイズを大きくする/小さくする

TODO: Q.「コンテナ」

## Module2: ユーザーとリソースの管理
### 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単位で権限をグルーピングすることを推奨している


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

Q.InviteUserで招待されるユーザーは、招待する人の属しているGroupより、下位のグループに所属が可能である　という認識で正しいでしょうか？つまり、複数のグループに所属したい場合は、招待する人が複数グループへの権限を有した上で招待したユーザーを、どのグループに割り当てるかを決める。???グループ vs ロール vs チーム????
![invite](https://i.imgur.com/6hniHel.png)
  - A. Business Group ではなく、"Teams"（Roles） の単位で、ユーザーを招待する時点での権限の付与が可能。(= 各　Business Group　でどんな権限を持っているかは、参加する"Teams"次第)

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

#### ワーカーのIPアドレス vs CloudHub Shared Load Balancer (SLB, 共有ロードバランサー)
- 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**


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

- API Client (ブラウザ含む)
↓HTTP(80)/HTTPS(443)
- SLB(共有ロードバランサー)
`server-info-ch0101.jp-e1.cloudhub.io`
↓80->**8081** ↓ 443->**8082**
  - 旧CH Worker
    - 3.112.34.208
  - 新CH Worker
    - 13.230.81.24  

### Runtime Manager CloudHub Log
- 制限: 容量100MB もしくは TTL 30日間

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

![新旧ワーカー](https://i.imgur.com/ifr9Cj7.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)

Q. workerが二つ以上あった場合、mule-workerをつけて接続した時にどのようにworkerが選択されるのでしょうか？ (モジュール6) 
- https://hackmd.io/Y9-VuC7NTPaY3YfIfyK09A#%E8%A4%87%E6%95%B0%E3%83%AF%E3%83%BC%E3%82%AB%E3%83%BC%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E3%80%81mule-worker-xxx-DNS-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6


Q.ServerInfoのページに表示されているWorker IP アドレスがコピーしたものと違うのですが、こちらは何ですか？
- A. 該当ワーカーのプライベート IP アドレスになります。

Q.仕組み上、LBを経由しないアクセスが可能なのは、セキュリティ上問題なので閉じることは可能なのでしょうか？
- A. VPC では「ポート」と「どこからのアクセスか」の2つ観点からファイアーウォールを設定できるので、「80XXで直接アクセスされた && 外部からアクセスされた」という条件でトラフィックを遮断できます。

Q.サイジングの大まかなガイドライン
https://knowledgehub.mulesoft.com/s/article/Application-Sizing-Guide-for-CloudHub

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


### Tracing
https://docs.mulesoft.com/tracing-module/1.0/tracing-module-logging

### Anypoint Monitoring のログ
For Titanium Subscription, you will get 200 GB per production core. 
https://help.mulesoft.com/s/article/Anypoint-Monitoring-Log-FAQ

### 監視対象アプリケーション: price-lookup-0101
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)

Q.Tracing Module はPlatinumサブスクリプションでも使えますか？
Q.Business Metrics の代わりに使えるのでしょうか？
- 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"/>
  ```

- Custom Metrics
  - https://docs.mulesoft.com/jp/monitoring/anypoint-custom-metrics-connector
  - Anypoint Monitoring における指標の追加


- (Custom) Business Events
  - https://docs.mulesoft.com/jp/mule-runtime/4.4/business-events
  - Runtime Manager のコンソールで使用可能 ([Insight(https://docs.mulesoft.com/jp/runtime-manager/insight)])

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

> インサイトを有効にすると、データ処理パフォーマンスが大きく低下し、メモリ消費量が増大します。 そのため、本番環境では長期間に渡ってインサイトを有効にしないでください。

#### snippet(コードスニペット)
<<App url>>(×3) は変更してください
```
# Service Endpoint
    
[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`
```

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


## Module 5: Mule アプリケーションの設定

```
10:02:06.881     03/01/2022     Deployment     system     SYSTEM
Worker(52.199.69.225): Your application has failed with exception java.lang.IllegalStateException: com.mulesoft.ch.services.agent.muleAgent.MuleAgentException: {"type":"class java.lang.IllegalArgumentException","message":"There was an error on the Mule Runtime while deploying the application server-info-env-0101-dev. Error: Failed to deploy artifact [server-info-env-0101-dev]. PropertyNotFoundException: Couldn't find configuration property value for key ${env} from properties provider environment properties provider - within resolver Deployment properties trying to process key env - within resolver global-properties configuration attributes trying to process key env - within resolver environment properties provider trying to process key env"}
```

`Couldn't find configuration property value for key ${env} `
    
### Runtime Manager > Properties タブ
`env=dev`

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

Q.プロパティにDBパスワードなどを設定した場合は、ブラウザからは平文で見えてしますのでしょうか？
  - A. [Safely Hidden Application Properties](https://docs.mulesoft.com/jp/runtime-manager/secure-application-properties) を設定する（mule-artifact.json）
```
{
  "minMuleVersion": "4.3.0",
  "secureProperties": ["db1.password"]
}    
```

### Runtime Manager > Scheduler
スケジュール実行の頻度を変更(開発者が変更する必要はありません)

### パスワードの管理
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パイプライン)
    
## Module 6: パフォーマンスと信頼性の目標を達成する
### Object Store & VM on CloudHub
Object Store: key-value ペアのストレージ

![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-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は共有されている???

Q.ObjectStoreV2の値は、外の（他の）Projectからは覗けないのでしょうか？
OSv2はAPに紐付いて管理するため、外部のAPで利用する場合はAnypointMQなどを利用する形となるで正しかったでしょうか。
  - A. https://docs.mulesoft.com/jp/object-store/osv2-apis OSv2 REST API の呼び出しにはアプリケーションの認証情報が必要

Q. APを削除すると Object Store に保存していた情報も全て消えてしまうで正しいでしょうか？     
  - A.YESです。

### OSv2 はアプリケーションの再起動に耐えるか?
アプリケーションの再起動
`runtime-mgr cloudhub-application restart object-store-0101`

http://object-store-0101.jp-e1.cloudhub.io/retrieve?key=Alice

http://object-store-0101.jp-e1.cloudhub.io/retrieve?key=Bob

### 複数ワーカーでアプリケーションが実行されている場合の、mule-worker-xxx DNS について
`dig mule-worker-object-store-0101.jp-e1.cloudhub.io +short`

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

    
### スケーリング
- 垂直方向へのスケーリング (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上のキューへの読み書きが頻繁に発生=パフォーマンスに悪影響
> 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 インフラストラクチャの管理
![mod7](https://i.imgur.com/j8ULXHe.png)

### 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アドレスはワーカーの数以上に必要)

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

### 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
![apps](https://i.imgur.com/d82lZ24.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 
![DLB](https://i.imgur.com/oajlvdl.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`

- Country: US
- State or Province: CA
- Locality Name: San Francisco
- Organization Name: MuleSoft
- Organization Unit Name: <空のまま>
- Common name: tokyo-dlb-01XX.lb.anypointdns.net

テスト: https://tokyo-dlb-0101.lb.anypointdns.net/dlb-backend-0101/
    
https://{dlbDns}/<appName>/
    
[CloudHub Infrastructure Use Cases] 
(https://knowledgehub.mulesoft.com/s/article/CloudHub-Infrastructure-Use-Cases)
    
## Module 8: 管理タスクの自動化
### 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)    

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

![_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)

## Module 9: まとめ
