typescript - Turborepo/Lamda/Dockerfile - 内部パッケージが見つからないエラー
私はTurborepoを使用しているモノレポを持っており、その中に内部パッケージに依存するLambda関数があります。基本的には、次のような構造です…
サービスは「resize」で、依存先は「@repo/image」です。
services
resize
package.json
Dockerfile
src
index.ts
packages
image
package.json
src
helper.ts
これはもちろん簡略化されています。
「resize」サービスの Docker ファイルはこのようになっています(turborepo の Docker サンプルに基づいています)...
FROM public.ecr.aws/lambda/nodejs:20 as base
FROM base AS builder
WORKDIR ${LAMBDA_TASK_ROOT}
RUN npm i turbo --global
COPY . .
RUN turbo prune resize --docker
FROM base AS installer
WORKDIR ${LAMBDA_TASK_ROOT}
COPY .gitignore .gitignore
COPY --from=builder /${LAMBDA_TASK_ROOT}/out/json/ .
COPY --from=builder /${LAMBDA_TASK_ROOT}/out/package-lock.json ./package-lock.json
RUN npm i
COPY --from=builder /${LAMBDA_TASK_ROOT}/out/full/ .
COPY turbo.json turbo.json
RUN npm run build -- --filter=resize...
FROM base AS runner
WORKDIR ${LAMBDA_TASK_ROOT}
RUN ls ${LAMBDA_TASK_ROOT}
COPY --from=installer /${LAMBDA_TASK_ROOT}/services/resize/package.json .
COPY --from=installer /${LAMBDA_TASK_ROOT}/services/resize/dist/index.js .
RUN ls ${LAMBDA_TASK_ROOT}
CMD [ "index.handler" ]
DockerコンテナでLambda関数をビルドしてデプロイすると、内部パッケージ「@repo/image」が見つからないというエラーが発生します。
Turborepo の Docker の例は NextJS アプリ用なので、何か見落としているに違いありません。私は高度な Docker ユーザーではないので、他に何かが起こっている可能性もあります。私が Docker イメージをビルドするために使うコマンドは...
docker build --platform linux/amd64 -f services/resize/Dockerfile . -t resizeservice --no-cache
私は「serverless」フレームワークを使った例を見たことがありますが、デプロイ方法としてCDKを使ったDockerアプローチを利用したいと考えています。
ご助力いただけると幸いです。