> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/data-storage/s3-sink.md).

# S3シンク

ワークフローデータをAWS S3バケットに直接保存し、CSV、JSON、およびテキストファイル形式に対応。複数のエントリを1つのオブジェクトに集約するか、各エントリを個別のS3オブジェクトとして保存するかを設定可能な出力モードを備えています。

## このブロックの仕組み

このブロックは、ワークフローステップからの文字列コンテンツをS3オブジェクトにアップロードします。このブロックは:

1. 文字列コンテンツ（フォーマッタ、予測、またはその他の文字列を生成するブロックからのもの）とS3設定を入力として受け取ります
2. 提供された認証情報（未指定の場合はデフォルトのAWS認証チェーン）を使用してAWS S3に接続します
3. に基づいて適切なアップロード戦略を選択します `出力モード`:
   * **個別ファイルモード**: 各入力ごとに新しいS3オブジェクトを作成し、タイムスタンプ付きの一意のキーを生成します
   * **追記ログモード**: コンテンツをメモリにバッファリングし、…のときに完全なオブジェクトをアップロードします `max_entries_per_file` に達したとき、またはブロックが破棄されたとき
4. 次の場合は **個別ファイルモード**: プレフィックス、ファイル名プレフィックス、ファイルタイプ、タイムスタンプから一意のS3キーを生成し、コンテンツを直接アップロードします
5. 次の場合は **追記ログモード**:
   * 単一のS3キーの下にコンテンツエントリをメモリ内でバッファリングします
   * 追記時には形式固有の処理を適用します:
     * **CSV**: 2回目以降の追記ではヘッダー行を削除します（CSVコンテンツは最初の書き込みでヘッダーを含める必要があります）
     * **JSON**: JSONL（JSON Lines）形式に変換し、各JSONドキュメントを解析して再シリアライズし、1行に収まるようにします
     * **TXT**: 改行を付けてコンテンツを直接追記します
   * エントリ数を追跡し、…のときにバッファ全体を完全なS3オブジェクトとしてアップロードします `max_entries_per_file` に達すると、新しいキーで新しいバッファを開始します
   * ブロックが破棄されたときに、残っているバッファ済みデータをアップロードします
6. 保存の成功または失敗を示すエラー状態とメッセージを返します

このブロックは2つの保存戦略をサポートします。個別ファイルモードは、入力ごとにタイムスタンプ付きの個別S3オブジェクトを作成し（実行ごとに出力を整理するのに便利です）、追記ログモードは、エントリをメモリに蓄積し、ローテーション時に完全なS3オブジェクトとして書き込みます（制御されたアップロード頻度で時系列ログを保存するのに便利です）。S3キー名にはタイムスタンプが含まれます（形式: `YYYY_MM_DD_HH_MM_SS_microseconds`）一意のキーと時系列順のため。

## AWS認証情報

認証情報は2通りの方法で指定できます:

1. **ワークフロー入力** - 宣言する `aws_access_key_id` と `aws_secret_access_key` 種類のワークフロー入力として `parameter` そして対応するフィールドに接続します。これにより認証情報をワークフロー定義から分離でき、実行時に指定できます。
2. **シークレット提供ブロック** - 認証情報フィールドを、…の出力に接続します `環境シークレットストア` ブロック。これはワークフローに埋め込まずにサーバー側の環境変数から値を読み取ります。注: これはセルフホスト型の `inference` サーバーでのみ利用可能で、Roboflowホスト型プラットフォームでは使用できません。

## S3キー構造

最終的なS3キーは次の要素で構成されます:

```
{s3_prefix}/{file_name_prefix}_{timestamp}.{extension}
```

たとえば、 `s3_prefix="logs/detections"`, `file_name_prefix="run"`、および `file_type="csv"`:

```
logs/detections/run_2024_10_18_14_09_57_622297.csv
```

If `s3_prefix` が空の場合、キーはファイル名から直接始まります。

## 追記ログモードに関する注意

追記ログモードでは、データはメモリにバッファリングされ、次の場合にのみS3へアップロードされます:

* この `max_entries_per_file` 制限に達した場合（オブジェクトのローテーション）、または
* ワークフロー終了時にブロックインスタンスが破棄されたとき

つまり、各ステップの実行後すぐにS3でデータが見えない場合があります。必要であれば `separate_files` モードを使用してください。

## 一般的な使用例

* **クラウドデータロギング**: 検出結果、メトリクス、またはワークフロー出力をS3に直接アップロードして、耐久性のあるクラウド保存と下流処理に利用します
* **データパイプライン統合**: フォーマット済みのCSVまたはJSONLファイルをS3にエクスポートし、データパイプライン、分析ツール、またはMLトレーニングジョブで利用できるようにします
* **バッチ結果のアーカイブ**: 個々の推論結果を、タイムスタンプとプレフィックスで整理された個別のS3オブジェクトとして保存します
* **時系列収集**: ワークフロー出力をS3内のバッチ処理されたJSONLまたはCSVファイルに集約し、コスト効率のよいログ保存を実現します
* **クロスサービス統合**: S3にデータを書き込んでLambda関数をトリガーしたり、SQSキューに渡したり、他のAWSサービスと統合したりします

### 型識別子

ステップで次の識別子を使用してください `"type"` フィールド： `roboflow_core/s3_sink@v1` ワークフローにこのブロックをステップとして追加するには。

### プロパティ

| **名前**                  | **型** | **説明**                                                                                                                                                                                                                | 参照 |
| ----------------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`                  | `str` | このステップの一意の識別子を入力してください。                                                                                                                                                                                               | ❌  |
| `ファイルタイプ`               | `str` | 作成するファイルの種類: 'csv'（CSV形式）、'json'（JSON形式、またはappend\_logモードではJSONL）、または'txt'（プレーンテキスト）。append\_logモードでは、JSONファイルは1行につき1つのJSONオブジェクトを含む.jsonl（JSON Lines）形式で保存されます。                                                      | ❌  |
| `出力モード`                 | `str` | アップロード戦略: 'append\_log'は複数のエントリをバッファリングし、エントリ上限に達したら1つのS3オブジェクトとしてアップロードします（バッチログに便利です）。'separate\_files'は各入力を一意のタイムスタンプベースのキーを持つ新しいS3オブジェクトとしてアップロードします（実行ごとの出力に便利です）。                                               | ❌  |
| `バケット名`                 | `str` | 対象S3バケットの名前。静的文字列または実行時に文字列へ解決されるセレクタを指定できます。                                                                                                                                                                         | ✅  |
| `s3_prefix`             | `str` | オブジェクトを保存するS3キーのプレフィックス（フォルダパス）。末尾のスラッシュは自動的に正規化されます。file\_name\_prefixとタイムスタンプと組み合わせて完全なオブジェクトキーを形成します。例: 'logs/detections' では 'logs/detections/workflow\_output\_2024\_10\_18\_14\_09\_57\_622297.csv' のようなキーになります。 | ✅  |
| `ファイル名プレフィックス`          | `str` | S3オブジェクト名を生成するためのプレフィックス。タイムスタンプ（形式: YYYY\_MM\_DD\_HH\_MM\_SS\_microseconds）およびファイル拡張子と組み合わせて、'workflow\_output\_2024\_10\_18\_14\_09\_57\_622297.csv' のような一意のキーを作成します。                                               | ✅  |
| `max_entries_per_file`  | `整数`  | append\_logモードでS3にアップロードして新しいオブジェクトを開始する前の、バッファ済みエントリの最大数。この上限に達すると、蓄積されたバッファは完全なS3オブジェクトとしてアップロードされ、新しいバッファが新しいキーで開始されます。output\_modeが'append\_log'のときのみ適用されます。1以上である必要があります。                                        | ✅  |
| `aws_access_key_id`     | `str` | 認証用のAWSアクセスキーID。指定しない場合は、boto3のデフォルト認証チェーン（環境変数、\~/.aws/credentials、またはIAMロール）が使用されます。推奨: ハードコードする代わりに、これをEnvironment Secrets Storeブロックに接続してください。                                                                     | ✅  |
| `aws_secret_access_key` | `str` | 認証用のAWSシークレットアクセスキー。指定しない場合は、boto3のデフォルト認証チェーンが使用されます。推奨: ハードコードする代わりに、これをEnvironment Secrets Storeブロックに接続してください。                                                                                                     | ✅  |
| `AWSリージョン`              | `str` | バケットが配置されているAWSリージョン（例: 'us-east-1'）。指定しない場合は、boto3のデフォルトリージョン（AWS\_DEFAULT\_REGION環境変数または\~/.aws/config）が使用されます。                                                                                                     | ✅  |

この **参照** 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します `ワークフロー` 実行時。参照 *バインディング* 詳細は。

### ランタイム互換性

`soft` - ランタイム `hosted_serverless`, `dedicated_deployment`；実行 `リモート` 追記ログモードでは、蓄積されたオブジェクトをS3へアップロードする前に、エントリがプロセスメモリにバッファリングされます。ステートレスまたは複数レプリカのHTTPランタイムでリモートステップ実行を行う場合、連続したリクエストが別々のワーカープロセスで処理されることがあるため、追記ログオブジェクトがワーカー間でリセットされたり分割されたりする可能性があります。各エントリを1つの順序付きログとして確実に記録する必要がある場合は、separate\_filesモード、または永続的なWebRTCセッションでのローカルステップ実行を使用してください。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が `S3出力` のバージョン `v1` あるか確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* 入力
  * `コンテンツ` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)）：S3にアップロードする文字列コンテンツ。これは他のワークフローブロックからのフォーマット済みデータ（例: CSV FormatterのCSVコンテンツ、JSON文字列、またはプレーンテキスト）である必要があります。コンテンツ形式は指定されたfile\_typeに一致している必要があります。append\_logモードのCSVファイルでは、最初の書き込みでヘッダー行を含める必要があります。
  * `バケット名` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)）：対象S3バケットの名前。静的文字列または実行時に文字列へ解決されるセレクタを指定できます。
  * `s3_prefix` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)）：オブジェクトを保存するS3キーのプレフィックス（フォルダパス）。末尾のスラッシュは自動的に正規化されます。file\_name\_prefixとタイムスタンプと組み合わせて完全なオブジェクトキーを形成します。例: 'logs/detections' では 'logs/detections/workflow\_output\_2024\_10\_18\_14\_09\_57\_622297.csv' のようなキーになります。
  * `ファイル名プレフィックス` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)）：S3オブジェクト名を生成するためのプレフィックス。タイムスタンプ（形式: YYYY\_MM\_DD\_HH\_MM\_SS\_microseconds）およびファイル拡張子と組み合わせて、'workflow\_output\_2024\_10\_18\_14\_09\_57\_622297.csv' のような一意のキーを作成します。
  * `max_entries_per_file` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)）：append\_logモードでS3にアップロードして新しいオブジェクトを開始する前の、バッファ済みエントリの最大数。この上限に達すると、蓄積されたバッファは完全なS3オブジェクトとしてアップロードされ、新しいバッファが新しいキーで開始されます。output\_modeが'append\_log'のときのみ適用されます。1以上である必要があります。
  * `aws_access_key_id` (*Union\[*[*`secret`*](/workflows/ja/gaido/developer-guide/kinds/secret.md)*,* [*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)*]*）：認証用のAWSアクセスキーID。指定しない場合は、boto3のデフォルト認証チェーン（環境変数、\~/.aws/credentials、またはIAMロール）が使用されます。推奨: ハードコードする代わりに、これをEnvironment Secrets Storeブロックに接続してください。
  * `aws_secret_access_key` (*Union\[*[*`secret`*](/workflows/ja/gaido/developer-guide/kinds/secret.md)*,* [*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)*]*）：認証用のAWSシークレットアクセスキー。指定しない場合は、boto3のデフォルト認証チェーンが使用されます。推奨: ハードコードする代わりに、これをEnvironment Secrets Storeブロックに接続してください。
  * `AWSリージョン` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)）：バケットが配置されているAWSリージョン（例: 'us-east-1'）。指定しない場合は、boto3のデフォルトリージョン（AWS\_DEFAULT\_REGION環境変数または\~/.aws/config）が使用されます。
* 出力
  * `error_status` ([`boolean`](/workflows/ja/gaido/developer-guide/kinds/boolean.md)) : ブールフラグ。
  * `message` ([`string`](/workflows/ja/gaido/developer-guide/kinds/string.md)) : 文字列値。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/s3_sink@v1",
	    "content": "$steps.csv_formatter.csv_content",
	    "file_type": "csv",
	    "output_mode": "append_log",
	    "bucket_name": "my-inference-results",
	    "s3_prefix": "logs/detections",
	    "file_name_prefix": "my_output",
	    "max_entries_per_file": 1024,
	    "aws_access_key_id": "$steps.secrets.aws_access_key_id",
	    "aws_secret_access_key": "$steps.secrets.aws_secret_access_key",
	    "aws_region": "us-east-1"
	}
```

</details>
