S3 バッチオペレーションジョブの作成
Amazon S3 バッチオペレーションを使用すると、特定の Amazon S3 オブジェクトのリストに対して大規模なバッチオペレーションを実行できます。このセクションでは、S3 バッチ操作ジョブの作成に必要な情報と CreateJob
リクエストの結果について説明します。また、AWS Command Line Interface (AWS CLI)、AWS SDK for Java を使用したバッチオペレーションジョブの作成手順についても説明します。
S3 バッチオペレーションジョブを作成するときに、すべてのタスクまたは失敗したタスクについてのみ完了レポートをリクエストできます。少なくとも 1 つのタスクが正常に呼び出される限り、S3 バッチオペレーションは、完了、失敗、またはキャンセルされたジョブに関するレポートを生成します。詳細については、「例: S3 バッチ操作完了レポート」を参照してください。
次の動画では、Amazon S3 コンソールを使用してバッチオペレーションジョブを作成する方法の簡単なデモンストレーションを提供しています
バッチ操作ジョブのリクエストの要素
S3 バッチ操作ジョブを作成するには、次の情報を指定する必要があります。
- オペレーション
-
S3 バッチ操作でマニフェストのオブジェクトに対して実行するオペレーションを指定します。オペレーションのタイプごとに、そのオペレーションに固有のパラメータを受け入れます。バッチオペレーションを使用すると、オペレーションを一括で実行でき、各オブジェクトに対してそのオペレーションを 1 つずつ実行した場合と同じ結果が得られます。
- マニフェスト
-
マニフェストは、S3 バッチオペレーションで指定したアクションを実行するすべてのオブジェクトのリストです。バッチオペレーションジョブのマニフェストは、次の方法で指定できます。
-
カスタマイズした CSV 形式の独自のオブジェクトリストを手動で作成します。
-
既存の CSV-形式の S3 インベントリを使用したデータのカタログ化と分析 レポートを選択します。
-
直接バッチオペレーションでは、ジョブの作成時に指定したオブジェクトフィルター条件に基づいてマニフェストを自動的に生成します。このオプションは、Amazon S3 コンソールで作成したバッチレプリケーションジョブ、AWS CLI、AWS SDK、または Amazon S3 REST API を使用して作成した任意のジョブタイプで使用できます。
-
マニフェストの指定方法を問わず、リスト自体は汎用バケットに保存する必要があります。バッチオペレーションでは、既存のマニフェストをディレクトリバケットからインポートしたり、生成されたマニフェストをディレクトリバケットに保存したりすることはできません。ただし、マニフェスト内に記述されたオブジェクトはディレクトリバケットに保存できます。詳細については、「ディレクトリバケット」を参照してください。
-
マニフェスト内のオブジェクトがバージョニング対象のバケット内にある場合は、そのオブジェクトのバージョン ID を指定すると特定のバージョンに対してオペレーションが実行されます。バージョン ID が指定されていない場合、バッチオペレーションはオブジェクトの最新バージョンに対してオペレーションを実行します。マニフェストにバージョン ID フィールドが含まれている場合は、マニフェスト内にあるすべてのオブジェクトのバージョン ID を指定する必要があります。
詳細については、「マニフェストの指定」を参照してください。
- 優先度
-
ジョブの優先順位を使用して、自分のアカウントで実行中の他のユーザーに対するこのジョブの相対的な優先順位を示します。番号が大きいほど、優先度が高いことを表します。
ジョブの優先度は、同じアカウントとリージョンの他のジョブに設定された優先度に相対して解釈されます。お客様に合った番号付け体系を選択できます。例えば、すべての [復元] (RestoreObject
) ジョブに優先度 1、すべての [コピー] (CopyObject
) ジョブに優先度 2、すべての [アクセスコントロールリスト (ACL) に置き換える] (PutObjectAcl
) ジョブに優先度 3 を割り当てることができます。
S3 バッチオペレーションでは、優先度の数字に従ってジョブに優先順位が付けられます。ただし、厳密に順序付けされるとは限りません。そのため、いずれかのジョブをその他のジョブよりも前に開始または終了させるためにジョブの優先度は使用すべきではありません。厳密な順序付けする必要がある場合は、1 つのジョブが終了するまで待ってから次のジョブを開始します。
- RoleArn
-
ジョブを実行する AWS Identity and Access Management (IAM) ロールを指定します。使用する IAM ロールには、そのジョブで指定されているオペレーションを実行するための十分なアクセス許可が必要です。例えば、CopyObject
ジョブを実行するには、IAM ロールに、ソースバケットに対する s3:GetObject
アクセス許可と、送信先バケットに対する s3:PutObject
アクセス許可が必要です。このロールには、マニフェストを読み取り、ジョブ完了レポートを書き込むためのアクセス許可も必要です。
IAM ロールの詳細については、「IAM ユーザーガイド」の「IAM ロール」を参照してください。
Amazon S3 のアクセス許可の詳細については、「Amazon S3 のポリシーアクション」を参照してください。
- レポートを行う
-
S3 バッチ操作で完了レポートを生成するかどうかを指定します。ジョブ完了レポートをリクエストする場合、この要素にレポートのパラメータも指定する必要があります。必要な情報には以下が含まれます。
完了レポートは、常に Amazon S3 マネージドキー (SSE-S3) によるサーバー側の暗号化で暗号化されます。
- [タグ (省略可能)]
-
タグを追加することで、S3 バッチ操作ジョブへのラベル付けとアクセスの制御を実行できます。タグを使用して、バッチオペレーションジョブの担当者を識別したり、ユーザーがバッチオペレーションジョブを操作する方法を制御したりできます。ジョブタグがあることで、ユーザーによるジョブのキャンセル、確認状態にあるジョブの有効化、ジョブの優先度レベルの変更を許可したり制限したりできます。例えば、ジョブが "Department=Finance"
タグ付きで作成されている場合、CreateJob
オペレーションを呼び出すアクセス許可をユーザーに付与できます。
タグをアタッチしてジョブを作成し、後でジョブにタグを追加できます。
詳細については、「タグを使用したアクセスのコントロールとジョブのラベル付け」を参照してください。
- Description (オプション)
-
ジョブを追跡および監視するために、最大 256 文字の説明を指定することもできます。Amazon S3 では、ジョブに関する情報を返すか、Amazon S3 コンソールにジョブの詳細を表示するたびに、この説明が含まれます。これによって、入力した説明に応じて簡単にジョブを並べ替えたりフィルタリングしたりできます。説明は一意である必要はないので、類似したジョブのグループを追跡するのに役立つように、説明をカテゴリとして使用することができます (「Weekly Log Copy Jobs」など)。
マニフェストの指定
マニフェストは、Amazon S3 が動作するオブジェクトキーを含む Amazon S3 オブジェクトです。次のいずれかの方法でマニフェストを提供できます。
Amazon S3 バッチオペレーションは、クロスリージョンマニフェストの生成をサポートしていません。
マニフェストの指定方法を問わず、リスト自体は汎用バケットに保存する必要があります。バッチオペレーションでは、既存のマニフェストをディレクトリバケットからインポートしたり、生成されたマニフェストをディレクトリバケットに保存したりすることはできません。ただし、マニフェスト内に記述されたオブジェクトはディレクトリバケットに保存できます。詳細については、「ディレクトリバケット」を参照してください。
マニフェストファイルの作成
ジョブのマニフェストを手動で作成するには、マニフェストオブジェクトキー、ETag (エンティティタグ)、オプションでバージョン ID を CSV 形式のリストで指定します。マニフェストの内容は URL エンコードされている必要があります。
デフォルトでは、Amazon S3 は、Amazon S3 マネージドキー (SSE-S3) を使用したサーバー側暗号化を自動的に使用して、Amazon S3 バケットにアップロードされるマニフェストを暗号化します。顧客指定のキーを使用したサーバー側の暗号化 (SSE-C) を使用するマニフェストはサポートされていません。AWS Key Management Service (AWS KMS) キー (SSE-KMS) でサーバー側の暗号化を使用するマニフェストは、CSV 形式のインベントリレポートを使用する場合にのみサポートされます。AWS KMS を使用したマニフェストの手動作成はサポートされていません。
マニフェストには、各オブジェクトのバケット名、オブジェクトキー、およびオプションでオブジェクトバージョンを含める必要があります。マニフェストのその他のフィールドは、S3 バッチ操作では使用されません。
マニフェスト内のオブジェクトがバージョニング対象のバケット内にある場合は、そのオブジェクトのバージョン ID を指定すると特定のバージョンに対してオペレーションが実行されます。バージョン ID が指定されていない場合、バッチオペレーションはオブジェクトの最新バージョンに対してオペレーションを実行します。マニフェストにバージョン ID フィールドが含まれている場合は、マニフェスト内にあるすべてのオブジェクトのバージョン ID を指定する必要があります。
CSV 形式のマニフェスト(バージョン ID なし)の例を以下に示します。
amzn-s3-demo-bucket1,objectkey1
amzn-s3-demo-bucket1,objectkey2
amzn-s3-demo-bucket1,objectkey3
amzn-s3-demo-bucket1,photos/jpgs/objectkey4
amzn-s3-demo-bucket1,photos/jpgs/newjersey/objectkey5
amzn-s3-demo-bucket1,object%20key%20with%20spaces
バージョン ID を含む CSV 形式のマニフェストの例は次のとおりです。
amzn-s3-demo-bucket1,objectkey1,PZ9ibn9D5lP6p298B7S9_ceqx1n5EJ0p
amzn-s3-demo-bucket1,objectkey2,YY_ouuAJByNW1LRBfFMfxMge7XQWxMBF
amzn-s3-demo-bucket1,objectkey3,jbo9_jhdPEyB4RrmOxWS0kU0EoNrU_oI
amzn-s3-demo-bucket1,photos/jpgs/objectkey4,6EqlikJJxLTsHsnbZbSRffn24_eh5Ny4
amzn-s3-demo-bucket1,photos/jpgs/newjersey/objectkey5,imHf3FAiRsvBW_EHB8GOu.NHunHO1gVs
amzn-s3-demo-bucket1,object%20key%20with%20spaces,9HkPvDaZY5MVbMhn6TMn1YTb5ArQAo3w
既存のマニフェストファイルの指定
次の 2 つの形式のいずれかを使用して、ジョブ作成リクエストのマニフェストファイルを指定できます。
-
Amazon S3 インベントリレポート - CSV 形式の Amazon S3 インベントリレポートである必要があります。インベントリレポートに関連付けられた manifest.json
ファイルを指定する必要があります。インベントリレポートの詳細については、「S3 インベントリを使用したデータのカタログ化と分析」を参照してください。インベントリレポートにバージョン ID が含まれている場合、S3 バッチ操作は特定のオブジェクトのバージョンに対して実行されます。
-
S3 バッチオペレーションは、SSE-KMS で暗号化された CSV インベントリレポートをサポートしています。
-
SSE-KMS で暗号化されたインベントリレポートマニフェストを送信する場合、IAM ポリシーには、"kms:Decrypt"
、manifest.json
オブジェクトのための "kms:GenerateDataKey"
、関連するすべての CSV データ ファイルに対するアクセス許可が含まれている必要があります。
-
CSV ファイル – ファイルの各行には、バケット名とオブジェクトのキーを含める必要があります。また、任意でオブジェクトのバージョンを含めることができます。オブジェクトキーは、次の例に示されているように、URL エンコードする必要があります。マニフェストには、すべてのオブジェクトのバージョン ID を含めるか、すべてのオブジェクトのバージョン ID を省略する必要があります。CSV マニフェスト形式の詳細については、「Amazon Simple Storage Service API リファレンス」の「JobManifestSpec」を参照してください。.
S3 バッチオペレーションは、SSE-KMS で暗号化された CSV マニフェストファイルをサポートしていません。
手動で作成したマニフェストとバージョニング対応のバケットを使用する場合は、そのオブジェクトのバージョン ID を指定することをお勧めします。ジョブを作成すると、S3 バッチ操作はジョブを実行する前にマニフェスト全体を解析します。ただし、これによってバケットの状態は「スナップショット」されません。
マニフェストには数十億のオブジェクトが含まれる可能性があるため、ジョブの実行に時間がかかる可能性があり、その結果ジョブが動作するオブジェクトのバージョンに影響を与える場合があります。ジョブの実行中にオブジェクトを新しいバージョンで上書きして、そのオブジェクトのバージョン ID を指定しなかったとします。この場合、Amazon S3 は、ジョブの作成時に存在していたバージョンではなく、オブジェクトの最新バージョンに対してオペレーションを実行します。この動作を回避する唯一の方法は、マニフェスト内でリストされたオブジェクトにバージョン ID を指定することです。
マニフェストの自動的生成
ジョブの作成時に指定したオブジェクトフィルター条件に基づいてマニフェストを自動的に生成するように Amazon S3 に指示できます。このオプションは、Amazon S3 コンソールで作成したバッチレプリケーションジョブ、AWS CLI、AWS SDK、または Amazon S3 REST API を使用して作成した任意のジョブタイプで使用できます。バッチレプリケーションの詳細については、「バッチレプリケーションを使用した既存のオブジェクトのレプリケーション」を参照してください。
マニフェストを自動的に生成するには、ジョブ作成リクエストの一環として次の要素を指定します。
-
バケット所有者や Amazon リソースネーム (ARN) など、ソースオブジェクトが含まれるバケットに関する情報
-
マニフェストファイルを作成するためのフラグ、出力バケット所有者、ARN、プレフィックス、ファイル形式、暗号化タイプなど、マニフェスト出力に関する情報
-
作成日、キー名、サイズ、ストレージクラスでオブジェクトをフィルタリングするためのオプションの条件 レプリケーションジョブの場合は、タグを使用してオブジェクトをフィルタリングすることもできます。
オブジェクトフィルターの条件
自動生成されたマニフェストに含まれるオブジェクトのリストをフィルタリングするには、次の条件を指定できます。詳細については、「Amazon S3 API リファレンス」の「JobManifestGeneratorFilter」を参照してください。
- CreatedAfter
-
指定した場合、生成されたマニフェストには、この時間以降に作成されたソースバケットオブジェクトのみが含まれます。
- CreatedBefore
-
指定した場合、生成されたマニフェストには、この時間以降に作成されたソースバケットオブジェクトのみが含まれます。
- EligibleForReplication
-
指定した場合、生成されたマニフェストには、ソースバケットのレプリケーション設定に従ってレプリケーションの対象となるオブジェクトのみが含まれます。
- KeyNameConstraint
-
指定された場合、生成されたマニフェストには、オブジェクトキーが MatchAnySubstring、MatchAnyPrefix、MatchAnySuffix に指定された文字列制約と一致するソースバケットオブジェクトのみが含まれます。
MatchAnySubstring – 指定した場合、指定された文字列がオブジェクトキー文字列内のいずれかの部分に出現する場合、生成されたマニフェストにそのオブジェクトが含まれます。
MatchAnyPrefix – 指定すると、指定された文字列がオブジェクトキー文字列の先頭に現れる場合、生成されたマニフェストにオブジェクトが含まれます。
MatchAnySuffix – 指定した場合、指定された文字列がオブジェクトキー文字列の末尾に出現する場合、生成されたマニフェストにオブジェクトが含まれます。
- MatchAnyStorageClass
-
指定した場合、生成されたマニフェストには、指定されたストレージクラスで保存されているソースバケットオブジェクトのみが含まれます。
- ObjectReplicationStatuses
-
指定した場合、生成されたマニフェストには、指定されたレプリケーションステータスのいずれかを持つソースバケットオブジェクトのみが含まれます。
- ObjectSizeGreaterThanBytes
-
指定した場合、生成されたマニフェストには、ファイルサイズが指定されたバイト数以上のソースバケットオブジェクトのみが含まれます。
- ObjectSizeLessThanBytes
-
指定した場合、生成されたマニフェストには、ファイルサイズが指定されたバイト数未満のソースバケット オブジェクトのみが含まれます。
マニフェストが自動的に生成されたほとんどのジョブはクローンの作成はできません。バッチ レプリケーション ジョブはKeyNameConstraint
、MatchAnyStorageClass
、ObjectSizeGreaterThanBytes
、または ObjectSizeLessThanBytes
マニフェストフィルター条件を使用する場合を除き、クローンを作成できます。
マニフェスト条件を指定する構文は、ジョブの作成に使用する方法に応じて異なります。例については、「ジョブの作成」を参照してください。
ジョブの作成
Amazon S3 コンソール、AWS CLI、AWS SDK、または Amazon S3 REST API を使用して S3 バッチオペレーションジョブを作成できます。
ジョブリクエストの作成の詳細については、バッチ操作ジョブのリクエストの要素 を参照してください。
前提条件
バッチオペレーションジョブを作成する前に、関連するアクセス許可が設定されていることを確認します。詳細については、「バッチオペレーションに対するアクセス許可の付与」を参照してください。
バッチジョブを作成するには
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。
-
ページ上部にあるナビゲーションバーで、現在表示されている AWS リージョン の名前をクリックします。次に、ジョブを作成するリージョンを選択します。
コピーオペレーションの場合は、コピー先バケットと同じリージョンにジョブを作成する必要があります。その他すべてのオペレーションの場合は、マニフェスト内のオブジェクトと同じリージョンにジョブを作成する必要があります。
-
Amazon S3 コンソールのナビゲーションペインで [バッチオペレーション] を選択します。
-
[ジョブの作成] を選択します。
-
ジョブを作成する AWS リージョン を確認します。
-
[マニフェストの形式] で、使用するマニフェストオブジェクトのタイプを選択します。
-
[S3 inventory report (S3 インベントリレポート)] を選択する場合、CSV 形式のインベントリレポートの一部として Amazon S3 が生成する manifest.json オブジェクトへのパスと、最新のバージョンではなく特定のバージョンを使用する場合には、オプションでマニフェストオブジェクトのバージョン ID を入力します。
-
[CSV] を選択する場合は、CSV 形式のマニフェストオブジェクトへのパスを入力します。マニフェストオブジェクトは、コンソールで説明される形式に従う必要があります。最新のバージョンではなく特定のバージョンを使用する場合には、マニフェストオブジェクトのバージョン ID をオプションで含めることもできます。
Amazon S3 コンソールは、バッチレプリケーションジョブのみの自動マニフェスト生成をサポートします。その他のすべてのジョブタイプで、指定したフィルタ条件に基づいて Amazon S3 がマニフェストを自動的に生成するようにするには、AWS CLI、AWS SDK、または Amazon S3 REST API を使用してジョブを設定する必要があります。
-
[Next (次へ)] を選択します。
-
[Operation (オペレーション)] で、マニフェストに登録されたすべてのオブジェクトを実行するオペレーションを選択します。選択したオペレーションに関する情報を入力して、[次へ] を選択します。
-
[追加オプションの設定] に関する情報を入力して、[次へ] を選択します。
-
[Review (確認)] で、設定を確認します。変更が必要な場合は、[戻る] を選択します。それ以外の場合は、[ジョブの作成] を選択します。
AWS CLI を使用してバッチオペレーションジョブを作成するには、既存のマニフェストを指定するか、マニフェストを自動的に生成するかに応じて、次のいずれかの例を選択します。
- Specify manifest
-
AWS CLI を使用して、既存のマニフェストファイルにリストされているオブジェクトに対して動作する S3 バッチオペレーション S3PutObjectTagging
ジョブを作成する方法は、次の例のとおりです。
マニフェストを指定してバッチオペレーション S3PutObjectTagging
ジョブを作成するには
-
次のコマンドを使用して AWS Identity and Access Management (IAM) ロールを作成してから、IAM ポリシーを作成して関連するアクセス許可を割り当てます。次のロールとポリシーは、オブジェクト タグを追加するための Amazon S3 アクセス許可を付与します。このアクセス許可は、以降のステップでジョブを作成する際に必要になります。
-
次のコマンド例を使用して、バッチオペレーションで使用する IAM ロールを作成します。このコマンド例を使用するには、S3BatchJobRole
をロールにつける名前に置き換えます。
aws iam create-role \
--role-name S3BatchJobRole
\
--assume-role-policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}'
ロールの Amazon リソースネーム (ARN) を記録します。ジョブの作成時にこの ARN が必要となります。
-
次のコマンド例を使用して、必要なアクセス許可を持つ IAM ポリシーを作成して、前の手順で作成した IAM ロールにアタッチします。必要なアクセス権限の詳細については、「バッチオペレーションに対するアクセス許可の付与」を参照してください。
このサンプルコマンドを使用するには、user input
placeholders
を次のとおり置き換えます。
-
S3BatchJobRole
は、IAM ロール名に置き換えます。この名前が以前に使用した名前と一致することを確認します。
-
PutObjectTaggingBatchJobPolicy
は、IAM ポリシーにつける名前に置き換えます。
-
amzn-s3-demo-destination-bucket
は、タグを付けるオブジェクトがあるバケット名と置き換えます。
-
amzn-s3-demo-manifest-bucket
は、マニフェストがあるバケットの名前と置き換えます。
-
amzn-s3-demo-completion-report-bucket
は、完了レポートの配信先のバケット名と置き換えます。
aws iam put-role-policy \
--role-name S3BatchJobRole
\
--policy-name PutObjectTaggingBatchJobPolicy
\
--policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket
/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
",
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
/*"
]
}
]
}'
-
次のコマンド例を使用して、S3PutObjectTagging
ジョブを作成します。
manifest.csv
ファイルは、バケットのリストとオブジェクトキー値を提供します。このジョブは、マニフェストで識別されたオブジェクトに指定されたタグを適用します。ETag
は manifest.csv
オブジェクトの ETag であり、Amazon S3 コンソールから取得できます。このリクエストは no-confirmation-required
パラメータを指定するため、update-job-status
コマンドで確認しなくてもジョブを実行できます。詳細については、AWS CLI コマンドリファレンスの「create-job」を参照してください。
このコマンドの例を実行するには、user input
placeholders
をユーザー自身の情報に置き換えます。IAM-role
を先ほど作成した IAM ロールの ARN に置き換えます。
aws s3control create-job \
--region us-west-2
\
--account-id acct-id
\
--operation '{"S3PutObjectTagging": { "TagSet": [{"Key":"keyOne
", "Value":"ValueOne
"}] }}' \
--manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20180820
","Fields":["Bucket","Key"]},"Location":{"ObjectArn":"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/manifest.csv
","ETag":"60e460c9d1046e73f7dde5043ac3ae85
"}}' \
--report '{"Bucket":"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
","Prefix":"final-reports
", "Format":"Report_CSV_20180820
","Enabled":true,"ReportScope":"AllTasks"}' \
--priority 42
\
--role-arn IAM-role
\
--client-request-token $(uuidgen) \
--description "job description
" \
--no-confirmation-required
応答として、Amazon S3 はジョブ ID (など 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c
) を返します。ジョブの識別、モニタリング、変更にはこのジョブ ID が必要です。
- Generate manifest
-
オブジェクトフィルター条件に基づいてマニフェストを自動的に生成する S3 バッチオペレーション S3DeleteObjectTagging
ジョブを作成する方法は、次の例のとおりです。この条件には、作成日、キー名、サイズ、ストレージクラス、タグが含まれます。
マニフェストを生成してバッチオペレーション S3DeleteObjectTagging
ジョブを作成するには
-
次のコマンドを使用して AWS Identity and Access Management (IAM) ロールを作成してから、IAM ポリシーを作成してアクセス許可を割り当てます。次のロールとポリシーは、オブジェクト タグを削除するための Amazon S3 アクセス許可を付与します。このアクセス許可は、以降のステップでジョブを作成する際に必要になります。
-
次のコマンド例を使用して、バッチオペレーションで使用する IAM ロールを作成します。このコマンド例を使用するには、S3BatchJobRole
をロールにつける名前に置き換えます。
aws iam create-role \
--role-name S3BatchJobRole
\
--assume-role-policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}'
ロールの Amazon リソースネーム (ARN) を記録します。ジョブの作成時にこの ARN が必要となります。
-
次のコマンド例を使用して、必要なアクセス許可を持つ IAM ポリシーを作成して、前の手順で作成した IAM ロールにアタッチします。必要なアクセス権限の詳細については、「バッチオペレーションに対するアクセス許可の付与」を参照してください。
このサンプルコマンドを使用するには、user input
placeholders
を次のとおり置き換えます。
-
S3BatchJobRole
は、IAM ロール名に置き換えます。この名前が以前に使用した名前と一致することを確認します。
-
DeleteObjectTaggingBatchJobPolicy
は、IAM ポリシーにつける名前に置き換えます。
-
amzn-s3-demo-destination-bucket
は、タグを付けるオブジェクトがあるバケット名と置き換えます。
-
amzn-s3-demo-manifest-bucket
は、マニフェストの保存先バケット名と置き換えます。
-
amzn-s3-demo-completion-report-bucket
は、完了レポートの配信先のバケット名と置き換えます。
aws iam put-role-policy \
--role-name S3BatchJobRole
\
--policy-name DeleteObjectTaggingBatchJobPolicy
\
--policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersionTagging"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket
/*"
},
{
"Effect":"Allow",
"Action":[
"s3:PutInventoryConfiguration"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket
"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
",
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
/*",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*"
]
}
]
}'
-
次のコマンド例を使用して、S3DeleteObjectTagging
ジョブを作成します。
この例では、--report
セクション内の値によって、生成されるジョブレポートのバケット、プレフィックス、形式、範囲が指定されます。--manifest-generator
セクションでは、ジョブの対象となるオブジェクトを含むソースバケットに関する情報、ジョブに対して生成されるマニフェスト出力リストに関する情報、マニフェストに含めるオブジェクトの範囲を作成日、名前の制約、サイズ、ストレージクラスによって絞り込むためのフィルター条件を指定します。このコマンドでは、ジョブの優先度、IAM ロール、AWS リージョン も指定します。
詳細については、AWS CLI コマンドリファレンスの「create-job」を参照してください。
このコマンドの例を実行するには、user input
placeholders
をユーザー自身の情報に置き換えます。IAM-role
を先ほど作成した IAM ロールの ARN に置き換えます。
aws s3control create-job \
--account-id 012345678901
\
--operation '{
"S3DeleteObjectTagging": {}
}' \
--report '{
"Bucket":"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
",
"Prefix":"reports
",
"Format":"Report_CSV_20180820",
"Enabled":true
,
"ReportScope":"AllTasks
"
}' \
--manifest-generator '{
"S3JobManifestGenerator": {
"ExpectedBucketOwner": "012345678901
",
"SourceBucket": "arn:aws:s3:::amzn-s3-demo-source-bucket
",
"EnableManifestOutput": true,
"ManifestOutputLocation": {
"ExpectedManifestBucketOwner": "012345678901
",
"Bucket": "arn:aws:s3:::amzn-s3-demo-manifest-bucket
",
"ManifestPrefix": "prefix
",
"ManifestFormat": "S3InventoryReport_CSV_20211130"
},
"Filter": {
"CreatedAfter": "2023-09-01
",
"CreatedBefore": "2023-10-01
",
"KeyNameConstraint": {
"MatchAnyPrefix": [
"prefix
"
],
"MatchAnySuffix": [
"suffix
"
]
},
"ObjectSizeGreaterThanBytes": 100
,
"ObjectSizeLessThanBytes": 200
,
"MatchAnyStorageClass": [
"STANDARD
",
"STANDARD_IA
"
]
}
}
}' \
--priority 2
\
--role-arn IAM-role
\
--region us-east-1
応答として、Amazon S3 はジョブ ID (など 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c
) を返します。ジョブの識別、モニタリング、変更にはこのジョブ ID が必要です。
AWS SDK for Java を使用してバッチオペレーションジョブを作成するには、既存のマニフェストを指定するか、マニフェストを自動的に生成するかに応じて、次のいずれかの例を選択します。
- Specify manifest
-
既存のマニフェスト ファイルにリストされているオブジェクトに対して動作する S3 バッチオペレーション S3PutObjectTagging
ジョブを作成する方法は、次の例のとおりです。この例を実行するには、user
input placeholders
をユーザー自身の情報に置き換えます。
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.*;
import java.util.UUID;
import java.util.ArrayList;
import static com.amazonaws.regions.Regions.US_WEST_2
;
public class CreateJob {
public static void main(String[] args) {
String accountId = "Account ID
";
String iamRoleArn = "IAM Role ARN
";
String reportBucketName = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
";
String uuid = UUID.randomUUID().toString();
ArrayList tagSet = new ArrayList<S3Tag>();
tagSet.add(new S3Tag().withKey("keyOne
").withValue("ValueOne
"));
try {
JobOperation jobOperation = new JobOperation()
.withS3PutObjectTagging(new S3SetObjectTaggingOperation()
.withTagSet(tagSet)
);
JobManifest manifest = new JobManifest()
.withSpec(new JobManifestSpec()
.withFormat("S3BatchOperations_CSV_20180820
")
.withFields(new String[]{
"Bucket
", "Key
"
}))
.withLocation(new JobManifestLocation()
.withObjectArn("arn:aws:s3:::my_manifests/manifest.csv
")
.withETag("60e460c9d1046e73f7dde5043ac3ae85
"));
JobReport jobReport = new JobReport()
.withBucket(reportBucketName)
.withPrefix("reports
")
.withFormat("Report_CSV_20180820
")
.withEnabled(true)
.withReportScope("AllTasks
");
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2
)
.build();
s3ControlClient.createJob(new CreateJobRequest()
.withAccountId(accountId)
.withOperation(jobOperation)
.withManifest(manifest)
.withReport(jobReport)
.withPriority(42
)
.withRoleArn(iamRoleArn)
.withClientRequestToken(uuid)
.withDescription("job description
")
.withConfirmationRequired(false)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
- Generate manifest
-
次の例は、作成日、キー名、サイズなどのオブジェクトフィルター条件に基づいてマニフェストを自動的に生成する S3 バッチオペレーション s3PutObjectCopy
ジョブを作成する方法は、次の例のとおりです。この例を実行するには、user input placeholders
をユーザー自身の情報に置き換えます。
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.CreateJobRequest;
import com.amazonaws.services.s3control.model.CreateJobResult;
import com.amazonaws.services.s3control.model.JobManifestGenerator;
import com.amazonaws.services.s3control.model.JobManifestGeneratorFilter;
import com.amazonaws.services.s3control.model.JobOperation;
import com.amazonaws.services.s3control.model.JobReport;
import com.amazonaws.services.s3control.model.KeyNameConstraint;
import com.amazonaws.services.s3control.model.S3JobManifestGenerator;
import com.amazonaws.services.s3control.model.S3ManifestOutputLocation;
import com.amazonaws.services.s3control.model.S3SetObjectTaggingOperation;
import com.amazonaws.services.s3control.model.S3Tag;
import java.time.Instant;
import java.util.Date;
import java.util.UUID;
import java.util.ArrayList;
import static com.amazonaws.regions.Regions.US_WEST_2
;
public class test {
public static void main(String[] args) {
String accountId = "012345678901
";
String iamRoleArn = "arn:aws:iam::012345678901
:role/ROLE
";
String sourceBucketName = "arn:aws:s3:::amzn-s3-demo-source-bucket
";
String reportBucketName = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
";
String manifestOutputBucketName = "arn:aws:s3:::amzn-s3-demo-manifest-bucket
";
String uuid = UUID.randomUUID().toString();
long minimumObjectSize = 100L;
ArrayList<S3Tag> tagSet = new ArrayList<>();
tagSet.add(new S3Tag().withKey("keyOne
").withValue("ValueOne
"));
ArrayList<String> prefixes = new ArrayList<>();
prefixes.add("s3KeyStartsWith
");
try {
JobOperation jobOperation = new JobOperation()
.withS3PutObjectTagging(new S3SetObjectTaggingOperation()
.withTagSet(tagSet)
);
S3ManifestOutputLocation manifestOutputLocation = new S3ManifestOutputLocation()
.withBucket(manifestOutputBucketName)
.withManifestPrefix("manifests
")
.withExpectedManifestBucketOwner(accountId)
.withManifestFormat("S3InventoryReport_CSV_20211130");
JobManifestGeneratorFilter jobManifestGeneratorFilter = new JobManifestGeneratorFilter()
.withEligibleForReplication(true
)
.withKeyNameConstraint(
new KeyNameConstraint()
.withMatchAnyPrefix(prefixes))
.withCreatedBefore(Date.from(Instant.now()))
.withObjectSizeGreaterThanBytes(minimumObjectSize);
S3JobManifestGenerator s3JobManifestGenerator = new S3JobManifestGenerator()
.withEnableManifestOutput(true
)
.withManifestOutputLocation(manifestOutputLocation)
.withFilter(jobManifestGeneratorFilter)
.withSourceBucket(sourceBucketName);
JobManifestGenerator jobManifestGenerator = new JobManifestGenerator()
.withS3JobManifestGenerator(s3JobManifestGenerator);
JobReport jobReport = new JobReport()
.withBucket(reportBucketName)
.withPrefix("reports
")
.withFormat("Report_CSV_20180820")
.withEnabled(true
)
.withReportScope("AllTasks
");
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2
)
.build();
CreateJobResult createJobResult = s3ControlClient.createJob(new CreateJobRequest()
.withAccountId(accountId)
.withOperation(jobOperation)
.withManifestGenerator(jobManifestGenerator)
.withReport(jobReport)
.withPriority(42
)
.withRoleArn(iamRoleArn)
.withClientRequestToken(uuid)
.withDescription("job description
")
.withConfirmationRequired(true)
);
System.out.println("Created job " + createJobResult.getJobId());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
REST API を使用して、バッチ操作ジョブを作成できます。詳細については、「Amazon Simple Storage Service API リファレンス」の「CreateJob」を参照してください。
ジョブのレスポンス
CreateJob
リクエストが成功すると、Amazon S3 はジョブ ID を返します。ジョブ ID は Amazon S3 が自動的に生成する一意の識別子であるため、バッチ操作ジョブを識別してそのステータスを監視できます。
AWS CLI、AWS SDK または REST API を介してジョブを作成する場合、S3 バッチオペレーションを設定してジョブを自動処理を開始できます。ジョブはより高い優先度のジョブを待機せずに、準備が整うと直ちに実行されます。
Amazon S3 コンソールを使用してジョブを作成する際は、バッチオペレーションでジョブの処理を開始する前に、ジョブの詳細を確認し、ジョブを実行できるかを確認する必要があります。ジョブが 30 日以上停止状態のままになると、失敗します。