(レポート) DEV204: C++ による高性能ネイティブクラウドアプリケーションの構築 #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

毎度お馴染み流浪の動かしてみた & C 芸人の Fujimura です。

今さらながらですが、自分も発表スライドを読んで紹介することで、アメリカ気分を味わうことにしました。

AWS SDK for C++

AWS SDK for C++ は AWS のための現代的な C++ ライブラリで自動生成されたクライアントと高水準 API から構成されています。

ビルドには C++11 準拠のコンパイラと CMake およびプラットフォーム依存な HTTP ライブラリ (mac や linux では libcurl と libssl) が必要です。mac でのビルドについては以前、ブログにまとめましたので、ご参考ください。

このライブラリでは以下の機能が提供されています。また、これらの機能に利用者独自の拡張を追加することもできます。

  • クレデンシャル管理
    • Cognito 連携のプロバイダも実装されています。
  • ロガー
    • ライブラリ依存のない実装で、デフォルトではローカルに出力します。
  • 非同期処理
    • コールバックによるリクエストの非同期な処理ができます。
    • 非同期処理はプラットフォームのスレッドで実現されます。
  • 通信幅
    • クライアント毎の細かな制御が可能です。
    • デフォルトで最適な実装が提供されています。
  • 例外
    • 性能と安定性の面から例外は使用していません。
    • リクエストが返す Outcome オブジェクトが成功時には結果を、失敗時にはエラー情報をそれぞれ保持します。
  • 再試行
    • クライアント毎の細かな制御が可能です。
  • メモリ割り当て
    • コンパイル時に設定します。(cmake -DCUSTOM_MEMORY_MANAGEMENT=1 で指定)
    • 実行時に利用者定義のアロケータを定義することができます。(例 : dlmalloc を使ったアロケータへの差し替え)
    • AWS で再定義された STL があります。(例 : AWS::Vector, AWS::String, etc...)
    • これらは利用者定義のアロケータを使用します。
  • Streaming requests and responses
  • HTTP/TLS スタックの再定義
  • 高水準 API

さいごに

以前、AWS SDK for C++ のブログを書いた時には資料が公式ブログの一記事しかなくて、動かした方を調べるのに苦労したのですが、今回まとまった資料が出てきたので、これを機に利用者が増えていくのではないかと期待しています。