Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule 4 では、ポリシーが大幅に変更されています。詳しい説明は、 「Custom Policy General Reference (カスタムポリシーの一般リファレンス)」 (2017 年 11 月) に記載されています。
3.x では、特定のポリシー内のロジックが 2 つのブロックに分割されています。次のポリシーまたはフローの前に実行されるブロックと、その後に実行されるブロックです。
<?xml version="1.0" encoding="UTF-8"?>
<policy online="false"
xmlns="http://www.mulesoft.org/schema/mule/policy"
xmlns:mule="http://www.mulesoft.org/schema/mule/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:api-platform-gw="http://www.mulesoft.org/schema/mule/api-platform-gw"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/policy http://www.mulesoft.org/schema/mule/policy/current/mule-policy.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/api-platform-gw http://www.mulesoft.org/schema/mule/api-platform-gw/current/mule-api-platform-gw.xsd">
<before>
<mule:set-payload value="(pre)"/>
</before>
<after>
<mule:set-payload value="(post)"/>
</after>
<pointcut>
<api-platform-gw:api-pointcut apiName="sampleApi" apiVersion="1.0.0"/>
</pointcut>
</policy>
Mule 4 では、ポリシーが before
と after
ブロックに分けられなくなりました。
ポリシーは次のポリシーまたはフローに明示的にジャンプするフローとして機能するようになり、ポリシー内でこのジャンプを定義する必要があります。
Mule 4 では、次の設定で同じ動作を実行できます。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:http-policy="http://www.mulesoft.org/schema/mule/http-policy"
xmlns="http://www.mulesoft.org/schema/mule/core"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http-policy http://www.mulesoft.org/schema/mule/http-policy/current/mule-http-policy.xsd">
<http-policy:proxy name="policy-deployment">
<http-policy:source propagateMessageTransformations="true">
<set-payload value="(pre)"/>
<http-policy:execute-next/>
<set-payload value="(post)"/>
</http-policy:source>
</http-policy:proxy>
</mule>
注意点:
ロジックは同じブロックに配置されます。フローの前に動作を挿入するには、単に execute-next
要素の前にロジックを配置します。フローの後に動作を挿入するには、その要素の後にロジックを配置します。
http-policy:source
要素の propagateMessageTransformations
属性: Mule 4 以降、フローを実行する前に Mule メッセージ (ペイロードまたは属性) を変更しても、デフォルトではフローに反映されません。反映されるようにするには、propagateMessageTransformations
を true
に設定する必要があります。
pointcut
要素が、ポリシー設定ファイルで定義されなくなりました。現在は、ポリシーが API Manager から取得されたときに、API ゲートウェイがこの要素を解決します。
エンドポイントとアプリケーションの pointcut
要素を使用できなくなり、その代わりになるものもありません。
3.x では、ポリシーが定義されると XML ファイルが生成され、そのファイルを API Manager にアップロードする必要があります。
Mule 4 では、ポリシーの動作が定義されると、そのポリシーをポリシーテンプレート JAR にパッケージ化して Exchange にアップロードし、API Manager で使用可能にする必要があります。
ポリシーテンプレート JAR を生成する Maven プロジェクトの作成方法は、記事「Packaging a Custom Policy (カスタムポリシーのパッケージ化)」に記載されています。
JAR の Exchange へのアップロード方法は、記事「Uploading a Custom Policy to Exchange (カスタムポリシーの Exchange へのアップロード)」に記載されています。
以前と同様、ポリシーテンプレート JAR が Exchange にアップロードされると、JAR がアップロードされたのと同じ組織に属する API の API Manager に表示されます。
ポリシーの移行を実行するこの例では、GitHub オープンソースプロジェクトである Mule Migration Assistant (MMA) を使用します。この手順では、ツールの 前提条件を満たしている必要があります。MMA の完全なユーザードキュメントについては、 「Migration to Mule 4 (Mule 4 への移行)」(GitHub) を参照してください。
ポリシーを移行するための MMA コマンドは、Mule アプリケーションを移行するための一般的な コマンドラインオプション (GitHub) とは 1 つの重要な点で異なります。
MMA の -projectBasePath
では、ポリシー XML ファイルと YAML ファイルの両方が同じディレクトリ内にある必要があります。次の例では、ポリシーファイルが src/main/policy
内にあることが想定されています。
$ java -jar mule-migration-assistant-runner-0.5.1.jar \
-projectBasePath /Users/me/AnypointStudio/workspace-studio/my-mule3-policy/src/main/policy \
-muleVersion 4.1.5 \
-destinationProjectBasePath /Users/me/my-dir/my-migrated-policy
MMA では、-destinationProjectBasePath
オプションを使用して移行したプロジェクトのディレクトリが作成されます。my-migrated-policy
は、コマンドを呼び出す前には存在しない必要があります。すでに存在するフォルダーを指定すると、移行は次のようなエラーで失敗します。
Exception: Destination folder already exists. (例外: 宛先フォルダーがすでに存在しています。)
移行が正常に実行されると、次のようなメッセージが表示されます。
Executing migration...
...
========================================================
MIGRATION SUCCESS
========================================================
Total time: 11.335 s
Migration report:
/Users/me/my-dir/my-migrated-policy/report/summary.html
移行が正常に完了すると、宛先フォルダーには次の内容が含まれます。
ポリシー POM ファイル。
ポリシー YAML ファイル。POM ファイル内にある artifactId
値に名前が変更されます。
Mule 移行レポート (GitHub) (summary.html
) を含む report
ディレクトリ。
このレポートで提供されるものと同じ情報は、ポリシー XML ファイルにコメントとして含まれています。
MMA コマンドで設定された -muleVersion
値と一致する minMuleVersion
値が設定された mule-artifact.json
ファイル。
src
ディレクトリ。移行したコンテンツが含まれます。
src
ディレクトリには、main
および test
ディレクトリが含まれます。main
内では、mule
ディレクトリにポリシー XML ファイルが含まれ、template.xml
に名前が変更されます。mule
ディレクトリと同じレベルで、移行したポリシーに必要な DataWeave ファイルまたはその他のファイルを含む resources
ディレクトリが作成される場合があります。
test
ディレクトリには、テスト設定ファイルが含まれます。
移行に成功したら、POM の移行で説明されているように、POM ファイルを変更する必要があります。POM ファイルに適切な組織 ID が設定されたら、mvn clean install
を使用してコンパイルできます。コンパイルに成功した場合、maven clean deploy
を使用して移行したポリシーを Exchange にアップロードできます。カスタムポリシーのアップロードについての詳細は、「Exchange へのカスタムポリシーのアップロード」を参照してください。
POM ファイルの移行により、カスタムポリシーを Exchange にアップロードするために必要な要素が含まれるようにファイルが変更されます。
移行後:
<groupId/>
および <exchange.url/>
要素の {orgId}
値は、Anypoint Platform にある組織 ID に置き換えられます。
組織 ID を取得する方法についての詳細は、「Exchange へのカスタムポリシーのアップロード」を参照してください。
デフォルトでは、Exchange URL は本番環境に設定されます。
<groupId>{orgId}</groupId>
<properties>
<exchange.url>https://maven.anypoint.mulesoft.com/api/v1/organizations/{orgId}/maven</exchange.url>
</properties>
EU バージョンの URL の場合、移行後に URL を手動で設定する必要があります。
EU の URL テンプレート:
https://maven.eu1.anypoint.mulesoft.com/api/v1/organizations/{orgId}/maven
MMA がポリシーの POM ファイルを見つけられない場合、新しい POM ファイルが作成されます。このファイルでは、ポリシーの artifactId
はポリシー XML ファイルの親ディレクトリの名前になります。たとえば、src/main/mytestpolicy/policy.xml
内のポリシーの場合、artifactId
は mytestpolicy
です。
いくつかの要素は、Mule 3 から Mule 4 に移行されません。
要素 | 理由 |
---|---|
|
Mule 4 では動作を再現できません。 |
|
リソースと API のポイントカットは、Mule Runtime Engine によって自動的に解決されます。Mule 4 では、アプリケーションとエンドポイントのポイントカットに同等のものはありません。 |
|
この動作は、Mule Runtime Engine によって自動的に解決されます。 |
これらの各要素では、子要素も削除されます。
delay-response
要素の子要素として複数の rate-limit
要素が見つかった場合、調整要素 fixed-time-frame-algorithm
はレート制限形式に移行されます。
さらに、調整 SLA ポリシーはサポートされなくなったため、delay-response
要素が sla-based-algorithm
要素の子として見つかった場合、ポリシーはレート制限 SLA 形式に移行されます。
移行中にポリシーファイルが見つからない場合、MMA は次のようなメッセージを出力します。
Executing migration...
...
===============================================================================
MIGRATION FAILED
===============================================================================
Total time: 3.008 s
Exception: Cannot read mule project. Is it a Mule Studio project?
com.mulesoft.tools.migration.engine.exception.MigrationJobException: Cannot read mule project. Is it a Mule Studio project?
at com.mulesoft.tools.migration.engine.project.MuleProjectFactory.getMuleProject(MuleProjectFactory.java:50)
at com.mulesoft.tools.migration.engine.MigrationJob.generateSourceApplicationModel(MigrationJob.java:116)
at com.mulesoft.tools.migration.engine.MigrationJob.execute(MigrationJob.java:80)
at com.mulesoft.tools.migration.MigrationRunner.main(MigrationRunner.java:83)
===============================================================================
MMA がポリシーの POM モデルを見つけられない場合、Mule 3 の既存の POM からモデルが生成されるか、Mule 3 POM がない場合はモデルが作成されます。MMA が既存の POM を使用している場合、不正な POM 定義が検出されると POM モデルの作成プロセスが失敗します。POM モデル障害に関する情報については、POM モデルの変更時の MMA ステップに関する前のエラーメッセージを確認する必要があります。
次の問題が発生する可能性があります。
事例 | 理由 |
---|---|
YAML の編集エラー |
詳細は、MMA のスタック追跡を使用してください。 |
複数の YAML が見つかった |
MMA では、プロジェクトのベースパスに 1 つの YAML ファイルのみが必要です。これは、ポリシー YAML として解釈されます。 プロジェクトに複数の YAML が必要な場合は、追加の YAML ファイルを別のディレクトリに保存する必要があります。 |
YAML が見つからない |
MMA では、移行の開始時にプロジェクトのベースパスに YAML ファイルが必要です。何も見つからない場合、移行プロセスの早い段階で別のエラーが発生していた可能性があります。 |
次の問題が発生する可能性があります。
事例 | 理由 |
---|---|
ポリシーが XML 脅威保護種別か JSON 脅威保護種別かを判断できなかった |
脅威保護ポリシーでは、移行する脅威保護の種別は要素 |
要素 |
脅威保護ポリシーでは、 |
要素 |
脅威保護ポリシーでは、 |
次の問題が発生する可能性があります。
事例 | 理由 |
---|---|
クライアント ID 適用の移行要素が無効 |
|
MMA によって Mule 3 ポリシーの spring:bean
要素が resources
ディレクトリの template-beans.xml
ファイルに移行される場合でも、template-beans.xml
を参照する spring-module:config
要素がカスタムポリシーに追加される場合でも、Spring Bean の手動移行を実行する必要があります。Mule 4 ではポリシーでの Bean の宣言はサポートされておらず、ポリシーのデプロイに失敗します。
MMA には、次の既知の問題があります。
拡張子が .yml
のポリシー YAML ファイルを使用するポリシーは検出されない。
ポリシー YAML ファイルの必須項目が自動入力されない。
mule:processor
要素が移行されない。
byte-array-to-string-transformer
要素が移行されない。
expression-component
要素が移行されない。
mulexml:object-to-xml-transformer
要素が移行されない。
移行した要素 ee:transform
にスキーマの場所の URI が追加されない。
アンダースコアで始まる DataWeave 式は引用符が付けられないため、ポリシーが失敗する。