sam deploy で 謎のエラー : I/O stream type expected
sam deploy すると I/O stream type expected
というエラーが出てハマりました。
環境
% sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H2 % aws --version aws-cli/2.0.28 Python/3.7.4 Darwin/19.6.0 botocore/2.0.0dev32 % brew --version Homebrew 3.2.6 Homebrew/homebrew-core (git revision c0d11ed420; last commit 2021-08-16) Homebrew/homebrew-cask (git revision d2af1d09dc; last commit 2021-08-16) % sam --version SAM CLI, version 1.27.2 % anyenv --version anyenv 1.1.1 % pyenv --version pyenv 1.2.21
経緯
下記の内容で sam init した。
----------------------- Generating application: ----------------------- Name: sam-app Runtime: python3.8 Dependency Manager: pip Application Template: hello-world Output Directory: .
その後、
% sam build % sam deploy --guided
をして、下記以外はデフォルトのままデプロイしようとした、
HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
すると怒られた。I/O stream type expected
のエラーについて調べてもあまり有力な情報は出てこなかった。
Error: Unable to upload artifact HelloWorldFunction referenced by CodeUri parameter of HelloWorldFunction resource. I/O stream type expected
解決
エラーメッセージを見てみると、/usr/local/lib/python3.8/site-packages/awscrt
にてエラーが起きているらしい。
Python 自体は anyenv の pyenv 経由で 3.8 系を設定してある。 ここで、pip list してみる。
% pip list Package Version ---------- ------- pip 20.1.1 setuptools 47.1.0
おかしい。何もインストールしてないよ。 pip show してみる。
% pip show pip ... Location: /Users/<USER_NAME>/.anyenv/envs/pyenv/versions/3.8.5/lib/python3.8/site-packages Requires: Required-by:
ここで記載されているディレクトリとは関係ない /usr/local/...
のファイルを読みに行っておかしくなってるっぽい。
ということで、なぜか読みに行ってしまうディレクトリをテキトーにリネームする。
% mv /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages2
これで sam deploy したら上手くデプロイできた。
anyenv の pyenv 以外で入れた Python の環境でインストールしたライブラリが邪魔をしていたというのが結論で良いのかしら。
とりあえず動くようになってよかった。