背景
SAM で EventBridge Trigger + Lambda を Deploy しようとしてる
その際に発生したエラーの対処法の記録
エラー内容
最初は npm install かと思ったけど、Esbuild の話でそこそこ悩んだ
Error: NodejsNpmEsbuildBuilder:EsbuildBundle - Esbuild Failed: X [ERROR] Could not resolve "@aws-sdk/lib-dynamodb"
app.ts:2:27:
2 │ import { PutCommand } from "@aws-sdk/lib-dynamodb";
╵ ~~~~~~~~~~~~~~~~~~~~~~~
You can mark the path "@aws-sdk/lib-dynamodb" as external to exclude it from the bundle, which will remove this error.
解決策
エラーメッセージ通りで、Esbuild の Bundle 対象から外せばいいだけでした。
具体的には、template.yaml の BuildProperties に、以下のように External: を追加すればOKでした。
Metadata: # Manage esbuild properties
BuildMethod: esbuild
BuildProperties:
Minify: true
Target: "es2020"
Sourcemap: true
EntryPoints:
- app.ts
# ★ここを追加★
External:
- "@aws-sdk/lib-dynamodb"
- "@aws-sdk/client-dynamodb"
Document
その他の確認内容
解決に至るまでの調査内容
インストールし忘れ?かと思い試すがダメ
npm install @aws-sdk/lib-dynamodb
dependencies のせい?でもなし
stackoverflow で検索したらV2 の頃の同じエラーがあったので、以下二点試すもダメ
※対象 URL 逸失
- Dev Install を試すがダメ(uninstall 後)
- dependencies > devDependencies と理解
npm install -D @aws-sdk/lib-dynamodb
- Optional Install & Omit を試すがダメ
- optionalDependencies & npmrc で、
omit[]=optional
追加 と認識
- optionalDependencies & npmrc で、
npm install -O @aws-sdk/lib-dynamodb
omit[]=optional
npmrc の現状動作の確認と、全オプションの初期値付き編集
現在の npmrc の読み込み状況を調べる
npm publish --dry-run --verbose
npm の config 設定を編集
- これで開くと、option default が列挙されるのでわかりやすくて Good
npm config -g edit
-
-g
を付けるかは状況次第
SAM validate してみたら、region が抜けてたけど、region 追加してもダメ
確認して
sam validate
.aws/config に region 追加
error 内容に従って、build --exclude
変わらず
sam build --exclude @aws-sdk/lib-dynamodb
あとがき
AWS-SDK V2 の情報はたくさん見つかるけど、V3 用を探すのが面倒・・
少し慣れて V2/V3 を見分けられるようになったけど、最初はきつかった
V2/V3 の見分け方
SDK | import 名 | 例 | 補足 |
---|---|---|---|
V2 | aws-sdk |
import * as AWS from 'aws-sdk'; |
|
V3 | @aws-sdk/{service} |
{import { S3Client } from '@aws-sdk/client-s3'; |
サービス単位 |