はじめに
AWSのElasticBeanstalkでアプリケーションをzip化しようとした際に、問題点にぶつかったので、書き留めておきます。
zipコマンド
ファイルの圧縮
zip [圧縮ファイル出力名] [圧縮の対象ファイル]
下記のフォルダ構成でpythonフォルダ内のデータのみ圧縮したい場合は、pythonフォルダ内に移動し、zipコマンドを実行します。
.
└── python
├── EBSampleApp-Python.iml
├── application.py
└── cron.yaml
cd python
zip ../test1.zip *
作成後のデータ確認
zipinfo [zipファイル名]
zipファイルの情報を確認する事ができます。
$ zipinfo test1.zip
Archive: test1.zip
Zip file size: 2641 bytes, number of entries: 4
-rw-r--r-- 3.0 unx 84 tx defN 20-Jan-15 12:49 cron.yaml
-rw-r--r-- 3.0 unx 6148 bx defN 21-Feb-05 20:12 .DS_Store
-rw-r--r-- 3.0 unx 4981 tx defN 21-Feb-05 20:02 application.py
-rw-r--r-- 3.0 unx 612 tx defN 20-May-30 08:57 EBSampleApp-Python.iml
.DS_Storeを含まずに圧縮する方法
macの場合、ファイル管理用の.DS_Store
が含まれてしまっている場合がある。
明示的に特定のファイルを含めたくない場合は-x
オプションで指定します。
AWSでzipファイルをアップロードしてソースコードを展開するサービス 1は .DS_Store
が含まれていても問題なく動作しました。
zip ../test1.zip * -x "*.DS_Store"
フォルダの圧縮
zip -r [圧縮ファイル出力名] [圧縮の対象ファイル]
下記のフォルダ構成でpythonフォルダを圧縮したい場合は、zipコマンドに-r
オプションを指定します。
.
└── python
├── EBSampleApp-Python.iml
├── application.py
└── cron.yaml
zip -r test2.zip python/*
作成後のデータ確認
下記の情報からわかるように、pythonフォルダ自体も圧縮ファイルに含まれている。
zip -r test2.zip python/*
で圧縮対象ファイルをpython/*
と指定しているので、隠しファイル等は含まれていない。
$ zipinfo test2.zip
Archive: test2.zip
Zip file size: 2907 bytes, number of entries: 3
-rw-r--r-- 3.0 unx 612 tx defN 20-May-30 08:57 python/EBSampleApp-Python.iml
-rw-r--r-- 3.0 unx 4981 tx defN 21-Feb-05 20:02 python/application.py
-rw-r--r-- 3.0 unx 84 tx defN 20-Jan-15 12:49 python/cron.yaml
フォルダ内の隠しフォルダも含めて圧縮したい場合
下記のコマンドで圧縮します。
zip -r test3.zip python
フォルダ内の隠しフォルダも含めて圧縮したい場合(DS_Storeを除く)
zip -r test4.zip python -x "*.DS_Store"
当該フォルダ内で隠しフォルダも含めて圧縮したい場合(DS_Storeを除く)
一つ上の階層に「test.zip」というフォルダ名で圧縮フォルダを作成します。
対象のファイルには、-r
オプションでフォルダを指定して、対象ファイルを.
でカレントディレクトリに設定することで隠しファイルやフォルダを含む事ができます。
zip -r ../test.zip . -x "*.DS_Store"
まとめ
zipファイルを作成するときは、「.DS_Store
が混入していないか?」「意図しないフォルダ構成になっていないか?」を確認する為に、完成したzipファイルを確認しましょう!
zipinfo [zipファイル名]
-
ElasticBeanstalkやLambdaなど。 ↩