AmplifyでPythonのfunctionを追加したけど2回目のpushができない😇
AmplifyでPythonのfunctionを追加し amplify push
をして、プログラムを修正後、もう一度、 amplify push
したらエラーがでてpushできなかったときの対処方法の備忘録📝
環境
エラー内容
$ 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
は現在のクラウド状態が格納されている。
対処方法
Pipenvの2つの環境変数を .env
に記載し対処
- プロジェクト配下に仮想環境を配置するか指定できる環境変数:PIPENV_VENV_IN_PROJECT
- 仮想環境の独自の配置場所を指定できる環境変数: WORKON_HOME
Amplifyでは「PIPENV_VENV_IN_PROJECT」がデフォルトで「true」になっているようなので、 amplify push
を行うと作成したfunction配下に仮想環境( .venv )が作成される
これが #current-cloud-backend
にはいってしまう。
このため、 Pipenvの.env の自動読み込み機能を利用するため .env
を Pipfile
と同じ場所に配置し以下を記載
PIPENV_VENV_IN_PROJECT=false WORKON_HOME=../../../../.venvs
- .envの記載内容の補足
PIPENV_VENV_IN_PROJECT
がtrue
のままだとWORKON_HOME
が有効にならなかった- このため
PIPENV_VENV_IN_PROJECT
をfalse
に設定し - 仮想環境の配置場所を
#current-cloud-backend
に含まれない場所に変更
無事、2回目以降も amplify push
できるようになりました🙌
懸念点
ただ、この方法だとPythonのfunctionが複数になった場合、仮想環境が被ってしまうので、 amplify/backend/function
とは別の場所でPipfileを統一した方がよさそう
補足:エラーが出た場合の復帰方法
こちら参考にさせていただきました!ありがとうございます🙏
以下ページの「amplify pushができなくなったら」です!