Mule用DevOps CDツールの紹介

Stay hungry. Stay foolish. Your time is limited, so don't waste it living someone else's life.

Mule用DevOps CDツールの紹介

はじめに

 Mule SoftのAPI構築の生産性や品質を向上させるために、DevOpsによる開発の自動化を取り組みことになった。
 Java言語のみをサポートしている環境で、独自のツールを開発してAPIインスタンスとMuleアプリケーションのデプロイを実施する技術の検証を行った。
 検証した結果、開発したツールについて紹介する。

目次

紹介する内容は以下の通り。

  1. ツールでできることは何か
  2. ツールを配置する
  3. 設定ファイルを説明する
  4. ツールの実行方法を説明する
  5. GitHub Actionsを利用してツールの動作を確認する
  6. さいごに

詳細

1.ツールでできることは何か

ツールができることは以下の通り。

  • APIインスタンスの登録、更新、削除
  • SLA層の登録、削除
  • ポリシーの登録、削除
  • アラートの登録、削除
  • Muleアプリケーションの登録、更新、削除
  • ランタイムアラートの登録、削除

2.ツールを配置する

まずは、GitHubからソースをダウンロードして実行可能な共通ライブラリを含むJARファイルを作成する。
下記のリポジトリからソースをクローンする。

Git Hub:CDツール

クローンしたリポジトリのルートディレクトリでターミナルを開いて、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.さいごに

 いかがだったでしょうか?
 ツールについてできることや実行方法について説明しました。
 ぜひ活用してみてください。