Amplifyさん、勝手にyarnしないでください
久しぶりにAWS Amplify(Gen1)でバックエンドのデプロイをローカルから実行したらエラーに遭遇したので、対処法のメモです。
ハマったこと
amplify push
したら以下のようなエラーが出ました。
🛑 Packaging lambda function failed with the error
Command failed with exit code 1: yarn install --production
➤ YN0050: The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead
yarnを使った記憶がないのですが、Amplifyが勝手に使おうとしてエラーになっているみたいです。
対処方法
amplify.state
にインストールコマンドを追記すると回避できます。
{
"pluginId": "amplify-nodejs-function-runtime-provider",
"functionRuntime": "nodejs",
"useLegacyBuild": true,
"defaultEditorFile": "src/index.js",
+ "scripts": {
+ "build": "npm i"
+ }
}
参考issue
詳細
エラーになる条件
-
amplify add function
等で、AmplifyにNode.jsのLambdaを追加している -
amplify push
する環境のyarn
のバージョンが1.x系以外
なぜエラーになるか
amplify push
した時に、Amplifyが生成したNode.jsのLambdaでは勝手に yarn install --production
が実行されるようです。
このときamplify push
した環境にyarn
がインストールされていなければ当然エラーになります。それだけならyarn
をインストールすればよいのですが、Yarn2以降のバージョンでは--production
オプションは使用できません。ですので、環境にインストールされているyarn
が新しいとamplify push
時にエラーになってしまいます。
対処方法
- Yarnのバージョンを下げる。
Yarn 1.x系ならyarn install --production
でエラーにならないので、バージョンを下げれば通ります。
- ビルドコマンド(インストールコマンド)を書き換える。
最初に書いた対処方法になります。yarn
のバージョンを下げたくない場合はこちらになります。
amplify add function
をしたときに、Lambdaのコードと共にamplify.state
という名前のファイルが作られているはずです。このファイルに追記することで、amplify push
時に実行されるコマンドを上書きすることができます。
これってbuildでなくてinstallじゃないの?と思ってしまいますが気にしないことにします。
{
"pluginId": "amplify-nodejs-function-runtime-provider",
"functionRuntime": "nodejs",
"useLegacyBuild": true,
"defaultEditorFile": "src/index.js"
+ "scripts": {
+ "build": "npm i"
+ }
}
今回はnpm i
にしましたが、エラーにならないなら--production
オプション無しのyarn
でも良いかと思います。自分の環境にベストなコマンドを使いましょう。
最後に
早めにGen2に移行したい。
NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion