2021/05/21

AWSにあるファイルとの同期を実現するsyncコマンドの使い方

 
  

AWSとファイルを同期するには


AWSにWebサービスを構築する場合、サービスで公開するファイルを格納するためのデータ領域を作成します。そして、そのデータ領域で公開したファイルと開発用で利用しているローカルなファイルを同期することがよくあります。

AWSに用意したデータ領域のファイルとローカルなファイルを同期するには、インターネットを介して安全に同期する仕組みが必要です。さらに定期的に同期するには、自動で動作する仕組みも検討する必要があります。

続いて、インターネットを介してファイルを同期する仕組みの基本について見て行きましょう。

通信データを暗号化するならssh

今のインターネットは安全ではありません。インターネットを介してデータを転送する場合、暗号化して安全にデータを送る仕組みを利用します。

そのようなインターネットの暗号化でよく使われるのが、公開鍵と秘密鍵を利用する公開鍵暗号方式によりデータを暗号化するSSHです。

AWSにインスタンスやバケットを作成すると、そのアクセスは必ず暗号化されます。今回紹介するAWSのs3 ayncでもSSHによる暗号化が利用されているので、インターネットを介して安全にデータを転送できます。

rysncコマンド

インターネットの拡大と共に普及したOSのLinuxでは、インターネットを安全に利用できるコマンドが幾つも使われています。その1つがインターネットを介してファイルやディレクトリを安全に同期するコマンドのrsyncです。

rsyncコマンドは、同期元と同期先を指定するとその両者を比較して変更のあったファイルやデフィレクトリのみを更新します。

また、同期元や同期先としてネットワークで接続するコンピュータのURLやアカウントも指定できるので、インターネットを介したファイルの同期が可能です。またオプションでsshによる暗号化も指定できます。

rsyncコマンドの例


$ rsync -auz --delete -e ssh /var/www/html/ (アカウント)@(URL):/var/www/html/

AWS CLIでも同期は可能

先ほど紹介したrsyncコマンドを利用するには、AWSのAmazon EC2などに作成したAmazon Linux 2などのLinuxサーバーを設定する必要があります。

Amazon S3のサービスでは、ファイルやディレクトリの同期にAWSのコマンドラインインターフェース(AWS CLI)のs3 sync コマンドを利用することで、Linuxサーバーを介さずに同期することが可能です。

しかも先ほど紹介したrsyncより簡単に操作でき、通信が暗号化されているので安全にファイルやディレクトリの同期を実現できます。

以下で、このコマンドの使い方について詳しく見て行きましょう。

s3 syncコマンドとは


先ほど紹介したようにAWSのコマンドラインインターフェース(AWS CLI)には、Amazon S3に作成したバケットの内容を同期するコマンドとして、s3 syncを利用できます。

次に、このコマンドの使い方について紹介しましょう。

AWS CLIとは

AWSのコマンドラインインターフェース(AWS CLI)は、AWSの各種サービスを管理するためツールです。WindowsやmacOSなどのコンピュータに専用ツールをインストールすることで、コマンドプロンプトやターミナルからAWSの各サービスを制御できます。

また、バッチファイルのようなスクリプトに組み込むことで、AWS CLIを利用した処理の自動化も可能です。

今回紹介するs3 syncは、このAWS CLIコマンドの1つです。このコマンドを利用する場合は事前にインストールしてください。

そして先に「aws」を付けてs3 syncコマンドを実行することでファイルやディレクトリを同期できます。

s3 syncコマンドの実行例


$ aws s3 sync . s3://my-bucket/path

s3 syncの使い方

今回紹介するs3 syncコマンドは、先ほど紹介したLinux用のrsyncコマンドと同じように転送元と転送先を比較して、更新のあったファイルまたはディレクトリを転送するコマンドです。

Amazon S3に確保した領域であるバケットとローカルドライブの同期の他、Amazon S3のバケット間の同期にも利用できます。

s3 syncコマンドを実行する際、転送元と転送先、およびオプションを指定します。なお、オプションは省略可能です。また、AWS CLIコマンドによるやりとりが暗号化されているので安全に利用できます。

構文
$ aws s3 sync (転送元) (転送先) (オプション)

s3 syncのオプション

s3 syncコマンドはオプション無しでもファイルやディレクトリの同期が可能ですが、実行環境によってはオプションを利用します。

例えば、Linux用のrsyncコマンドでは、転送元のファイルが削除されても転送先のファイルは削除されません。しかし、–deleteオプションを指定すると転送先のファイルも削除されます。この–deleteオプションはs3 syncコマンドでも利用できます。

また、特定のファイルを転送から除外する–excludeオプションなどもよく使われます。

ただしLinux用のrsyncと違い、タイムスタンプが更新されていてもファイルサイズが同じ場合は同期されません。rysncコマンドと同じようにタイムスタンプが違う場合も同期してほしい場合は、–exact-timestampsが必要です。

AWSのDataSyncとの比較


AWSでファイルやディレクトリを同期できる機能はs3 syncコマンドだけではありません。AWSではシンプルでかつ高速なデータ移動を実現するサービスとしてDataSyncというサービスも提供しています。

続いて、s3 syncコマンドとDataSyncサービスの違いについて解説します。

DataSyncを利用するには

DataSyncは、ローカルなパソコンなどにDataSync専用のエージェントアプリを設定し、AWSコンソールからDataSyncコンソールに切り替えて利用します。

このようなエージェントを利用することで、大容量のデータを安全にインターネットで転送することが可能です。またDataSyncコンソールに設定するだけで、自動でファイルやディレクトリを同期できます。

s3 syncでも同じ機能を実現できますが、ファイルの同期を運用するスキルを持つエンジニアが対応する必要があります。その点DataSyncを利用することでファイル同期の自動化が可能です。

DataSyncは費用がかかる

先ほど紹介したように、DataSyncはファイル同期に便利なサービスです。しかし、DataSyncを利用するには費用がかかります。

DataSyncではコピーするデータの量に対する料金が課せられ、その料金はギガバイトあたり0.0125USドルです。

例えば10Tバイトのデータを1回転送した場合、1.024 * 0.0125 * 10,000 = 128 USドル、日本円に直すと約14,000円です。転送する容量と頻度を考えて費用を計算してください。

なお、s3 syncコマンドとバッチファイルなどを組み合わせて自動で転送する仕組みを作った場合、このような費用がかかりません。

出典:AWS DataSync の料金│AWS
参照:https://aws.amazon.com/jp/datasync/pricing/

s3 syncコマンドでAWSと簡単に同期


これまで紹介したように、AWS CLIでs3 syncコマンドを使用することで、AWSのAmazon s3にあるファイルやディレクトリを簡単に同期できます。

しかも、AWS CLIはデータが暗号化されており、インターネットを介しても安全に転送することが可能です。

使い方はLinuxのrsyncコマンドとほぼ同じで、バッチファイルにして自動で同期する仕組みも作れます。

ただし、s3 ayncコマンドを組み合わせて自動で同期する仕組みを作るにはスキルを持つエンジニアが必要になることに注意が必要です。

費用はかかりますが、安全に自動で同期できるAWSのDataSyncサービスの利用も検討してください。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】