oj_free_oj
@oj_free_oj

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Next.jsのAPI Routesでローカルでは問題ないのにGAEにデプロイすると403エラー

解決したいこと

Next.jsのAPI RoutesからAPIへアクセスする処理を作成しております。
ローカル環境では問題なく動作するのですが、GAEへデプロイすると403エラーが発生してしまいます。
ちなみに、GAEのインスタンスはmax_instances: 1 min_instances: 0としています。
ひとまず、API Routesを使用せずクライアントサイドからリクエストすることで回避しておりますが、API Routesで行わなければならない処理もあるのでできれば同じ箇所に外部アクセスはまとめたいと考えております。
原因とその対策をご存知の方、ご教示いただけないでしょうか。

発生している問題・エラー

Error: Request failed with status code 403
    at createError (/layers/google.nodejs.yarn/yarn_modules/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/layers/google.nodejs.yarn/yarn_modules/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/layers/google.nodejs.yarn/yarn_modules/node_modules/axios/lib/adapters/http.js:322:11)
    at IncomingMessage.emit (node:events:402:35)
    at endReadableNT (node:internal/streams/readable:1343:12)
    at processTicksAndRejections (node:internal/process/task_queues:83:21) {

該当するソースコード

import type { NextApiRequest, NextApiResponse } from 'next'
import axios from 'axios'

type Type = {
  data: any,
}

const getData = (): Promise<Type> => {
  return new Promise(resolve => {
    const url = `https://apiserver/hoge/fuga`
    axios.get(url).then(res => {
      resolve(res.data)
    })
  })
}

export default async (req: NextApiRequest, res: NextApiResponse<Type>) => {
  const data = await getData()
  res.status(200).json(data)
}

自分で試したこと

getData関数はpromiseの返却ではなく、async/awaitでの返却も試しましたが、結果は変わらずでした。

const getData = async (): Promise<Type> => {
  const url = `https://apiserver/hoge/fuga`
  const res = axios.get(url)
  return res.data
}
0

1Answer

https://apiserver/hoge/fugaは実際に書かれているURLではないと思いますが、もしかするとGAE側からはアクセスが制限されているドメインだとか?

0Like

Comments

  1. またはapiserverがGAEからのアクセスを嫌がってるか
  2. @oj_free_oj

    Questioner

    コメントありがとうございます。
    apiserver側(アクセス先)のCORS設定は行っており、アクセス許可はしています。(ローカルからのアクセス(自己証明書あり)も許可ドメインに追加で問題なく接続できています)

    GAE側からということはアクセス元でホワイトリスト設定などがあるということでしょうか?
    もしある場合、設定先などをご教示いただけないでしょうか?


    ちなみにアクセス元もアクセス先も同じGAE内のサービスで、サブドメインが異なっています。
    先の例と違う例で申し訳ないですが、以下のイメージです。
    アクセス元:https://front.domain.com
    アクセス先:https://api.domain.com

Your answer might help someone💌