AWS-CLIのsync機能でローカルファイルをS3に同期させる
pip のサイトからインストールスクリプトをダウンロードし実行する
$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ sudo python get-pip.py
pip を使用して AWS CLI をインストールする
$ sudo pip install awscli
すでに入ってる場合は一応アップデートする。
$ sudo pip install --upgrade awscli
AWS で S3 にアクセスするための IAM を作る
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Sid": "Stmt1492067460000",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::test-s3-sync-bucket",
"arn:aws:s3:::test-s3-sync-bucket/*"
]
}
]
}
AWS で 同期用の S3 バケットを作る
{
"Id": "Policy1492071213217",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1492071176541",
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::test-s3-sync-bucket/*",
"Principal": "*"
}
]
}
ACL のほうは Any authenticated AWS user だけフルアクセスにする。
同期元のパソコン内で AWS プロファイルを作成する
AWS コンソールの IAM から、
ユーザー→認証情報→アクセスキーの作成
より、 Access key ID,Secret access key を作成しメモしておく。
$ aws configure --profile test-s3-sync
-
AWS Access Key ID: メモした AWS Access Key ID
-
Secret access key: メモした Secret access key
-
Default region name: ap-northeast-1
-
Default output format: json
プロファイルが設定されたか確認する
$ cat ~/.aws/config
$ cat ~/.aws/credentials
S3 との接続を確認する
aws s3 ls s3://test-s3-sync-bucket/ --profile=test-s3-sync
aws s3 cp ./logs/log.log s3://test-s3-sync-bucket/ --profile=test-s3-sync
aws s3 sync ./logs s3://test-s3-sync-bucket/ --profile=test-s3-sync
S3 sync の利点
ここ最近 electron-log-rotate の開発をしていて、ログを S3 に上げていつでも見れるようにしようとしているんですが、
ログはどんどん肥大かするのを想定して、ログを削除する機能をつけました。
ただ、そうすると、過去のログが見れなくなってしまうが、 S3 は
「--delete」オプションを使用すると 同期元にない、同期先のファイルが削除されます。
S3 sync で s3からファイルを同期させる時の注意点 | Developers.IO
と、–delete オプションを付けないならば、ローカルのファイルを消したとしても S3 にはそれが反映されないので、ログは残っていくという感じです。
参考リンク
S3 sync で s3からファイルを同期させる時の注意点 | Developers.IO