GoogleドライブでSAMを使って分かった権限周りのハマりどころ
こんにちは。AWS事業本部のKyoです。
SAMを使っていく中でちょっと困ったことがあったので、残しておきます。
結論から述べると、 GoogleドライブでSAM(およびLambda)関係のファイルを扱うのは注意が必要そうです。
起こったこと
検証のためにSAM CLIを触っていました。
とりあえずHello Worldしようと、SAM init
し、AWS Quick Start Templates
, python3.7
, Hello World Example
で進めました。
テンプレートが生成されるので、SAM build
して、 SAM deploy --guided
でconfigを生成、SAM deploy
します。
...無事にLambda関数も出来たので、マネジメントコンソールから関数のテストを実行すると見たことないエラーが出ました。
トラブルシュートしてみた
エラーメッセージを見ると、「Permission denied」とのことなので、ls -l
でコードファイルの権限を調べます。
-rw------- 1 kyo staff 0 3 22 16:08 __init__.py -rw------- 1 kyo staff 1151 3 22 16:08 app.py -rw------- 1 kyo staff 8 3 22 16:08 requirements.txt
600
ですね。グループおよびその他のユーザに対して権限がついてない状態でした。
公式ドキュメントに以下の記載がありました。
Lambda には、デプロイパッケージのコードファイルおよび依存ライブラリに対するグローバルな読み取り権限が必要です。
権限が必要とのことなので、chmod -R 755 hello_world/
で権限付与して再確認します。
-rwx------ 1 kyo staff 0 3 22 16:08 __init__.py -rwx------ 1 kyo staff 1151 3 22 16:08 app.py -rwx------ 1 kyo staff 8 3 22 16:08 requirements.txt
...なぜか自分の権限しか付与できず、700
にしかなっていません(sudoつけてもダメ)。
調べてみると、以下のページを見つけました。
chmod not changing permissions for files in Google Drive File Stream
同じく自分もGoogleドライブをファイルストリーム経由で使っていました。
どうやらGoogle Driveの中では自分以外の権限は変更できないようです。
作業ディレクトリをローカルに切り替えてSAM init
から実行してみます。
デフォルトの状態で権限は以下になっています。
-rwxr-xr-x 1 kyo staff 0 3 22 17:20 __init__.py -rwxr-xr-x 1 kyo staff 1151 3 22 17:20 app.py -rwxr-xr-x 1 kyo staff 8 3 22 17:20 requirements.txt
755
ですね。この状態で、デプロイ&テストします。
成功しました!
おまけ
SAMを使ってもコードファイル自体は、S3にアップされるはずと中身を覗いてみたら、3e8eddff84fd00b892a6e81e2c0006cc
のようなファイルが生成されていました。
こちらが実体のようです。なお拡張子は表示されてないものの、拡張子をzip
に変更すると解凍できました。
解凍したものからも権限の確認は可能でした。
おわりに
ドキュメント類のバックアップのため、Googleドライブの中で作業を行っていたことが思いもよらぬハマりにつながりました。 GoogleドライブでSAM(およびLambda)関係のファイルを扱うのには注意が必要だと思いました。
以上、何かのお役に立てれば幸いです。
参考
ブログを書いているときに同じ症状を報告されている方の記事を見つけたので、ご紹介いたします。