ChinoDuino(Chino × Arduino)

自発性のないプログラマーがArduinoと出会って悪戦苦闘する様を綴っていく⇒今はいろいろ(^^;

AmplifyでPythonのfunctionを追加したけど2回目のpushができない😇

AmplifyでPythonのfunctionを追加し amplify push をして、プログラムを修正後、もう一度、 amplify push したらエラーがでてpushできなかったときの対処方法の備忘録📝

環境

  • macOS Ventura バージョン13.5.2
  • @aws-amplify/cli:12.4.0

エラー内容

$ amplify push  
✖ There was an error pulling the backend environment dev.
🛑 ENOENT: no such file or directory, stat '/xxxx/react-ts-workspace-amplified/amplify/.temp/#current-cloud-backend/function/samplePythonFunction/.venv/bin/python'

#current-cloud-backend 内にPythonの仮想環境の .venv があり、その中にシンボリックリンクがあることが悪さをしているらしい。

#current-cloud-backend は現在のクラウド状態が格納されている。

#current-cloud-backend

対処方法

Pipenvの2つの環境変数.env に記載し対処

  1. プロジェクト配下に仮想環境を配置するか指定できる環境変数PIPENV_VENV_IN_PROJECT
  2. 仮想環境の独自の配置場所を指定できる環境変数 WORKON_HOME

Amplifyでは「PIPENV_VENV_IN_PROJECT」がデフォルトで「true」になっているようなので、 amplify push を行うと作成したfunction配下に仮想環境( .venv )が作成される

これが #current-cloud-backend にはいってしまう。

このため、 Pipenvの.env の自動読み込み機能を利用するため .envPipfile と同じ場所に配置し以下を記載

PIPENV_VENV_IN_PROJECT=false
WORKON_HOME=../../../../.venvs
  • .envの記載内容の補足
    • PIPENV_VENV_IN_PROJECTtrue のままだと WORKON_HOME が有効にならなかった
    • このため PIPENV_VENV_IN_PROJECTfalse に設定し
    • 仮想環境の配置場所を #current-cloud-backend に含まれない場所に変更

無事、2回目以降も amplify push できるようになりました🙌

懸念点

ただ、この方法だとPythonのfunctionが複数になった場合、仮想環境が被ってしまうので、 amplify/backend/function とは別の場所でPipfileを統一した方がよさそう

補足:エラーが出た場合の復帰方法

こちら参考にさせていただきました!ありがとうございます🙏

以下ページの「amplify pushができなくなったら」です!

https://strip.koatech.info/articles/amplify-function/