AWS CLIを使い、EC2に保存されている複数のファイルを、S3へ自動的に一括アップロードする方法をご紹介します。
今回は、EC2内にあるログファイルを定期的にS3へバックアップするのが目的です。
目標と前提条件
今回はEC2(OSはUbuntu)のcronを使って、ログファイル(/var/log/
配下)を自動でS3にコピーするコマンドを設定することが目標です。
ですので、Linuxのコマンドをある程度理解していること、それから、コマンドで操作する場合はroot権限で実行することを前提とします。
また、予めバックアップ先であるS3のバケットを作成しておいてください。
ここでは例として、s3://bucket/logs/
に転送することにします。
IAMロールで許可を追加する
まずは、IAMのロールでS3のフルアクセスを許可する必要があるので、以下の手順にしたがって設定してください。
- AWSで「IAM」を開く
- 「ロール」からEC2に割り当てているロールを探してクリック
- 「許可を追加」→「ポリシーをアタッチ」をクリック
- 検索窓で「S3」と検索し、「AmazonS3FullAccess」をチェックして「許可を追加」ボタン押下
- タグやロール名は任意で
AWS CLIのインストールと設定
EC2にSSH接続して、以下のコマンドで最新版のAWS CLIをダウンロードします。
※AWS CLIをインストールするには、curl
とunzip
コマンドを使用します
1 |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" |
ダウンロードしたZIPを解凍します。
1 |
unzip awscliv2.zip |
インストーラーを実行し、AWS CLIをインストールします。
1 |
./aws/install -i /usr/local/aws-cli -b /usr/local/bin |
インストールが完了したら、バージョンを確認してみましょう!
1 |
aws --version |
フォルダ内の全てのファイルをS3へ転送
まずは、EC2からS3にアクセスできるか確認してみましょう。
以下のコマンドを実行し、作成したS3のバケット内のファイル一覧が表示されればOKです。
1 2 |
# aws s3 ls s3://[バケット名]/[ディレクトリ名/...] aws s3 ls s3://bucket/logs/ |
上記が確認できたら、EC2からS3にアップロードしてみます。
ここでは/var/log/
フォルダ内の全てのファイルを、S3に作成したbucket
バケットのlogs
というフォルダにアップロードします。
その時、再起的にしたい(サブフォルダも含めたい)ので、--recursive
オプションを付けておきます。
1 2 |
# aws s3 cp [転送元のフォルダパス] [S3のバケット(&フォルダパス)] --recursive aws s3 cp /var/log/ s3://bucket/logs/ --recursive |
Cronで毎日自動でS3へアップロード
いつもの如く、上記で確認したコマンドをcronにを設定していきます。
例として、毎日3:30にEC2からS3へアップロードする設定にします。
1 |
30 3 * * * root aws s3 cp /var/log/ s3://bucket/logs/ --recursive |
設定が終わったら、設定を反映させるためにcronを再起動してください。
1 |
systemctl restart cron |
cronの正しい書き方については、こちらをご参照ください。
実際にログファイルが転送されたかどうか確認してくださいね!
以上、お疲れ様でした!
コメント