オンプレミスまたはクラウド エディションの ABAP SDK for Google Cloud のトラブルシューティング

オンプレミスまたはクラウド エディションの ABAP SDK for Google Cloud に関する問題のトラブルシューティングを行う場合は、SAP アプリケーション ログを使用して、エラーとログメッセージを確認します。

ソフトウェアの要件と前提条件を確認する

すべてのシステム ソフトウェアが必要な最小バージョンで動作し、ABAP SDK for Google Cloud の前提条件をすべて満たしていることを確認します。

SDK のインストールの前提条件については、始める前にをご覧ください。

SAP のサポート ドキュメントを読む

SAP ユーザー アカウントがある場合は、SAP ONE Support Launchpad で入手できる SAP ノートと SAP ナレッジベース記事を参照することで、多くの SAP ソフトウェアの問題を解決できます。

ロギング

ロギングが構成されている場合、ABAP SDK for Google Cloud はエラー メッセージを SAP アプリケーション ログに記録します。ロギングの詳細については、アプリケーション ロギングをご覧ください。

ログメッセージを確認するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード SLG1 を入力します。
  2. ログ オブジェクトとサブオブジェクトの名前を入力します。
  3. 有効な日時範囲を選択します。
  4. トランザクションを実行します。SDK によって生成されたすべてのログ メッセージが表示されます。

通常、ログ メッセージは次の 2 つのエントリで構成されます。

  • 発生場所: エラーが発生したコードの場所に関する情報を提供します。トラブルシューティングのため、デバッグ中にこのコードの位置をブレークポイントとして使用できます。
  • エラー メッセージ: オペレーションの実行中に発生したエラーの情報を提供します。

デバッグ

必要な認可を取得している場合は、API クライアント クラスをデバッグできます。

API クライアント クラスをデバッグするには、次のいずれかのオプションを使用します。

  • /GOOG/CL_HTTP_CLIENT クラスのコンストラクタにブレークポイントを追加して、プログラムを実行します。

  • または、使用しているメソッドにブレークポイントを追加して、プログラムを実行します。

HTTP トレース

エラーのトラブルシューティングでは、トランザクション(SMICM または ST05)で HTTP トレースを有効にできます。パフォーマンスへの影響を抑えるため、HTTP トレースを完了したら、可能な限り早い段階で無効にしてください。

構成に関する一般的な問題

/GOOG/MSG 461: Insufficient privileges for execution

問題: ユーザーが SDK の構成、ユーティリティ プログラム、デモプログラムを実行できない。

原因: ユーザーが認可されていません。

解決策: トランザクション SU53 を使用して、SDK の使用で不足している認可を特定します。ユーザー ID に必要な認可を取得するには、SAP セキュリティ管理者にお問い合わせください。詳しくは、認可を管理するをご覧ください。

/GOOG/MSG: 403 - Permission iam.serviceAccountTokenCreator denied on resource (or it may not exist)

問題: Compute Engine VM でホストされている SAP システムでトークンベースの認証方法を使用すると、Google Cloud APIs にアクセスできない。

原因: Compute Engine VM でホストされている SAP システムについて、クライアント キーの構成で指定したサービス アカウントが SAP ホスト VM を含むプロジェクトと異なる Google Cloud プロジェクト内に作成されている。

解決策: この問題を解決するには、次の手順を完了します。

  1. SAP ホスト VM を含む Google Cloud プロジェクトで、ホスト VM のサービス アカウントに Service Account Token Creator ロールを付与します。手順の詳細については、単一のロールを付与するをご覧ください。
  2. SAP ホスト VM を含む Google Cloud プロジェクトで、次の操作を行います。
    1. サービス アカウントを作成します。サービス アカウントの名前をメモします。Google Cloud APIs を含む別のプロジェクトにプリンシパルとしてサービス アカウントを追加する場合、この名前を指定します。サービス アカウントの作成方法については、サービス アカウントを作成するをご覧ください。
    2. SDK のクライアント キー構成で、このサービス アカウントを指定します。
  3. Google Cloud APIs を含む他のプロジェクトで、次の操作を行います。
    1. サービス アカウントをプリンシパルとして追加します。
    2. Google Cloud APIs に接続するための適切なロールを付与します。API 固有の事前定義ロールの詳細については、IAM の基本ロールと事前定義ロールのリファレンスをご覧ください。

詳細については、Compute Engine VM で SAP 用トークンを使用して認証するをご覧ください。

オペレーションに関する一般的な問題

クライアント スタブのパブリック メソッドを介して Google Cloud APIs を使用すると、エラーや例外が発生する可能性があります。これらのエラーと例外は次の 2 つのカテゴリに分類されます。

  • ABAP SDK for Google Cloud によってトリガーされたエラーと例外
  • Google Cloud APIs から返されたエラー

このセクションでは、SDK によってトリガーされるエラーと例外について説明します。API から返されるエラーについては、対応する API の公開ドキュメントをご確認ください。

/GOOG/MSG : 461 - Bad Request: Client key is not found in /GOOG/CLIENT_KEY table

問題: API クライアントのスタブ オブジェクトをインスタンス化できない。

原因: クライアント キー テーブル /GOOG/CLIENT_KEY に有効なクライアント キーがありません。

解決策: クライアント キー テーブル /GOOG/CLIENT_KEY で、有効なクライアント キーを保持します。API クライアント スタブをインスタンス化する場合は、インポート パラメータ iv_key_name とともに有効なクライアント キーを渡します。

認証方法に固有の詳細情報を使用して、クライアント キーを構成します。認証方法と関連するクライアント キーの構成については、認証をご覧ください。

インポート パラメータ iv_key_name を使用してクライアント キーを渡す方法については、コンストラクタをご覧ください。

/GOOG/MSG : 461 - Log Object not maintained in TCode SLG0

問題: API クライアントのスタブ オブジェクトをインスタンス化できない。

原因: テーブル /GOOG/LOG_CONFIG に無効なデフォルトのログ オブジェクトが保持されているか、無効なログ オブジェクトがインポート パラメータ iv_log_object に渡されています。

解決策: SAP システムに有効なログ オブジェクトが存在することを確認します。

ロギングについては、アプリケーション ロギングをご覧ください。

ログ オブジェクトを渡す方法については、コンストラクタをご覧ください。

/GOOG/MSG : 461 - Log SubObject not maintained in TCode SLG0

問題: API クライアントのスタブ オブジェクトをインスタンス化できない。

原因: テーブル /GOOG/LOG_CONFIG に無効なデフォルト ログ サブオブジェクトが保持されているか、無効なログ サブオブジェクトがインポート パラメータ iv_log_subobject に渡されています。

解決策: 有効なログ サブオブジェクトが SAP システムに存在していることを確認します。

ロギングについては、アプリケーション ロギングをご覧ください。

ログ サブオブジェクトを渡す方法については、コンストラクタをご覧ください。

/GOOG/MSG : 461 - Destination does not exist exception occurred in reading RFC destination

問題: API クライアントのスタブ オブジェクトをインスタンス化できない。

原因: テーブル /GOOG/SERVIC_MAP で、指定されたクライアント キーの RFC 宛先が SAP システムに存在しません。

解決策: 必要な RFC 宛先を作成します。詳細については、RFC 宛先を構成するをご覧ください。

/GOOG/MSG : 461 - Invalid RFC Destination GOOGLE_API exception occurred in reading RFC destination

問題: GOOGLE_API に接続できない。

原因: 考えられる原因は次のとおりです。

  • RFC 接続タイプが G - HTTP connection to external server でない。
  • 443 サービス番号指定されていない。
  • デフォルトの SSL クライアント(標準)が無効になっている。

解決策: 必要な RFC 宛先に対して、次の操作を行います。

  • RFC 接続タイプを G - HTTP connection to external server に更新します。
  • サービス番号が 443 になっていることを確認します。
  • [SSL Certificate] フィールドで、[DFAULT SSL Client(Standard)] オプションが選択されていることを確認します。
  • Google Cloud 環境上の SAP で、メタデータ サーバーに RFC 宛先を作成している場合は、サービス番号が 80 であることを確認してください。

RFC 宛先の作成方法については、以下をご覧ください。

/GOOG/MSG : 461 - ERROR_MESSAGE exception occurred during the request creation

問題: Google Cloud APIs に接続できない。

原因: SAP システムで HTTP クライアント オブジェクトを作成できません。

解決策: HTTP を介して外部サーバーと通信するように ICM が構成されていることを確認します。詳細については、Internet Communication Manager(ICM)を検証するをご覧ください。

/GOOG/MSG: 461 - Secret Manager Client Key not maintained in table /GOOG/CLIENT_KEY ERROR_MESSAGE

問題: Secret Manager 認可クラス /GOOG/CL_AUTH_API_KEY_SM を使用して Google Cloud APIs に接続できない。

原因: クライアント キーの構成に Authorization Parameter 1 または Authorization Parameter 2 がありません。

解決策: クライアント キー テーブルで、必要な Authorization Parameter 1 または Authorization Parameter 2 を更新します。詳細については、Secret Manager アクセス用のクライアント キーを構成するをご覧ください。

/GOOG/MSG: 461 - SSF Application APPLICATION_NAME is not set up in the system ERROR_MESSAGE

問題: SSF 認可クラス /GOOG/CL_AUTH_API_KEY_SSF を使用して Google Cloud APIs に接続できない。

原因: クライアント キーの構成に Authorization Parameter 1 がありません。

解決策: クライアント キー テーブルで、必要な Authorization Parameter 1 を更新します。詳細については、SSF のクライアント キーを構成するをご覧ください。

/GOOG/MSG: 461 - Method call of /GOOG/IF_AUTH~GET_ACCESS_TOKEN failed; the class CLASS_NAME does not exist

問題: クライアント キー テーブルで管理されている構成を使用して Google Cloud APIs に接続できない。

原因: クライアント キー テーブルの Authorization Class が正しくありません。

解決策: 正しい Authorization Class を維持します。詳細については、トークンを使用して認証するをご覧ください。

/GOOG/MSG: 404 - Not Found

問題: Google Cloud APIs に接続できない。API エンドポイントにアクセスできません。

原因: SDK が Google Cloud APIs への接続に使用する RFC 宛先が正しく構成されていません。たとえば、RFC 宛先に無効なエンドポイントが構成されているとします。

解決策: RFC 宛先が正しく構成されているかどうかを確認します。詳細については、RFC 宛先を構成するをご覧ください。

DESCRIPTION_OF_ISSUE while signing JWT using profile KEY_FILE_NAME.pse. Check JWT config in STRUST

問題: Google Cloud APIs に接続できない。

原因: JWT の構成とサービス アカウント キーの設定が STRUST で正しく構成されていません。

解決策: JWT の構成とサービス アカウント キーが認証の説明どおりに構成されていることを確認します。

Bad Request invalid_grant. Invalid JWT Signature

問題: Google Cloud APIs に接続できない。

原因: STRUST にインポートされた PSE または P12 鍵ファイルが、JWT の署名に使用したサービス アカウントに属していません。

解決策: 正しいサービス アカウント キーファイルを STRUST にインポートしていることを確認します。サービス アカウント キーを STRUST にインポートする方法については、サービス アカウント キーを STRUST にインポートするをご覧ください。

/GOOG/MSG : 417 - Direct connect to googleapis.com/oauth:443 failed: NIEHOST_UNKNOWN (-2)

問題: Google Cloud への認証が失敗し、エラー メッセージ /GOOG/MSG : 417 - Direct connect to googleapis.com/oauth:443 failed: NIEHOST_UNKNOWN (-2) が表示される。

原因: ABAP SDK for Google Cloud が Google Cloud の認証に使用する RFC 宛先で、ターゲット ホストが無効です。

解決策: この問題を解決するには、次の手順を完了します。

  1. サンプル RFC 宛先 GOOG_OAUTH2_TOKEN を使用して RFC 宛先を作成します。RFC 宛先の作成方法については、RFC 宛先をご覧ください。

  2. RFC 宛先で次の値が使用されていることを確認します。

    • ホスト: oauth2.googleapis.com
    • パスの接頭辞: /token
  3. SAP システムがプロキシを使用してインターネットに接続する場合は、RFC 宛先で必要なプロキシの詳細を維持します。

OAuth RFC HTTP Destination not maintained in /GOOG/SERVIC_MAP

問題: Google Cloud APIs に接続できない。

原因: OAuth 2.0 の RFC 宛先がサービス マッピング テーブル /GOOG/SERVIC_MAP で使用できません。

解決策: サービス マッピング テーブル /GOOG/SERVIC_MAP で OAuth 2.0 の RFC 宛先を更新します。RFC 宛先の指定について詳しくは、/GOOG/SERVIC_MAP で RFC 宛先を指定するをご覧ください。

/GOOG/MSG: 503 - HTTP Communication Failure - SSL client SSL Client (Standard)

問題: API メソッドへの HTTP リクエストが失敗する。

原因: Google Cloud で実行されている SAP ワークロードで、構成が /GOOG/SERVIC_MAP テーブルに維持される Google Cloud APIs との接続に SDK が使用する、RFC 宛先の ターゲット ホスト フィールド値が正しくありません。

解決策: RFC 宛先が正しく構成されているかどうかを確認します。詳細については、RFC 宛先を構成するをご覧ください。

/GOOG/MSG: 503 - HTTP Communication Failure exception occurred during the request sending

問題: API メソッドへの HTTP リクエストが失敗する。

原因: この問題は、接続の問題が原因で発生する可能性があります。

解決策: 接続を検証し、ネットワークが正しく設定され、エラーなしで実行され、輻輳していないことを確認します。

ネットワーク接続の問題を特定するには、トランザクション SMICM を使用して ICM トレース ファイルを確認します。詳しくは、2351619 - How to take SMICM trace?をご覧ください。

/GOOG/MSG: 503 - HTTP Communication Failure exception occurred during the response receiving

問題: API メソッドへの HTTP リクエストが失敗する。

この問題は、次のような状況で発生する可能性があります。

RFC 宛先で SSL が有効になっていない

原因: SDK が Google Cloud APIs への接続に使用する RFC 宛先で、SSL 証明書を使用するためのセキュリティ オプションが有効になっていません。

解決策: RFC 宛先が正しく構成されているかどうかを確認します。詳細については、RFC 宛先を構成するをご覧ください。

SSL handshake に失敗した

原因: この問題は、SAP ホストと Google Cloud API エンドポイントの間で SSL handshake が失敗することで発生します。これは、TLS サーバーによって提示された証明書が、SAP サーバーから提供されるターゲット ホスト名に対して無効である場合に発生します。オプションの TLS 拡張機能 SNI のクライアント側の送信が NetWeaver カーネル上に実装されていないことが原因である可能性があります。

解決策: トランザクション SMICM で、戻りコード SSLERR_SERVER_CERT_MISMATCH を探します。戻りコード SSLERR_SERVER_CERT_MISMATCH が見つかった場合は、TLS 拡張機能 SNI の送信を有効にする必要があります。また、NetWeaver カーネルが、クライアント側でオプションの TLS 拡張 SNI の送信を実装していることを確認します。

TLS 拡張 SNI の送信を有効にするには、NetWeaver のカーネル バージョンに応じて、プロファイル パラメータ icm/HTTPS/client_sni_enabled または ssl/client_sni_enabledTRUE に設定します。SAP からの詳細情報については、以下をご覧ください。

The caller does not have permission

問題: 認証に成功しても Google Cloud API リソースにアクセスできない。

原因: API リソースを表示する権限がありません。

解決策: この問題を解決するには、次の手順を完了します。

  1. API リソースが Google アカウントの認証情報と共有されていることを確認します。
  2. API にリクエストを送信してレスポンスを確認します。

Google API_NAME API has not been used in project PROJECT_ID before or it is disabled

問題: OAuth 2.0 クライアント認証情報を使用して Google Cloud APIs にアクセスできない。

原因: ある Google Cloud プロジェクトで作成されたクライアント ID を使用して、別の Google Cloud プロジェクトで有効になっている API を呼び出しています。

Google Cloud プロジェクトのクライアント ID は、同じ組織に属するものであっても、別のプロジェクトから API を呼び出すために使用することはできません。

解決策: API が有効になっている Google Cloud プロジェクトでクライアント ID を作成します。詳細については、OAuth 2.0 クライアント ID を作成するをご覧ください。

/GOOG/MSG : 461 - OAuth 2.0 Client Profile CLIENT_PROFILE_NAME is assigned to multiple OAuth 2.0 clients

問題: OAuth 2.0 クライアント認証情報を使用して Google Cloud APIs にアクセスできない。

原因: 複数の OAuth 2.0 クライアントに割り当てられた OAuth 2.0 プロファイルを使用して、Google Cloud API を呼び出しています。しかし、OAuth 2.0 クライアントの構成名が、クライアント キー テーブル /GOOG/CLIENT_KEYAuthorization Parameter 2 フィールドに指定されていません。

解決: OAuth 2.0 プロファイルを複数の OAuth 2.0 クライアントに割り当てるには、OAuth 2.0 クライアントごとに一意の構成名を定義して、クライアント キー テーブル /GOOG/CLIENT_KEYAuthorization Parameter 2 フィールドに構成名を指定する必要があります。詳細については、複数の Google Cloud プロジェクトがある場合をご覧ください。

/GOOG/MSG : 461 - No refresh token available for current user

問題: OAuth 2.0 クライアント認証情報を使用して Google Cloud APIs にアクセスできない。

原因: クライアント ID に OAuth 2.0 更新トークンを付与することなく、OAuth 2.0 クライアント認証情報を使用して Google Cloud API を呼び出しています。

解決策: Google アカウントの認証情報を使用して、クライアント ID の OAuth 2.0 トークンをリクエストします。詳細については、OAuth 2.0 アクセス トークンをリクエストするをご覧ください。

Access blocked: This app's request is invalid (Error 400: redirect_uri_mismatch)

問題: OAuth 2.0 アクセス トークンをリクエストすると、[Google でログイン] 画面にエラー メッセージ Access blocked: This app's request is invalid (Error 400: redirect_uri_mismatch) が表示される。

原因: OAuth 2.0 クライアント ID 認証情報で承認済みのリダイレクト URI が正しくないか、保持されていません。

解決策: この問題を解決するには、次の手順を完了します。

  1. SAP システムで、トランザクション コード OA2C_CONFIG を入力します。デフォルトのブラウザで SAP のログインページが開きます。
  2. SAP 認証情報でログインします。
  3. 必要なクライアント ID を選択します。
  4. [リダイレクト URI] フィールドの SAP リダイレクト URI をメモしておきます。
  5. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  6. ウェブ アプリケーションのクライアント ID を選択します。

  7. [承認済みのリダイレクト URI] フィールドに、SAP リダイレクト URI を入力します。

  8. 変更を保存します。

/GOOG/MSG : 406 - IcmIConnCheckClientEnabled: Connect for protocol HTTP denied by configuration HTTP Response

問題: Google Cloud APIs にアクセスできない。

原因: SAP システムに HTTP ポート構成がありません。

解決策: SAP システムで HTTP ポートと HTTPS ポートの両方を作成し、アクティブにする必要があります。

VM メタデータは、HTTP ポート経由でのみアクセス可能なメタデータ サーバーに保存されます。そのため、VM メタデータにアクセスするには、HTTP ポートがアクティブであることを確認する必要があります。また、後続の API 呼び出しで HTTPS ポートがアクティブであることも確認する必要があります。

この問題を解決するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード SMICM を入力します。

  2. メニューバーで、[Goto] > [Services] をクリックします。

  3. HTTP ポートと HTTPS ポートが作成され、アクティブであることを確認します。[Actv] 列の緑色のチェックマークは、HTTP ポートと HTTPS ポートが有効になっていることを示します。

HTTP ポートと HTTPS ポートの構成については、ICM の HTTP(S) 設定をご覧ください。

問題: /GOOG/MSG: 403 - Request had insufficient authentication scopes

問題: エラー メッセージ /GOOG/MSG: 403 - Request had insufficient authentication scopes が表示されて API 呼び出しが失敗する。

原因: Google Cloud で実行されている SAP ワークロードにおいて、テーブル /GOOG/CLIENT_KEY 内に、指定されているサービス アカウントが Google Cloud APIs にアクセスするのに必要なスコープがありません。

解決策: この問題を解決するには、次の手順を完了します。

  1. Google Cloud コンソールで、Compute Engine の [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. SAP ワークロードが実行されている VM インスタンスをクリックします。

  3. [停止] をクリックし、指示に従って VM インスタンスを停止します。

  4. [編集] をクリックします。

  5. 関連付けられているサービス アカウントで、アクセス スコープを編集して、すべての Cloud APIs への完全アクセス権を付与します。

  6. [保存] をクリックします。

  7. [開始 / 再開] をクリックして VM インスタンスを再起動します。

Google Cloud APIs から返されるエラー メッセージ

すべての API クライアント スタブには、API 戻りコードとエラー メッセージを提供するエクスポート パラメータがあります。

  • ev_ret_code には HTTP ステータス コードが含まれています。API からエラーが返された場合、このパラメータには値 4XX が含まれます。

  • ev_err_resp には API から返されたエラーカテゴリとエラー メッセージが格納されます。

次の例は、すでに存在するトピック名で新しい Pub/Sub トピックを作成して、API からエラーが返されたことを示しています。

  • ERROR_TEXT: 競合
  • ERROR_DESCRIPTION: リソースはすでにプロジェクトに存在します(resource=SAMPLE_TOPIC_01

コミュニティのサポートを利用する

Cloud フォーラムのコミュニティで ABAP SDK for Google Cloud について質問したり、ディスカッションに参加できます。

サポートを利用する

ABAP SDK for Google Cloud の問題を解決するためにサポートを必要とする場合は、取得可能なすべての診断情報を収集し、Cloud カスタマーケアにお問い合わせください。

Cloud カスタマーケアへのお問い合わせの詳細については、Google Cloud での SAP に関するサポートを利用するをご覧ください。