Closed12

SSRありのNetx.jsアプリをAWS App Runnerにデプロイするまでのメモ

nus3nus3

手順スレッド

やった手順をここに書いてく

nus3nus3

サンプルのNext.jsアプリの用意

実コードはここ
https://github.com/yota-hada/p-next-ssr

SSRするような処理を追加する

pageの実装
src/pages/index.tsx
import { GetServerSideProps, NextPage } from 'next'

// 型チェックが弱いの許してぇ
const getHello = () => fetch('http://localhost:3000/api/hello')

interface IndexPageProps {
  data: {
    message: string
  }
}

const IndexPage: NextPage<IndexPageProps> = ({data}) => {
  console.log({data});
  return <h1>{data.message}</h1>
}

export default IndexPage

export const getServerSideProps: GetServerSideProps = async () => {
  const res = await getHello()
  const data = await res.json()

  return { props: { data } }
}
apiの実装
src/pages/api/hello.ts
import { NextApiRequest, NextApiResponse } from "next";

const handler = async (_req: NextApiRequest, res: NextApiResponse) => {
  res.status(200).json({
    message: 'Hello! おろかなせかい'
  })
}

export default handler
package.jsonの設定
pacakge.json
{
  "scripts": {
    "setup": "yarn --frozen-lockfile --ignore-optional",
    "dev": "next",
    "build": "next build",
    "start": "next start -p $PORT",
    "typecheck": "tsc"
  },
}
nus3nus3

App Runnnerの設定

  • ソースコードリポジトリを選ぶ
  • githubと連携する
  • デプロイするリポジトリとブランチを選択する
  • runtimeとビルドコマンド・スタートコマンドを設定する
  • 環境変数のPORTを追加し3000にした
  • あとはデフォルトのままにした


githubと連携する画面


構築設定の画面

nus3nus3

DynamoDBにアクセスしたい

どんぴしゃりなことを記事にされてるのを発見!!
https://zenn.dev/waddy/articles/app-runner-nextjs-dynamodb

とりあえずdynamo dbとアクセスできるiam作る

dynamo dbは画面ぽちぽちでいけるけどapp runnerのロールは画面ぽちぽちで作れなそう?

iamはcdkで作る

readはgetServerSideProps内で実装すればいい感じにdynamoDBのレコードを取得できた
put(insert)は/pages/api配下でapiの処理として記述するとdynamoDBにレコードを追加してくれた

ただその状態でデプロイするとエラーが出ちゃったのでそのエラーの原因を確認するところからやる

nus3nus3

dynamoDBにアクセスできる権限のロールをapp runnerに設定して最新のコードをデプロイしたら下記のようなエラーが出てデプロイしたurlにアクセスできなくなったのでその解消から

06-16-2021 03:00 PM }
06-16-2021 03:00 PM   time: 2021-06-16T06:00:28.867Z
06-16-2021 03:00 PM   retryable: true,
06-16-2021 03:00 PM   region: 'ap-northeast-1',
06-16-2021 03:00 PM   hostname: 'dynamodb.ap-northeast-1.amazonaws.com',
06-16-2021 03:00 PM   syscall: 'getaddrinfo',
06-16-2021 03:00 PM   code: 'NetworkingError',
06-16-2021 03:00 PM   errno: 'EAI_AGAIN',
06-16-2021 03:00 PM     at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {
06-16-2021 03:00 PM Error: getaddrinfo EAI_AGAIN dynamodb.ap-northeast-1.amazonaws.com
06-16-2021 02:54 PM }
nus3nus3

App Runnerを一時停止した状態から再開したらgetはできるようになってた
ただinsertはできないのでその調査する

nus3nus3

getServerSidePropsで直接dynamo dbのsdk呼ぶのはできるけど
apiになるとcorsエラーとかでダメなんかな

nus3nus3

fetchの引数を相対パスにしたら普通にapi経由でdynamo dbにアクセスできた

nus3nus3

App Runner + Next.jsでDynamoDBのレコードのgetとputできた!
(putは普通にgetリクエストでやっちゃってるけど)
(App Runnerのドメインをコミットに混ぜちゃったけど試すとき以外は止めてるしいっかなと)
https://github.com/yota-hada/p-next-ssr

このスクラップは2021/07/07にクローズされました