AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「Amazon S3」の「バッチオペレーション」を紹介し、例としてログが保管されているS3バケットから別のS3バケットにコピーする手順を解説する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する本連載「AWSチートシート」。
皆さんは、「Amazon Simple Storage Service」(S3)にある大量のファイルに対して何らかの一括処理を行いたいと思ったことはないでしょうか? 今回は、そういったことがフルマネージドで可能なS3の機能、「バッチオペレーション」について、その特徴と使い方を解説します。
※S3バッチオペレーションとS3の料金については下記公式の料金説明をご覧ください。
S3バッチオペレーションは次の特徴を持ったS3の機能です。
まとめると、「S3にある大量のオブジェクトに対して、フルマネージドに処理を行える」機能です。
バッチオペレーションを利用するには下記の設定が必要です。
ここからは具体的な設定内容を見ていきます。例として、ログが保管されているS3バケットから別のS3バケットにコピーするシナリオで手順を紹介します。
構成するリソースは下図の通りです。
バッチオペレーションでの処理は次の通りです。
送信元のS3バケットを下記の通り作成してください(※{アカウントID}は自身のAWSアカウントIDで置き換えてください)。
バケット名以外はデフォルトのままで問題ありません。
加えて、作成したバケットの中に、適当なテスト用のテキストファイルを何個か
アップロードをしておいてください。
今度は、送信先のS3バケットを下記の通りに作成してください。
こちらも同様に、バケット名以外はデフォルトのままで問題ありません。
今回はバッチオペレーションに必要な「マニフェストファイル」の出力先、さらにはバッチオペレーションの処理結果ファイルを保管するので、それ用にS3バケットを作成します。
こちらも同様にバケット名以外はデフォルトのままで問題ありません。
「batch-ope-{アカウントID}」バケットでマニフェストファイルの出力を設定します。
対象のS3バケットの「管理」タブから「インベントリ設定」で「インベントリ設定の作成」をクリックし、下記内容で設定します。
他のオプション設定「インベントリレポートの暗号化」「追加のメタデータフィールド」についてはデフォルトのままで作成してください。
設定が正しければ、下記のように「最後のエクスポート」でエクスポートされた最後の日時が記録されます(※日次で出力されるので設定後、1日空けて確認してください)。
インベントリ情報として下記4ファイルが出力されるはずです。
ここからバッチオペレーションの設定です。
S3のメニューから「バッチオペレーション」を選択し、「ジョブの作成」を選択して下記のように設定してください。
他はデフォルトのまま「次へ」を押します。
下記の通り設定してください。
他はデフォルトのまま「次へ」を押します。
下記の通り設定してください。
「追加のオプションを設定」の際に、アクセス許可の設定でIAMロールの作成が必要になるので、ここでいったん「AWS Identity and Access Management」(IAM)で作業します。
必要なポリシーの内容は、「追加のオプションを設定」の「アクセス許可」で「IAMロールのポリシーテンプレートとIAM信頼ポリシーを表示」をクリックすると「IAMロールのポリシーテンプレート」「IAM信頼ポリシー」が表示されるので、それを利用します。
要注意ポイントとして、ポリシー内で「{{SourceBucket}}」となっている部分はログ保管バケット名の「batch-ope-{アカウントID}」で置き換えます。ここを修正しないとバッチオペレーションのジョブ実行が失敗します。ロール名は好きに付けてもらって問題ありませんが、筆者は「s3-batchope-role」で作成しました。
「追加のオプションを設定」での設定に戻り、次のように設定します。
他はデフォルトで「次へ」を押します。
各種設定を確認し、問題なければ「ジョブの作成」をクリックします。
バッチオペレーション画面で作成したジョブIDのステータスが「実行のための確認待ち」になったら、選択して「ジョブを実行」をクリックします。
ジョブの詳細画面に遷移するので確認して問題なければ「ジョブを実行」をクリックします。ジョブのステータスが「アクティブ」になり、最終的に「完了済み」になれば完了です。
「失敗した合計(率)」が「0」になっていれば全ての対象が問題なく処理されたことになります。
まず「ログ送信先保管バケット」を確認して、マニフェストファイルに記載されている対象が全てコピーされていることを確認します。
次に、処理結果のレポートファイルを確認して処理が全て問題なく成功していることを確認します。レポートファイルはレポート処理出力先のバケットに「job-{ジョブID}」のパス以下にCSVファイルとして出力されます。
ファイルの中身としては、下記のように、対象ファイルごとの結果が記載されます。
もし処理が全て、もしくは一部失敗している場合は、下記3点を確認します。
1、2、3はいずれも処理ステータスコードは「403」になります。1、2の場合は全てのファイルに対して失敗、3の場合は存在しないもののみ失敗扱いとなるはずなので、それをヒントに問題の切り分けと特定を行います。
今回はS3バッチオペレーションを紹介しましたが、いかがでしょうか。大量のファイルに対して組み込みで用意された処理、もしくは必要に応じてLambda関数でカスタム処理を、バッチ基盤、オペレーションの管理などを気にせず、必要な設定だけで行えるのは、「便利だ」と感じていただけたのではないでしょうか。ぜひ実務に利用してみてください。
株式会社システムシェアード 開発事業部所属。
ここ数年はAWSを利用したシステムの設計、開発、構築を行っています。
仕事以外では、AWSの資格をあと2つでコンプリートできるので制覇に向けて頑張っています!
Copyright © ITmedia, Inc. All Rights Reserved.