同僚 Jonathan Henson からの新しい AWS SDK を紹介するゲスト投稿をお届けします。
— Jeff;
これまでの長い取り組みを経て、オープンソースの C++ SDK を発表できることを誇りに思います。これにより、Amazon Web Services と連携してネイティブアプリケーションをスケーリングさせる事ができます。
AWS SDK for C++ はモダンな C++ インターフェイスで、低い依存度となっています。低レベルと高レベル両方のインターフェイスで完全に機能するように設計しました。ですが、可能な限り外部依存も少ないようにしプラットフォームが独立するようにしました。同時に、Windows、OS X、Linux、モバイルのプラットフォームをサポートするようにもしました。
この SDK はゲーム開発者を特に意識して設計していますが、システムエンジニアリングやその他ネイティブコードの効率性を必要とするプロジェクトなどにも使えるようなインターフェイスを保持するようにもしました。
機能
- 標準テンプレートライブラリ (STL) を使って動作
- カスタムメモリ管理をサポート
- C++11 の機能を使っており、サポートも実施
- CMake とご利用のネイティブコンパイラを使ってビルド
- 低い外部依存度
- 例外セーフ
- 詳細で、設定可能なロギング
- デフォルトのクレデンシャルプロバイダ
- Amazon Cognito Identity を通じたID管理
- TransferClient を通じた Amazon S3 への高レベルインターフェイス
- 暗号化とHTTPのサポートにネイティブ OS の API を利用
コードサンプル
Amazon DynamoDB テーブルに値を保存:
Aws::DynamoDB::DynamoDBClient dynamoDbClient;
PutItemRequest putItemRequest;
putItemRequest.WithTableName("TestTableName");
AttributeValue hashKeyAttribute;
hashKeyAttribute.SetS("SampleHashKeyValue");
putItemRequest.AddItem("HashKey", hashKeyAttribute);
AttributeValue valueAttribute;
valueAttribute.SetS("SampleValue");
putItemRequest.AddItem("Value", valueAttribute);
auto putItemOutcome = dynamoDbClient.PutItem(putItemRequest);
if(putItemOutcome.IsSuccess())
{
std::cout << "PutItem Success Using IOPS "<< putItemOutcome.GetResult().GetConsumedCapacity();
}
else
{
std::cout << "PutItem failed with error "<< putItemOutcome.GetError().GetMessage();
}
Amazon Simple Storage Service (S3) からファイルをダウンロード:
Aws::S3::S3Client s3Client;
GetObjectRequest getObjectRequest;
getObjectRequest.SetBucket("sample_bucket");
getObjectRequest.SetKey("sample_key");
getObjectRequest.SetResponseStreamFactory(
[](){
return Aws::New(ALLOCATION_TAG, DOWNLOADED_FILENAME, std::ios_base::out | std::ios_base::in | std::ios_base::trunc);
});
auto getObjectOutcome = s3Client.GetObject(getObjectRequest);
if(getObjectOutcome.IsSuccess())
{
std::cout << "File downloaded from S3 to location "<< DOWNLOADED_FILENAME;
}
else
{
std::cout << "File download failed from s3 with error "<< getObjectOutcome.GetError().GetMessage();
}
シンプルですね! GitHub からコードを今日ダウンロードして、Amazon Web Services のパワーを使って C++ アプリケーションをスケーリングさせるのを始めて下さい。
ステータス
AWS SDK for C++ は現在、実験的な位置づけで提供しています。その間に、ユーザ様やオープンソースのコミュニティからのフィードバックを集め、API を固めて行きます。また、個々のサービスのサポートを追加していき、クライアントジェネレータが適切に各プロトコルをサポートできるようになっていくと自身を持っています。是非、進捗をフォローすると共に、プルリクエストを送って頂いたり、フィードバックやアイデアを GitHub の Issue で送って下さい。
— Jonathan Henson, ソフトウェア開発エンジニア (SDE) (翻訳は辻が担当しました。原文:Introducing the AWS SDK for C++)