Mule用DevOps CDツールの紹介
はじめに
Mule SoftのAPI構築の生産性や品質を向上させるために、DevOpsによる開発の自動化を取り組みことになった。
Java言語のみをサポートしている環境で、独自のツールを開発してAPIインスタンスとMuleアプリケーションのデプロイを実施する技術の検証を行った。
検証した結果、開発したツールについて紹介する。
目次
紹介する内容は以下の通り。
- ツールでできることは何か
- ツールを配置する
- 設定ファイルを説明する
- ツールの実行方法を説明する
- GitHub Actionsを利用してツールの動作を確認する
- さいごに
詳細
1.ツールでできることは何か
ツールができることは以下の通り。
- APIインスタンスの登録、更新、削除
- SLA層の登録、削除
- ポリシーの登録、削除
- アラートの登録、削除
- Muleアプリケーションの登録、更新、削除
- ランタイムアラートの登録、削除
2.ツールを配置する
まずは、GitHubからソースをダウンロードして実行可能な共通ライブラリを含むJARファイルを作成する。
下記のリポジトリからソースをクローンする。
クローンしたリポジトリのルートディレクトリでターミナルを開いて、build.gradleのあるルートディレクトリで、”gradle build”を実行する。

成功すると下記のJARファイルが作成される。

3.設定ファイルを説明する
共通設定は以下の通り。
connectedApplication:
clientId: {接続アプリケーション.クライアントID}
clientSecret: {接続アプリケーション.クライアントシークレット}
grantType: client_credentials
organization:
organizationId: {組織ID}
enviromentIds:
deveper: {環境ID}
integration: {環境ID}
staging: {環境ID}
production: {環境ID}
project:
config:
path: project-dev.yaml {個別設定ファイルのパス}
プロジェクトごとの個別設定は以下の通り。
env: Dev
apiInstance:
assetId: {APIインスタンス.アセットID}
apiInstanceLabel: {APIインスタンス.ラベル名}
runtime:
domain: {Muleアプリケーションドメイン}
filename: {Muleアプリケーションアーカイブファイル}
apiIDkey: {プロパティ.APIインスタンスID名}
runtimeVersion: 4.3.0
worker:
vCore: "0.2"
workers: 1
region: us-east-1
properties:
autodiscovery.api_id: {APIインスタンスID}
anypoint.platform.client_id: {環境.クライアントID}
anypoint.platform.client_secre: { 環境.クライアントシークレット}
env: st
automaticallyRestart: true
persistentQueues: false
enableMonitoring: true
tiers:
- tier:
name: DevOps SLA Tier
description: DevOps登録
autoApprove: true
maximumRequests: 5
timePeriodInMilliseconds: 1
policies:
jwt-validation:
jwtKey: {JWT証明書の公開キー(PEM形式)}
clientIDExpression: "#[if(vars.claimSet.sub?) read(vars.claimSet.sub,'application/json').\"client_id\" else {}]"
audienceClaimValues: api.sample.co.jp
rate-limiting-sla-based:
clientIDExpression: "#[if(authentication.properties.claims.sub?) read(authentication.properties.claims.sub,'application/json').\"client_id\" else {}]"
header-injection:
inboundItem: x-user-info
inboundValue: "#[if(read(authentication.properties.claims.sub,'application/json').user_info?)read(authentication.properties.claims.sub,'application/json').user_info else {}]"
header-removal:
message-logging:
alerts:
- jwt-validation ※設定したいアラートをリストする
- rate-limiting-sla-based
- api-response-time
- api-response-code-500
- api-response-code-400
- api-request-count
runtimeAlerts:
- cpu ※設定したいアラートをリストする
- deployment-failed
- memory
- worker-unresponsive
- application-notification
- event-threshold-exceeded
alertRecipients:
- user:
userId: {ユーザID} ※複数設定可能
lastName: {名字}
firstName: {名前}
4.ツールの実行方法を説明する
初期設定時では下記のような構成で動作を確認できる。

ターミナルを起動し下記のコマンドを実行すと、実行できるコマンド一覧を確認できる。
$ java -jar app.jar -h
実行結果は以下の通り

初期登録コマンド
何も登録されていない状態で、APIインスタンス登録からランタイムアラートの登録まで一連の流れを実行する。
$ java -jar app.jar -all
初期化コマンド
APIインスタンスやMuleアプリケーション、ランタイムアラートまで全てを削除する。
java -jar app.jar -delete all
5.GitHub Actionsを利用してツールの動作を確認する
6.さいごに
いかがだったでしょうか?
ツールについてできることや実行方法について説明しました。
ぜひ活用してみてください。






