t_wの輪郭

あれNext.jsで環境変数を使ってIP制限onnxに変換して量子化するコマンドNext.jsでサーバーレスSentence Embedding🦜️🔗 LangChain Next.js Starter Template2023年11月24日日記ServerSidePropsrevalidateするServerActiongetStaticPropsgetServerSideProps2023年11月17日日記next/headersServer ActionNext.jsをAWS Amplifyで動かすAmplifyでホスティングしたNext.jsにアクセスするとエラーが出るAmplifyへNext.js 14をデプロイするときに『unhandledRejection ReferenceError: Headers is not defined』と出るときの対策AmplifyでNext.js 14をビルドする方法2023年11月14日日記AWS AmplifyでGo言語とNext.jsから成るアプリをビルドするアレあれあれ『Next.js公式のMDXプラグインで、Markdownでページを作る機能を試してみた』Next.jsとAmplifyでcognitoの認証を実装

あれ

2023/12/3 3:52:00

Amplifyに乗っけたNext.jsから直接DynamoDBたたくの大変っぽい。テーブル名を同定でけへん。

src/middleware.ts

import { NextRequest, NextResponse } from 'next/server'

// IPホワイトリスト
const IP_WHITELIST = ['::1', ...JSON.parse(process.env.IP_WHITELIST ?? "[]")];
const IP_RESTRICT = process.env.IP_RESTRICT === 'true';

export async function middleware(request: NextRequest) {
    if (IP_RESTRICT) {
        // IPアドレスを取得
        let ip: string = request.ip ?? request.headers.get('x-real-ip') ?? '';

        // プロキシ経由の場合、x-forwarded-forヘッダーからIPアドレスを取得
        const forwardedFor = request.headers.get('x-forwarded-for');
        if (!ip && forwardedFor) {
            ip = forwardedFor.split(',').at(0) ?? 'Unknown';
        }

        // 取得したIPアドレスがホワイトリストに含まれているかチェックし、含まれていない場合はアクセス拒否
        if (!IP_WHITELIST.includes(ip)) {
            return NextResponse.json({ message: 'Unauthorized' }, { status: 401 });
        }
    }

    return NextResponse.next();
}
python3 -m transformers.onnx --model=sentence-transformers/paraphrase-multilingual-mpnet-base-v2 onnx/ --opset=18

optimum-cli onnxruntime quantize --onnx_model ./onnx --output onnx_quantize/ --arm64

2023年11月24日日記

2023/11/24 11:52:00

 服薬をサボってたらメンタルを不調が襲ったので、薬をのんだ。


 実家から送られてきた5kgのみかんが残り半分以下になっている。「週明けに職場で配ろう」とか思ってたら、このままなくなる勢いだ。


 年末も近づき、実家のことが思い出されて情緒が不安定になる。親の寂しさを思ってしまうが、その実私が寂しいのかもしれない。一人暮らしが長い。
 そろそろ年末の帰省に向けて、実家への飛行機のチケットを取らねば。


 Next.jsServer Actionを性懲りもなく試しているが、どうにもうまく動かない。エラーが出るが、どこがエラーを出しているのか判別がつかない。諦めよう。
 ServerSidePropsに切り替えていく。引数でデータをバケツリレーするのは面倒だが、想定した動作をする可能性が高い。

revalidateするServerAction

2023/11/18 19:28:00

オンデマンドISRのrevalidateはこれではできない。これでrevalidateされるのはfetchのキャッシュ。

import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";

export default async function revalidate({ params }: any) {
    const { kno } = params;
    revalidatePath(`/${kno}`);
    redirect(`/${kno}`);
}

2023年11月17日日記

2023/11/17 15:02:00

 朝、体が冷え切って目が覚める温度になってきた。そろそろ布団を出さないと体調を悪くしてしまう。


 上司と、私の今年の目標達成率について1 on 1をした。お互いに、「毎日の定例で30分話してるし、話すこと無くね?」みたいな感じだったが、普通に予定していた時間いっぱいまで話した。評価は上司の更に上がするので、まあどうなることやらである。
 設定した目標を完全に忘れていたが、自己評価においては目標達成率は思いの外良かった。ちゃんと、自分が走りそうな方向に目標を置いておいたのが良かった。
 ちなみにこの目標管理は給与とかボーナスには影響しない。という建付け。多分参考にはする。


 仕事で問い合わせを出して、その回答待ちなのを良いことに、すげーダラダラしていた。
 Next.jsSMTPを受ける方法とか検討していた。無理そう。コレができるとシステムでできることの幅が広がるのだが。普通にマネージドサービスを使ったほうが良いんだろう。

 そうこうしていたところ、仕事でクラウド上に作ってるシステムが、全部吹っ飛んでいることが判明した。DBやらファイルやらユーザーアカウントやらが全部消えた。まだ本番運用前で良かった。
 上司と話したところ、週明けに原因調査しようということになった。定時直前に発覚して、上司に相談した上で泣きながら帰宅した。
 何も心当たりのある操作してないんだよなぁ……。クラウドのコンソールにログインするアカウントが不正ログインされた形跡もなかった。クラウドのシステム自体の不具合で消えたんだったら、一発アウトなので別のクラウドに移行しないといけなくなってしまう。
 CI/CD・DB・ストレージ・認証・認可・API生成の全部入りのマネージドサービス(フレームワーク付き)でこの事象が起きちゃったので、まじで影響範囲がでかい。死ぬ。たのむ、俺のミスであってくれ。

 Fediverseで「複雑なマネージドサービスって怖いよね〜〜」という話をしていた。はい。実感。


 布団を出してカバーを付けた。カバーをうまく付けられなくてモタモタしてしまった。疲れで不器用になっている。俺はもうだめだ

フロントエンドのビルドの設定をいじる(baseDirectory: .nextにする)。

frontend:
  phases:
    preBuild:
      commands:
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*

WEB_COMPUTEに切り替える。
aws amplify update-app --app-id {app_id} --platform WEB_COMPUTE

フレームワークを誤認識する場合はNext.jsと明示する。
aws amplify update-branch --app-id <value> --branch-name <value> --framework 'Next.js - SSR'
https://github.com/aws-amplify/amplify-hosting/issues/3168

上記設定の後に再構築する。

コマンドをやるときは、CloudShellが便利。

2023年11月14日日記

2023/11/14 15:26:00

 特に記憶に無いです。

仕事

 「Next.jsを使えば忌々しいAmplifyDataStoreを無くせるんじゃね?」とか思って、社内システムの移植を開始した。もともとReactで動いていたので、3時間ほどでシステムがNext.jsの上で動くようになった。Next.jsの恩恵が受けられるのはこれからだ。

 「Next.jsを使えばBERTSentence Embeddingを取るAPIをサーバーレスでつくれるんじゃね?」とかおもって実装した結果、比較的高性能な開発機であっても計算に3秒もかかることがわかり、検索には使えず無事死亡した。

デライトが落ちていた

 「あれ」ってどんなんだったっけと思って、デライトで検索しようとしたところ、デライトが落ちていた(障害のお知らせ)。普段当たり前のようにデライトが使えているが、knownetの開発を通じてデライトが安定稼働していたことの異常さに気付きつつある。knownetの方はちゃんと動いている期間のほうが短い。

 探そうとしていた情報については『t_wの輪郭』を参照して見つけられた。いざというときの保証として機能してくれた。

version: 1
backend:
  phases:
    preBuild:
      commands:
        - wget --no-verbose https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
        - rm -rf /usr/local/go 
        - tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz
    build:
      commands:
        - '# Execute Amplify CLI with the helper script'
        - export PATH=$PATH:/usr/local/go/bin
        - go version
        - amplifyPush --simple
frontend:
  phases:
    preBuild:
      commands:
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: .next
    files:
      - '**/*'
  cache:
    paths:
      - node_modules/**/*

あれ

2023/9/24 7:30:00

ノリと勢いで『t_wの輪郭』をReactで作り直しだウェーイってしてるけど、SEO死ぬんじゃねこれ

あとOGP対応無理くねコレ

何ならRSSも無理っぽい

AWS AmplifyでSSRする方法探すか


使用できますAWS Amplifyサーバー側レンダリング (SSR) を使用する Web アプリをデプロイしてホストします。現在、Amplify ホスティングは Next.js フレームワークを使用して作成されたアプリをサポートしています。

公式の日本語が怪しいけど、AWS AmplifyはNext.jsでSSR出来るらしい。


React+DataStoreからNext.jsに切り替えるぞッ!!!!

ここまで作ったフロントエンドを捨てることになるけど、メリットはあるし、やるしかねぇ。

  • フロントエンドの実装はまだほとんど進んでない
  • AmplifyでNext.jsで動かす勉強になる