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 指定されたヘッダーに 1 つ以上の無効な文字が見つかりました。有効なヘッダー名は、英字、数字、ハイフンで構成されます。
MISSING_COLON ヘッダー名とヘッダー値のペアに :(コロン)がありません。
MULTIPLE_CONTENT_LENGTH Content-Length ヘッダーに複数の値が指定されています。
CONTENT_LENGTH_NOT_INTEGER Content-Length ヘッダー値が整数ではない。
INVALID_UPGRADE Upgrade ヘッダーは WebSocket 接続を有効にするためにのみ使用する必要がありますが、使用されていません。
URL_HEADER_SIZE_TOO_LONG リクエスト URL とヘッダーの合計サイズが、許可されている最大サイズの 15 KB を超えています。
BODY_NOT_ALLOWED メッセージ本文は、「GET」、「DELETE」、「TRACE」、「OPTIONS」、「HEAD」の各メソッドでは使用できません。
UNSUPPORTED_HTTP_VERSION リクエストに 1.1 以外の HTTP バージョンが使用されていますが、これはサポートされていません。
ZERO_CONTENT_LENGTH_FOR_POST_OR_PUT 「POST」メソッドまたは「PUT」メソッドに Content-Length ヘッダー フィールド値が 0(「0」)に設定されています。
UNSUPPORTED_RESPONSE_PREFIX サポートされていない「X-Apigee-」ヘッダー接頭辞がレスポンス ヘッダーに存在します。
はい、その可能性はあります。

解決策: 準拠していない 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 ではこの要件が文書化されていますが、適用はされません。Apigee X は、両方の構成を持つ <LocalTargetConnection> を検出すると処理を停止します。

いいえ

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

ServiceCallout ポリシーの構成を確認し、準拠していない <LocalTargetConnection> 構成をすべて削除します。

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

概要 クライアントサイドの変更が必要か? 解決策

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

いいえ

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

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

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

概要 クライアントサイドの変更が必要か? 解決策

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

Apigee Edge と Apigee X の違い:

Apigee Edge Apigee X
ORG-ENV.apigee.net 形式のドメイン名をサポートするように「デフォルト」の vhost が自動的に構成されます。これらのドメインで 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 が解決されない

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