Apigee Edge から Apigee X への移行のアンチパターン

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

現在 Apigee Edge をご利用のお客様は、新しい機能や異なるリージョンの可用性を活用するために、インストール環境を Apigee X に移行できます。

このページでは、Apigee X に移行する前に対応する必要がある構成のアンチパターンと、移行前に知っておくべき動作の変更点について説明します。

Apigee Edge アンチパターンの広範なリストでは、いかなる場合でも避けるべき使用プラクティスについて説明しています。このページでは、移行をブロックする場合に推奨されない具体的な使用方法について説明します。これらを今すぐ解決して、Apigee X に移行する際に問題が発生しないようにしてください。

API プロダクトのないアプリ

まとめ クライアントサイドでの変更が必要か? 解決策

API プロダクトがないアプリもあります。

Apigee Edge と Apigee X の違い:

Apigee Edge Apigee X
どの API プロダクトにも関連付けられていないアプリと認証情報を構成できます。このアプリは、すべての API プロダクトに実質的にアクセスできます。 各アプリは、少なくとも 1 つの API プロダクトにアクセスするように構成する必要があります。すべての API プロダクトへのアクセスを暗黙的に提供する方法はありません。すべての API プロダクトにアクセスできるようにアプリを構成できますが、これは明示的に構成する必要があります。
ありません。

解決策: API プロダクトを使用しないアプリ

すべてのアプリ認証情報を 1 つ以上の API プロダクトに関連付ける。これを行う方法について詳しくは、アプリを登録して API キーを管理するをご覧ください。

簡単な方法は、各アプリにすべての API プロダクトへのアクセス権を割り当てることです。これは Apigee Edge で可能なことと同じです。 「最小権限」のアプローチを追求する場合は、各アプリの認証情報でアクセスする必要がある API プロダクトの最小リストを決定する必要があります。これは、クライアント ID に基づく Apigee Edge Analytics レポートで分析できます。

有効期限のないキャッシュ

まとめ クライアントサイドでの変更が必要か? 解決策

キャッシュに有効期限はありません。

Apigee Edge と Apigee X の違い:

Apigee Edge Apigee X
キャッシュ リソース記述子の作成、更新、削除をサポートします。 キャッシュ リソース記述子の作成、更新、削除はサポートされていません。
×

解決策: 有効期限のないキャッシュ

すべてのキャッシュに有効期限を設定します。

不確定パスの JSONPath フィルタ式

まとめ クライアントサイドでの変更が必要か? 解決策

確定的でないパスの場合、フィルタ式の結果に対するクエリは JSONPath 仕様に含まれていません。https://goessner.net/articles/JsonPath/ をご覧ください。

Apigee Edge と Apigee X の違い:

この構造例では

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

$..books[?(@.name == 'A')][0] という式を使用すると、

Apigee Edge Apigee X
出力 ‘{"name": "A"}’ 出力 []

$..books[?(@.name == 'A')][0].name という式を使用すると、

Apigee Edge Apigee X
出力 "A" 出力 []

解決策: 不確定のパスに対する JSONPath フィルタ式

影響を受けるクエリを検索して置換します。

存在しないインデックスの JSONPath 式

まとめ クライアントサイドでの変更が必要か? 解決策

インデックスが存在しない JSONPath 式は、Apigee X と Apigee Edge で動作が異なります。パスが見つからない場合、Apigee X は PathNotFoundException エラーを返します。

Apigee Edge と Apigee X の違い:

この構造例では

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

$.books[3] という式を使用すると、

Apigee Edge Apigee X
出力 null PathNotFoundException エラーを出力する

解決策: 存在しないインデックスの JSONPath 式

影響を受けるクエリを検索して置換します。

配列インデックスを持つ JSONPath 式が配列オブジェクトを返さない

まとめ クライアントサイドでの変更が必要か? 解決策

配列インデックスまたはスライスを含む JSONPath 式は、Apigee X の配列オブジェクトを返します。

Apigee Edge と Apigee X の違い:

この構造例では

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

$.books という式を使用すると、

Apigee Edge Apigee X
出力 {“name”:”A”, “name”: “B”} 出力 [{“name”:”A”, “name”: “B”}]

$.books[-1] という式を使用すると、

Apigee Edge Apigee X
出力 {“name”: “B”} 出力 [{“name”: “B”}]

$.books[-2:] という式を使用すると、

Apigee Edge Apigee X
出力 {“name”:”A”, “name”: “B”} 出力 [{“name”:”A”, “name”: “B”}]

解決策: 配列インデックスを持つ JSONPath 式が配列オブジェクトを返さない

アップグレード後に異なる結果を返す可能性がある式を検索、置換します。

キーストア名の制限

まとめ クライアントサイドでの変更が必要か? 解決策

Apigee X キーストア名に使用できるのは、英字、数字、ハイフンのみです。Edge キーストア名には、これらの制限は適用されません。

×

解決策: キーストア名の制限

キーストア名を確認し、必要に応じて名前を更新してサポートされていない文字を削除します。

API プロキシ用にデプロイされた複数のベースパス

まとめ クライアントサイドでの変更が必要か? 解決策

1 つの環境に API プロキシの複数のリビジョンがデプロイされ、各リビジョンのベースパスは異なります。

Apigee Edge と Apigee X の違い:

Apigee Edge Apigee X
API プロキシの複数のリビジョンのデプロイをサポートします。各リビジョンに異なるベースパスを設定できます。 プロキシのベースパスが異なる場合でも、API プロキシの複数のリビジョンのデプロイはサポートされていません。
×

解決策: API プロキシに複数のベースパスをデプロイする

ベースパスに関係なく、バンドルの 1 つのリビジョンのみが環境にデプロイされるように、すべてのバンドルを更新します。

ポリシーに準拠していない HTTP メッセージ

まとめ クライアントサイドでの変更が必要か? 解決策

クライアントまたは API プロキシが、HTTP 標準に準拠していないメッセージ(リクエストまたはレスポンス)を送信する。たとえば、無効なヘッダー名や、一部の制限付きヘッダーの重複などがあります。

API の実行で次のエラーが 1 つ以上ある場合、Apigee X に移行できません。

  • INVALID_CHARACTERS_IN_HEADER
  • MISSING_COLON
  • MULTIPLE_CONTENT_LENGTH
  • CONTENT_LENGTH_NOT_INTEGER
  • INVALID_UPGRADE
  • URL_HEADER_SIZE_TOO_LONG
  • BODY_NOT_ALLOWED
  • UNSUPPORTED_HTTP_VERSION
  • ZERO_CONTENT_LENGTH_FOR_POST_OR_PUT
  • UNSUPPORTED_RESPONSE_PREFIX
はい、その可能性があります。

解決策: ポリシーに準拠していない HTTP メッセージ

Apigee X に移行する前に、HTTP プロトコルのエラーをすべて修正する必要があります。エラーがクライアント アプリケーションから発生した場合は、クライアント アプリのデベロッパーにこの問題を修正するよう依頼する必要があります。

OAuth 2.0 トークンの有効期限が無効です

まとめ クライアントサイドでの変更が必要か? 解決策

OAuth 2.0 トークンの有効期限が所定の範囲外です。

Apigee Edge と Apigee X の違い:

Apigee Edge Apigee X
現在、OAuth 2.0 トークンの有効期限に関する制約は適用されていませんが、今後適用する予定です。上限のページの OAuth のセクションのガイドラインをご覧ください。 OAuth 2.0 のアクセス トークンと更新トークンの有効期限を設定する必要があります。サポートされている範囲は次のとおりです。
  • 180 秒 <= OAuth 2.0 アクセス トークン の有効期限 <= 30 日
  • 1 日 <= OAuth 2.0 更新トークン <= 2 年
×

解決策: OAuth 2.0 トークンの有効期限が無効である

OAuthV2 ポリシーを使用して、<ExpiresIn><RefreshTokenExpiresIn> に有効期限を指定します。

商品数の上限を超えています

まとめ クライアントサイドでの変更が必要か? 解決策

Apigee Edge の構成が、定義されたプロダクトの上限に準拠していません。ドキュメントに記載されているが Apigee Edge には適用されない一部のプロダクトの上限は、Apigee X に適用されます。

×

解決策: プロダクトの上限を超えている

Apigee X に移行する前に、プロダクトの上限を超える使用量を修正してください。

エンドポイントとパス ターゲットの両方の接続指定子を含む ServiceCallout ポリシー

まとめ クライアントサイドでの変更が必要か? 解決策

ServiceCallout ポリシーで、<LocalTargetConnection> 要素には <APIProxy> 要素と <ProxyEndpoint> 要素、または <Path> 要素のいずれかを含める必要があります。両方を含めることはできません。詳細については、<LocalTargetConnection> 要素をご覧ください。

Apigee Edge はこの要件を文書化していますが、強制はしません。両方の構成で <LocalTargetConnection> を検出すると、Apigee X は処理を停止します。

×

解決策: エンドポイントとパス ターゲットの両方の接続指定子を含む ServiceCallout ポリシー

ServiceCallout ポリシー構成を確認し、遵守していない <LocalTargetConnection> 構成を削除します。

ターゲット サーバー名の制限

まとめ クライアントサイドでの変更が必要か? 解決策

Apigee X ターゲット サーバー名に使用できるのは、英字、数字、ハイフン、ピリオドのみです。Edge ターゲット サーバー名には、これらの制限は適用されません。

×

解決策: ターゲット サーバー名の制限

ターゲット サーバー名を確認し、必要に応じてサポートされていない文字を削除するよう名前を更新します。

仮想ホストでのトライアル用証明書

まとめ クライアントサイドでの変更が必要か? 解決策

1 つ以上の仮想ホストが、Apigee 提供の「無料トライアル」証明書を使用しています。これにより、仮想ホストは ORG-ENV.apigee.net などのドメイン上のリクエストに応答します。

Apigee Edge と Apigee X の違い:

Apigee Edge Apigee X
ORG-ENV.apigee.net という形式のドメイン名をサポートするように「default」仮想ホストを自動的に構成します。これらのドメインで TLS を許可するワイルドカード証明書(「無料トライアル証明書」)があります。 ORG-ENV.apigee.net 形式の以前の Apigee ドメインは、Apigee X では使用できません。独自のドメイン名を構成し、証明書を適切にプロビジョニングする必要があります。

解決策: 仮想ホストでトライアル用の証明書を使用する

独自のドメインを構成し、証明書を適切にプロビジョニングする必要があります。

ORG-ENV.apigee.net 形式の以前のドメイン名に依存するクライアント アプリケーションはすべて、新しいドメインを呼び出すように変更する必要があります。

未解決の DNS

まとめ クライアントサイドでの変更が必要か? 解決策

ターゲット エンドポイントに未解決のドメイン名があります。

Apigee Edge と Apigee X の違い:

Apigee Edge Apigee X
DNS の解決が失敗すると、Apigee はドメイン名に .apigee.com を追加し、DNS は 4xx レスポンス コードで正常に解決されます。 DNS の解決に失敗した場合、Apigee はリクエストを実行せず、5xx レスポンス コードを返します。
×

解決策: 未解決の DNS

有効なドメイン名でターゲット エンドポイントを更新します。