GUI卒業!AWS CLIを使ってS3操作を自動化するための完全マニュアル
目次
1. AWS CLIの基本とセットアップ
業務の中でAWSを使ったファイル管理やデータ転送などを行う際、AWS CLI(コマンドラインインターフェース)を使うことで、GUI(画面を使う操作)より素早く、正確に作業ができるようになります。中でもS3は、ログ保存やバックアップ、データの引き渡しなどのために使うことが多く、CLIからの操作は効率化の大きな鍵となります。ここでは、CLIの導入と基本設定について順を追って説明していきます。
1-1 AWS CLIのインストール
AWS CLIは、Amazon Web Servicesを操作するための無料ツールです。これをローカルのパソコンにインストールすることで、Webブラウザを使わずにコマンド一つで様々な操作ができるようになります。インストール手順はWindows、Mac、Linuxで少し違いますが、基本的にはAWSの公式ページからインストーラをダウンロードし、それを実行するだけです。インストール後は、aws --versionというコマンドでインストールが正しくできたかをチェックできます。
1-2 AWS認証情報と設定の構成(aws configureの使い方)
CLIからAWSにアクセスするには、認証情報の設定が必要です。AWSでは"アクセスキー"と"シークレットキー"という2種類の文字列を組み合わせてユーザーの身元を確認します。aws configureコマンドを実行し、求められる項目に順に入力します。アクセスキーやリージョンを設定することで、CLIがどのアカウント・リージョンにアクセスすべきかを理解できるようになります。設定が正しくできれば、すぐにCLIからS3を始めとする他のAWSサービスを操作できます。
2. S3バケットの基本操作
S3では、ファイルを「バケット」と呼ばれる入れ物に分けて管理します。CLIを使うと、バケットの作成・一覧表示・削除といった基本操作を数秒で済ますことができます。ここでは、S3で最も基本となるバケット操作について学びましょう。
2-1 バケットの作成(aws s3 mb)
バケットを作成するにはaws s3 mbコマンドを使います。mbは「make bucket(バケットを作る)」の略です。このコマンドに続けて「s3://バケット名」と入力することで、指定した名前のバケットを一つ作成できます。例えばaws s3 mb s3://my-shared-backupと入力すれば、"my-shared-backup"という名前のS3バケットが作成されます。注意点として、バケット名は世界全体で一意(ほかと重ならない)でなければならず、既存のバケット名と同じ名前は使えません。
2-2 バケット一覧の表示(aws s3 ls)
今持っている全てのバケットを確認したいときは、aws s3 lsコマンドを実行します。すると、あなたのアカウントに紐づく全てのS3バケットが、作成日とともに一覧として表示されます。例えば、チームでの複数バケット管理において、他の担当者が作成したバケットを確認する場合などに役立ちます。また、タイポ(入力ミス)によって不要なバケットができていないか確認する際にも便利です。
2-3 バケットの削除(aws s3 rb)
不要になったバケットを削除する場合は、aws s3 rbを使います。rbというのは「remove bucket(バケットを削除)」の略です。ただし、削除する前にそのバケットの中を空にしておく必要があります。空でないバケットを削除しようとするとエラーになります。バケットの中身を強制的に消すには--forceオプションをつけてaws s3 rb s3://削除したいバケット名 --forceと入力します。この操作は取り消しできないので注意しましょう。
3. オブジェクトのアップロードとダウンロード
S3の主な目的はファイル(S3ではオブジェクトと呼びます)を安全に保存し管理することです。ローカル(自分のパソコン)とS3の間でデータをやりとりする操作は日常的に発生します。ここではCLIを使ったファイルのアップロード・ダウンロード方法を学びます。
3-1 ファイルのアップロード(aws s3 cp、sync)
ファイルをS3にアップロードするには2つのコマンドを使い分けます。aws s3 cpは「copy」の意味で、1つのファイルや特定のフォルダだけ転送したいときに使います。一方aws s3 syncは「同期」と言い、ローカルフォルダとS3バケットの中身を自動で合わせるために使います。例えば、バックアップ用やログファイルの定期転送にはsyncが最適です。cpには--recursive(全ファイル一括)オプションをつければ、フォルダごとアップロードすることもできます。
3-2 ファイルのダウンロード(aws s3 cp、sync)
アップロードとは逆に、S3からローカルへファイルを取り出したい場合もcpとsyncを使います。cpでs3://〜のURLとローカルの保存先ディレクトリを指定することで、単一ファイルのダウンロードが可能です。syncはローカルのフォルダとS3の指定パスを丸ごと一致させたいときに便利で、バックアップの復元時などによく使われます。このとき--deleteオプションをつけると、ローカルにないファイルはS3からも削除されるので注意して使いましょう。
3-3 プレフィックス(フォルダ構造)を活用した操作
S3には実際にはフォルダという概念はありませんが、「プレフィックス」を使ってフォルダのように見せる構造があります。例えば、"logs/2024/04/backup.log"というファイル名があれば、logs > 2024 > 04 という順でフォルダがあるかのように利用できます。CLIで操作する際はこのプレフィックスを正しく指定することで、必要な範囲だけを対象にしたアップロードやダウンロードが可能になります。特定の時間帯だけのログを取得するような場合にも非常に役立つ機能です。
4. オブジェクトの管理
S3に保存される個々のファイルは「オブジェクト」と呼ばれ、CLIを使って柔軟に管理することが可能です。単純な保存だけでなく、一覧の確認や削除、コピー・移動といった操作を通じて、S3ストレージをより効率的に活用できます。ここでは、オブジェクトに対する基本的な操作方法を紹介します。
4-1 ファイル一覧の表示(lsコマンド)
S3内のファイルを確認するには、aws s3 lsというコマンドを使います。「s3://バケット名/」をつけて実行すれば、その場所に保存されているファイルやプレフィックス(擬似的なフォルダ構造)を一覧で表示できます。さらに--recursiveオプションをつけることで、すべてのサブディレクトリも含めて中身を確認することが可能です。このコマンドは、バケット構成を把握したり、手動での誤削除を避けるための事前確認にも活用されます。
4-2 ファイルの削除(rmコマンド)
不要になったファイルはaws s3 rmコマンドで削除できます。rmは「remove(削除)」を意味し、対象ファイルのS3のパスを指定するだけで削除実行が可能です。また--recursiveオプションを付ければ、特定ディレクトリ配下のファイルをすべて一括で削除できます。ただし誤って本番環境のファイルなどを消してしまうリスクがあるため、lsでの事前確認が非常に重要です。また必要であればS3バージョニング機能と組み合わせて、安全性を高めることも検討しましょう。
4-3 ファイルの移動・コピー(mv、cpコマンド)
ファイルを他の場所に移したい場合にはmv(move)コマンドを使います。これは、オブジェクトを新しいパスに移動させ、元の場所からは削除する操作です。一方cp(copy)コマンドは対象ファイルを複製します。同じバケット内の別ディレクトリへコピーしたり、異なるバケットへのバックアップにも役立ちます。例えばlogファイルを月ごとや年ごとにアーカイブするような運用において、mvやcpを使い分けることが重要になります。
5. S3とローカルの同期処理
同じファイルを何度もアップロード・ダウンロードすることなく、一致を保ちたい時に便利なのがsyncコマンドを使った同期処理です。この機能を活用することで、バックアップスクリプトの自動化やファイルの一元管理が実現し、業務の効率が大きく向上します。
5-1 ローカル→S3の同期(aws s3 sync)
ローカル環境のフォルダを、S3バケットの指定ディレクトリと「同期」したい場合には、aws s3 syncローカルのパス s3://バケット名/ という形式を使います。このコマンドは、ローカルの変更箇所のみを対象にS3へアップロードするため、無駄な時間と通信量をカットできます。特に定期バックアップ用途では、cron(定期実行の仕組み)と組み合わせることで完全な自動化が可能になります。
5-2 S3→ローカルの同期
バックアップされたデータを復元したい場合、または別端末でファイルを取得する場合には、逆方向のsyncを使います。aws s3 sync s3://バケット名/ ローカルのパス という形式で操作します。S3に存在し、ローカルにないファイルだけがダウンロードされ、フォルダ一式を効率的に取得可能です。このようにsyncはS3とローカルとの「差分」だけを処理するため、業務上のファイル配信においてもとても有用です。
5-3 --deleteオプションの注意点
syncコマンドには--deleteという重要なオプションがあります。これは、同期対象に存在しないファイルを、相手側から削除するという出力内容の「対称化」処理です。例えば、ローカルに無いファイルをS3側から削除したいときに使います。ただし、このオプションを間違って使うと必要なデータを誤って消してしまうことになります。バックアップ用途では原則--deleteを使わず、事前にテスト環境で確認してから本番に適用することが大切です。
6. バージョニングと履歴管理
操作ミスや予期しない上書きによるデータの損失を防ぐため、S3には「バージョニング」という便利な機能があります。この機能を使えば、過去の状態にファイルを巻き戻すことが可能になります。データ保全の観点からも、企業のファイル管理運用において非常に大きな武器となります。
6-1 バージョニングの有効化/無効化
バージョニングとは、同じ名前のファイルを何度上書きしても、それぞれの状態を「バージョン」として記録・保存しておいてくれる機能です。バージョニングを有効にするにはaws s3api put-bucket-versioningというコマンドで、Status=Enabledを設定します。バージョニング無効に戻したい場合は同様のコマンドでStatus=Suspendedを指定します。一度有効化すると、過去のファイルバージョンがすべてS3上に残るため、ストレージ容量にも注意が必要です。
6-2 過去バージョンの確認方法
バージョン付きのバケットからファイルの過去バージョンを確認するには、aws s3api list-object-versionsというコマンドを使います。これにより個々のオブジェクトに対して、どのような変更履歴があるのかが一覧で取得可能です。表示されるVersionIdを使うことで、目的のバージョンだけをダウンロードしたり、復元作業を適切に行えます。また、ファイルの変更履歴の監査用途としても非常に有効です。
6-3 バージョン付きファイルの削除・復元
バージョニング機能を使っている場合、削除されたファイルは「削除マーカー」として保存され、実際にはデータが完全に削除されません。過去のバージョンを復元するには、VersionIdを指定して操作を行います。aws s3api delete-objectに--version-idをつけることで、特定バージョンだけを完全削除したり、その逆にVersionIdを指定してダウンロードすることで復元できます。ただし、ストレージの整理やガバナンスの観点から、不要なバージョンの整理も定期的に行うことが望ましいです。
7. アクセス権限とセキュリティ管理
S3は多くのユーザーや外部システムとデータをやりとりするため、安全なアクセス制御が求められます。AWS CLIを使えば、S3上のデータアクセスを細かく設定することができ、転送や削除などの操作制限も可能です。ここでは、セキュリティに関する基本的な設定とその使い方を紹介します。
7-1 バケットポリシーの設定
バケットポリシーとは、バケット単位でアクセス制御を定義するJSON形式のルール群です。例えば「このバケットは特定IPアドレスからのみアクセスを許可する」といった条件を指定できます。CLIからはaws s3api put-bucket-policyというコマンドを使って適用することができます。内容はJSONファイルで定義し、--policyオプションで読み込ませます。特に共有バケットで情報漏えいを防ぐためには、定期的なレビューと制限の厳格化が求められます。
7-2 プリサインURLの発行(aws s3 presign)
プリサインURLは、ログイン認証を通さずに一時的にファイルをダウンロードさせたい場合に活用できるリンクです。例えばパートナー企業にファイルを共有する際などに便利です。aws s3 presignコマンドを使い、--expires-inオプションで有効時間を秒単位で指定できます。万が一公開範囲の誤設定があっても、このURLは期限切れで無効化されるため、安全性の高い共有方法となります。ただし、このリンクが不用意に第三者へ伝わらないよう取り扱いには細心の注意が必要です。
7-3 オブジェクトACLの変更方法
オブジェクトACL(アクセス制御リスト)を使うと、オブジェクトごとに誰が読み取り/書き込みできるかを設定できます。aws s3api put-object-aclコマンドを使うことで、ファイル単位での操作制限が可能です。例えば社内のある部署だけが操作できるようにする、外部取引先からは読み取りのみ許可する、といった使い分けが実現できます。ただしACLはポリシーよりも管理が煩雑になりやすいので、必要最小限の範囲で利用しましょう。
8. よく使うオプションとTips集
S3操作をより効率的に、かつミスなく行うには、CLIに備わっている便利なオプションを知っておくことが重要です。ここでは、日常的に使えるTipsやCLI操作時の注意点を紹介します。
8-1 --recursive、--exclude、--includeの活用
cpやsyncコマンドと組み合わせてよく使われるのが--recursive、--exclude、--includeオプションです。--recursiveはフォルダ以下のすべてのファイルを対象とします。--excludeは「このパターンのファイルは除外」、--includeは「このパターンのファイルだけ対象」といった感じにフィルタできます。例えば「画像ファイルだけを同期する」といった場面で便利です。これらを正しく使うことで、転送ミスや過負荷通信を減らせます。
8-2 JSON形式での出力とフィルタリング(--query)
aws s3apiを含む多くのCLIコマンドでは、結果をJSON形式で出力できます。さらに--queryオプションを使うと、必要なデータだけを取り出すことができます。例えばオブジェクトのKey(ファイル名)だけを一覧表示したり、ファイルサイズが10MB以上のデータだけを抽出するなどが可能です。この柔軟な抽出が、シェルスクリプトとの連携や自動化において重要な役割を果たします。
8-3 S3 URIとパス指定の違いに注意
S3 CLIでは、ファイルやバケットを指定する際に、s3://から始まるURI(統一資源識別子)と、ローカルのファイルパス(例:./dataset/file.txt)を区別する必要があります。この違いを曖昧にすると、想定外の場所にファイルがアップロード・削除されたりと重大な事故に繋がります。常に対象がS3かローカルかを確認してからコマンドを実行しましょう。
9. 高度な操作と自動化
AWS CLIを使いこなすことで、S3に関する作業の多くを自動でこなすことが可能になります。ここでは、他サービスとの連携やスクリプトによる運用自動化の方法について紹介します。
9-1 Lambdaと連携したアップロードトリガー
AWS Lambdaは、特定のイベントに応じてコードを実行できるサービスです。S3と連携させることで、ファイルのアップロード時に自動でLambda関数を起動することが可能です。例えばログがアップロードされたら自動的にパース(解析)して保存する処理などが可能になります。CLIでは、バケットのイベント通知設定をaws s3api put-bucket-notification-configurationで行います。
9-2 S3イベント通知の設定
S3では、ファイルの追加や削除などのイベントが発生した際に通知を行う仕組みがあります。通知先としてはLambdaの他、SNS(メッセージ通知)やSQS(キュー管理)などが指定できます。通知を設定することで、異常検知や自動処理のトリガーとしても活用できます。これにより、手動確認の手間が大幅に削減できます。
9-3 CLIを用いたバッチ処理やスクリプト
日常的なS3作業を自動化するには、CLIをShellやPowerShellといったスクリプト内に組み込み、定期実行するのが一般的です。cronやWindowsタスクスケジューラなどと連携すれば、バックアップや同期、不要ファイルの削除といった作業を手間なく定期的に行なえます。CLIのオプションを組み合わせることで、整ったファイル運用が実現できます。
dx


