指定ディレクトリ以下のファイルをAmazon
S3にバックアップする手順の概略(AWS CLIを使う)
前準備
- Amazon
AWSのサイトで、AWSのアカウントを作ります(ルートアカウント)。
- Amazon
AWSのサイトにルートアカウントでログインし、IAM管理用アカウントを作ります。
- Amazon AWSのサイトにIAM管理用アカウントでログインします。
- S3作業用グループを作成します(たとえば
MyS3UserGroup
)。
- グループ
MyS3UserGroup
にアクセス権限AmazonS3FullAccess
を与えます。
- S3作業用アカウントを作ります(たとえば
s3-user
)。
- S3作業用アカウント
s3-user
をS3作業用グループMyS3UserGroup
に追加します。
- S3作業用アカウント
s3-user
について、以下の情報をメモしておきます。
- アクセスキー ID:
AAAAAAAAAAAAAAAAAAAA
- シークレットアクセスキー:
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
- リージョン:
ap-northeast-1
(たとえば)
- ローカルマシンで、AWS CLIをインストールします。
- ローカルマシンで、AWS CLIを設定します。
$ aws configure
AWS Access Key ID [None]: AAAAAAAAAAAAAAAAAAAA
AWS Secret Access Key [None]: SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
Default region name [somewhere]: ap-northeast-1
Default output format [None]:
バックアップ用のディレクトリ準備
$ cd ~
$ mkdir workdir
$ touch workdir/workfile
$ mkdir workdir/subdir
$ touch workdir/subdir/subfile
バケットの作成
$ aws s3 mb s3://mybucket
- 複数のプロフィールを切り換えているときには最後に
--profile PROFILE
オプション。
バケットへのバックアップ(同期)
$ cd ~
$ aws s3 sync workdir s3://mybucket
upload: workdir/workfile to s3://mybucket/workfile
upload: workdir/subdir/subfile to s3://mybucket/subdir/subfile
バケット内の一覧
$ aws s3 ls s3://mybucket
PRE subdir/
2020-06-26 16:42:51 0 workfile
$ aws s3 ls s3://mybucket/subdir/
2020-06-26 16:42:51 0 subfile
バケットにファイル追加
$ cd ~
$ echo Hello > hello.txt
$ aws s3 cp hello.txt s3://mybucket/hello.txt
upload: ./hello.txt to s3://mybucket/hello.txt
$ aws s3 ls s3://mybucket/
PRE subdir/
2020-06-26 16:47:38 6 hello.txt
2020-06-26 16:42:51 0 workfile
バケットからファイル取り出し
$ aws s3 cp s3://mybucket/hello.txt readme.txt
download: s3://mybucket/hello.txt to ./readme.txt
$ cat readme.txt
$ Hello
ヘルプ
$ aws help
$ aws s3 help
$ aws s3 mb help
$ aws s3 sync help
$ aws s3 cp help
リンク
メモ
- バケット内のサブディレクトリは単なる名前のプレフィクスであることに注意。
- 実際のバックアップを手動・半自動で行うときにはzipなどでまとめたものをバケットにフラットに並べた方がいいかもしれませんね。
- AWS SDK for
Rubyなど、プログラムからAWSを扱うのもできるけど、単なるファイルのやりとりなら、aws
cliで十分かもしれません。
- 一定期間が過ぎたら自動的にS3からS3
Glacierに落ちていくようなライフサイクル管理もできるみたい。
--recursive
オプションを使うと再帰的に処理をしてくれる。
- 再帰的にバケット内を表示
aws s3 ls --recursive s3://mybucket/
- 再帰的にバケット内のファイルを削除
aws s3 rm --recursive s3://mybucket/