(同じ利用者による、間の2版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
 
Amazon S3 (Simple Storage Service) は、AWSが提供するオブジェクトストレージサービスである。<br>
インターネット経由でデータの保存と取得が可能であり、スケーラビリティ、可用性、セキュリティ、パフォーマンスに優れている。<br>
<br>
S3では、データは「オブジェクト」として保存され、各オブジェクトは「バケット」と呼ばれるコンテナ内に格納される。<br>
オブジェクトは、ファイル本体とそのメタデータで構成され、一意の「キー」 (ファイル名やパス) により識別される。<br>
バケット名はグローバルに一意である必要がある。<br>
<br>
主な特徴として、事実上無制限のストレージ容量、高い耐久性 (99.999999999[%])、複数のストレージクラスによるコスト最適化、バージョニング機能、アクセス制御、暗号化等がある。<br>
静的Webサイトのホスティング、バックアップとアーカイブ、ビッグデータ分析、アプリケーションデータの保存等、幅広い用途で利用されている。<br>
<br>
S3へのアクセスは、AWSマネジメントコンソール、AWS CLI、AWS SDKを通じて行うことができ、RESTful APIを介してプログラムから操作することが可能である。<br>
<br><br>
<br><br>


72行目: 82行目:


== S3へのダウンロード ==
== S3へのダウンロード ==
S3バケットからファイルをストリーム経由でダウンロードするフローを以下に示す。<br>
# ClientConfigurationの作成
#: AWS SDKのクライアント設定オブジェクトを生成する。
# リージョンの設定
#: 指定されたAWSリージョンを設定する。
# S3クライアントの生成
<br>
==== S3クライアントの初期化 ====
指定されたリージョンでS3クライアントを初期化する。<br>
<br>
<syntaxhighlight lang="c++">
QString region = "<リージョン名>"


Aws::Client::ClientConfiguration clientConfig;
clientConfig.region = region.toStdString();
auto s3Client = std::make_unique<Aws::S3::S3Client>(clientConfig);
</syntaxhighlight>
<br>
==== アップロードフロー ====
* bucketName
*: ダウンロード元のS3バケット名
* objectKey
*: S3上でのオブジェクトキー (パス)
* filePath
*: ダウンロード先のローカルファイルパス
<br>
<syntaxhighlight lang="c++">
// 1. GetObjectRequestの設定
Aws::S3::Model::GetObjectRequest request;
request.SetBucket(bucketName.toStdString());
request.SetKey(objectKey.toStdString());
// 2. ダウンロード実行
auto outcome = m_s3Client->GetObject(request);
// 3. 成功時の処理
if (outcome.IsSuccess()) {
  // ストリームの取得
  // GetResultWithOwnership : 結果オブジェクトの所有権を取得
  auto& retrieved_file = outcome.GetResultWithOwnership().GetBody();  // ダウンロードしたデータのストリームを取得
  // ローカルファイルへの書き込み
  std::ofstream output_file(filePath.toStdString(), std::ios::binary);  // ファイル書き込み時もバイナリモードを使用
  output_file << retrieved_file.rdbuf();  // ストリームバッファを直接ファイルに書き込み
  output_file.close();
}
</syntaxhighlight>
<br><br>
<br><br>


79行目: 135行目:
全ての設定 (リージョン、バケット名、オブジェクトキー) を任意の設定ファイルから読み込んでいる。<br>
全ての設定 (リージョン、バケット名、オブジェクトキー) を任意の設定ファイルから読み込んでいる。<br>
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="ini">
  # config.iniファイル
  # config.iniファイル