🍙

Amplifyさん、勝手にyarnしないでください

2024/04/04に公開

久しぶりに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にインストールコマンドを追記すると回避できます。

amplify.state
{
  "pluginId": "amplify-nodejs-function-runtime-provider",
  "functionRuntime": "nodejs",
  "useLegacyBuild": true,
  "defaultEditorFile": "src/index.js",
+  "scripts": {
+    "build": "npm i"
+  }
}

参考issue

https://github.com/aws-amplify/amplify-cli/issues/13377

詳細

エラーになる条件

  1. amplify add function等で、AmplifyにNode.jsのLambdaを追加している
  2. amplify pushする環境のyarnのバージョンが1.x系以外

なぜエラーになるか

amplify pushした時に、Amplifyが生成したNode.jsのLambdaでは勝手に yarn install --production が実行されるようです。
このときamplify pushした環境にyarnがインストールされていなければ当然エラーになります。それだけならyarnをインストールすればよいのですが、Yarn2以降のバージョンでは--productionオプションは使用できません。ですので、環境にインストールされているyarnが新しいとamplify push時にエラーになってしまいます。

対処方法

  1. Yarnのバージョンを下げる。

Yarn 1.x系ならyarn install --productionでエラーにならないので、バージョンを下げれば通ります。

  1. ビルドコマンド(インストールコマンド)を書き換える。

最初に書いた対処方法になります。yarnのバージョンを下げたくない場合はこちらになります。
amplify add functionをしたときに、Lambdaのコードと共にamplify.stateという名前のファイルが作られているはずです。このファイルに追記することで、amplify push時に実行されるコマンドを上書きすることができます。
これってbuildでなくてinstallじゃないの?と思ってしまいますが気にしないことにします。

amplify.state
{
  "pluginId": "amplify-nodejs-function-runtime-provider",
  "functionRuntime": "nodejs",
  "useLegacyBuild": true,
  "defaultEditorFile": "src/index.js"
+  "scripts": {
+    "build": "npm i"
+  }
}

今回はnpm iにしましたが、エラーにならないなら--productionオプション無しのyarnでも良いかと思います。自分の環境にベストなコマンドを使いましょう。

最後に

早めにGen2に移行したい。

NCDCエンジニアブログ

Discussion