サイトアイコン IT NEWS

【AWS】EC2からS3へ自動でログファイルを転送する方法

AWS CLIを使い、EC2に保存されている複数のファイルを、S3自動的に一括アップロードする方法をご紹介します。
今回は、EC2内にあるログファイル定期的にS3へバックアップするのが目的です。

目標と前提条件

出典:Amazon EC2(Amazon linux)から直接S3へのファイルコピー #AWS – Qiita

今回はEC2(OSはUbuntu)のcronを使って、ログファイル/var/log/配下)を自動でS3にコピーするコマンドを設定することが目標です。
ですので、Linuxコマンドをある程度理解していること、それから、コマンドで操作する場合はroot権限で実行することを前提とします。

また、予めバックアップ先であるS3バケットを作成しておいてください。
ここでは例として、s3://bucket/logs/に転送することにします。

IAMロールで許可を追加する

出典:Amazon EC2(Amazon linux)から直接S3へのファイルコピー #AWS – Qiita

まずは、IAMロールS3フルアクセスを許可する必要があるので、以下の手順にしたがって設定してください。

IAMロール設定手順
  • AWSで「IAM」を開く
  • 「ロール」からEC2に割り当てているロールを探してクリック
  • 「許可を追加」→「ポリシーをアタッチ」をクリック
  • 検索窓で「S3」と検索し、「AmazonS3FullAccess」をチェックして「許可を追加」ボタン押下
  • タグやロール名は任意で

AWS CLIのインストールと設定

EC2SSH接続して、以下のコマンドで最新版のAWS CLIダウンロードします。
AWS CLIをインストールするには、curlunzipコマンドを使用します

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

ダウンロードしたZIPを解凍します。

unzip awscliv2.zip

インストーラーを実行し、AWS CLIをインストールします。

./aws/install -i /usr/local/aws-cli -b /usr/local/bin

インストールが完了したら、バージョンを確認してみましょう!

aws --version

フォルダ内の全てのファイルをS3へ転送

まずは、EC2からS3にアクセスできるか確認してみましょう。
以下のコマンドを実行し、作成したS3のバケット内のファイル一覧が表示されればOKです。

# aws s3 ls s3://[バケット名]/[ディレクトリ名/...]
aws s3 ls s3://bucket/logs/

上記が確認できたら、EC2からS3アップロードしてみます。
ここでは/var/log/フォルダ内の全てのファイルを、S3に作成したbucketバケットlogsというフォルダにアップロードします。
その時、再起的にしたい(サブフォルダも含めたい)ので、--recursiveオプションを付けておきます。

# aws s3 cp [転送元のフォルダパス] [S3のバケット(&フォルダパス)] --recursive
aws s3 cp /var/log/ s3://bucket/logs/ --recursive

Cronで毎日自動でS3へアップロード

いつもの如く、上記で確認したコマンドcronにを設定していきます。
例として、毎日3:30にEC2からS3へアップロードする設定にします。

30 3    * * *   root    aws s3 cp /var/log/ s3://bucket/logs/ --recursive

設定が終わったら、設定を反映させるためにcronを再起動してください。

systemctl restart cron

cronの正しい書き方については、こちらをご参照ください。

実際にログファイルが転送されたかどうか確認してくださいね!
以上、お疲れ様でした!

著:佐竹 陽一, 著:山﨑 翔平, 著:小倉 大, 著:峯 侑資
¥2,970 (2023/10/24 16:06時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
著:うすだ ひさし
¥2,475 (2023/10/18 14:57時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング

モバイルバージョンを終了