omuriceman's blog

iOS / AWS / Firebase / JavaScript / Deep Learning を中心とした技術を面白く紹介します!

AWS Amplify Consoleの手動デプロイでAccessDeniedになった時の対処法 | zipファイルの圧縮に注意

以前ブログでも紹介しましたAWS Amplify Consoleですが、今まではGitプロバイダーを利用したデプロイしかありませんでした。

omuriceman.hatenablog.com

2019年7月より上記以外の様々なデプロイ方法がサポートされました。

f:id:omuriceman:20190728030119p:plain

aws.amazon.com

以下のようなデプロイ方法があります。

私はこれらの機能をブログで紹介するべく調査を行なっておりました。

しかし・・・

f:id:omuriceman:20190728005323p:plain

何度やってもzipファイルのアップロードがAccessDeniedされてしまう!という事態が発生。

色々と解決方法を模索していたのですが、zipファイルの圧縮方法に問題があることが判明しました。その原因についてブログにまとめていきたいと思います。

Macユーザー向けですが他のOS環境でも起こるかもしれません。

フォルダ構成について

今回デプロイを行うものはdistというフォルダの中にHTMLファイルとオムライスの画像が入っているだけのフォルダです。

dist
|--.DS_Store
|--index.html
|--omurice.png

無事にデプロイされると以下のような状態で表示されます。

f:id:omuriceman:20190728013526p:plain

zipファイルへの圧縮方法について

当初はGUIでフォルダの圧縮を行なっておりました。

f:id:omuriceman:20190728012127p:plain

残念ながらこのやり方だとうまくいきません。

次に私はAWS公式のリリースブログに書いてある圧縮方法を試してみることにしました。

aws.amazon.com

$ 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%

ここで判明したことがあります。

  1. __MACOSXという謎のフォルダが出現
  2. その中にあるファイルが影響して容量が大きくなっている
  3. ファイルの階層情報に違いが出ている

ということです。

このファイルの階層情報を合わせることができればうまくデプロイできそうな予感がします。

他の圧縮方法で試してみる

ではGUI上でどうやったらうまく圧縮できるでしょうか。以下のスクリーンショットをご覧ください。

f:id:omuriceman:20190728022106p:plain

先ほどはフォルダに対して圧縮を行なっていましたが、今回はフォルダ内部のファイルを全選択して圧縮を行なっています。

この操作で圧縮されたファイル情報はどのようになるでしょうか。 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フォルダができあがるのはさておき、ファイルの階層情報は問題なさそうなのでドラッグアンドドロップでアップロードしてみることにします。

f:id:omuriceman:20190728024140g:plain

f:id:omuriceman:20190728022611p:plain

正常に表示されました!

まとめ

  • AWS Amplify Consoleに新しいデプロイ方法が追加された
  • GUIでフォルダを圧縮してzipファイルを作成するとデプロイに失敗する
  • オススメのzip化の流れは以下の通り

AWS Amplify Consoleに手動デプロイする際のzipファイルへの圧縮に関してはフォルダを圧縮する階層まで遷移して、

$ zip -r xxx.zip *

とするのが一番安全で簡単です。GUI上でやるのは面倒なのでやめましょう。

メモ

news.mynavi.jp

  • zipコマンドのオプション

www.atmarkit.co.jp