AWS Amplify Consoleの手動デプロイでAccessDeniedになった時の対処法 | zipファイルの圧縮に注意
以前ブログでも紹介しましたAWS Amplify Console
ですが、今まではGitプロバイダーを利用したデプロイしかありませんでした。
2019年7月より上記以外の様々なデプロイ方法がサポートされました。
以下のようなデプロイ方法があります。
- AWS マネジメントコンソール上でフォルダやzipファイルを直接ドラッグアンドドロップ
- S3バケットに入っているzipファイルを選択
- Dropboxなど外部サーバにあるzipファイル(やフォルダ)のURLを入力
私はこれらの機能をブログで紹介するべく調査を行なっておりました。
しかし・・・
何度やってもzipファイルのアップロードがAccessDeniedされてしまう!という事態が発生。
色々と解決方法を模索していたのですが、zipファイルの圧縮方法に問題があることが判明しました。その原因についてブログにまとめていきたいと思います。
Macユーザー向けですが他のOS環境でも起こるかもしれません。
フォルダ構成について
今回デプロイを行うものはdistというフォルダの中にHTMLファイルとオムライスの画像が入っているだけのフォルダです。
dist |--.DS_Store |--index.html |--omurice.png
無事にデプロイされると以下のような状態で表示されます。
zipファイルへの圧縮方法について
当初はGUIでフォルダの圧縮を行なっておりました。
残念ながらこのやり方だとうまくいきません。
次に私はAWS公式のリリースブログに書いてある圧縮方法を試してみることにしました。
$ cd dist #build directory $ zip -r dist.zip *
ターミナルでコマンドを実行してzipへの圧縮を行います。
この方法でデプロイすることに成功しました。GUI上で解凍すると同じファイルが展開されるのに、、、何故でしょう。
なぜデプロイに失敗したのか
上記の2つのzipファイルを比べてみることにしました。GUIで作成した方を「dist_gui.zip」、terminalで作成したzipファイルを「dist_terminal.zip」として比較してみることにしました。
同じファイルなのにzipのファイル中身が違う
まず同じファイルが入っているはずなのにファイルサイズに違いがありました。
$ ls -la -rw-r--r--@ 1 omuriceman staff 17112 7 27 22:12 dist_gui.zip -rw-r--r--@ 1 omuriceman staff 16228 7 27 22:12 dist_terminal.zip
次にファイルの情報について確認してみます。zipinfoコマンドを利用します。
$ zipinfo dist_gui.zip Zip file size: 17112 bytes, number of entries: 6 drwxr-xr-x 2.1 unx 0 bx stor 19-Jul-27 22:07 dist/ -rw-r--r-- 2.1 unx 385 bX defN 19-Jul-27 21:56 dist/index.html -rw-r--r-- 2.1 unx 15702 bX defN 19-Jul-27 21:59 dist/omurice.png drwxrwxr-x 2.1 unx 0 bx stor 19-Jul-27 22:12 __MACOSX/ drwxrwxr-x 2.1 unx 0 bx stor 19-Jul-27 22:12 __MACOSX/dist/ -rw-r--r-- 2.1 unx 480 bX defN 19-Jul-27 21:59 __MACOSX/dist/._omurice.png 6 files, 16567 bytes uncompressed, 16246 bytes compressed: 1.9%
$ zipinfo dist_terminal.zip Zip file size: 16228 bytes, number of entries: 2 -rw-r--r-- 3.0 unx 385 tx defN 19-Jul-27 21:56 index.html -rw-r--r-- 3.0 unx 15702 bx defN 19-Jul-27 21:59 omurice.png 2 files, 16087 bytes uncompressed, 15908 bytes compressed: 1.1%
ここで判明したことがあります。
__MACOSX
という謎のフォルダが出現- その中にあるファイルが影響して容量が大きくなっている
- ファイルの階層情報に違いが出ている
ということです。
このファイルの階層情報を合わせることができればうまくデプロイできそうな予感がします。
他の圧縮方法で試してみる
ではGUI上でどうやったらうまく圧縮できるでしょうか。以下のスクリーンショットをご覧ください。
先ほどはフォルダに対して圧縮を行なっていましたが、今回はフォルダ内部のファイルを全選択して圧縮を行なっています。
この操作で圧縮されたファイル情報はどのようになるでしょうか。 dist_guifiles.zipという名前にして同じようにzipinfoで比較してみました。
$ zipinfo dist_guifiles.zip Zip file size: 16836 bytes, number of entries: 4 -rw-r--r-- 2.1 unx 385 bX defN 19-Jul-27 21:56 index.html -rw-r--r-- 2.1 unx 15702 bX defN 19-Jul-27 21:59 omurice.png drwxrwxr-x 2.1 unx 0 bx stor 19-Jul-27 22:25 __MACOSX/ -rw-r--r-- 2.1 unx 480 bX defN 19-Jul-27 21:59 __MACOSX/._omurice.png 4 files, 16567 bytes uncompressed, 16246 bytes compressed: 1.9%
__MACOSXフォルダができあがるのはさておき、ファイルの階層情報は問題なさそうなのでドラッグアンドドロップでアップロードしてみることにします。
正常に表示されました!
まとめ
AWS Amplify Consoleに手動デプロイする際のzipファイルへの圧縮に関してはフォルダを圧縮する階層まで遷移して、
$ zip -r xxx.zip *
とするのが一番安全で簡単です。GUI上でやるのは面倒なのでやめましょう。
メモ
- __MACOSXとは
- zipコマンドのオプション