📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

29行目: 29行目:
  // 全てのLambda操作 (Invoke, ListFunctions等) はこのクライアントを通じて実行される
  // 全てのLambda操作 (Invoke, ListFunctions等) はこのクライアントを通じて実行される
  auto lambdaClient = std::make_unique<Aws::Lambda::LambdaClient>(clientConfig);
  auto lambdaClient = std::make_unique<Aws::Lambda::LambdaClient>(clientConfig);
</syntaxhighlight>
<br><br>
== Lambda関数の呼び出し ==
Lambda関数を呼び出し、レスポンスを取得する。<br>
<br>
以下の例では、同期呼び出し、非同期呼び出し、ドライランに対応している。<br>
<br>
<syntaxhighlight lang="c++">
#include <aws/lambda/LambdaClient.h>
#include <aws/lambda/model/InvokeRequest.h>
// Aws::Lambda::Model::InvokeRequest
// Lambda関数呼び出しリクエストを表すクラス
// 関数名、ペイロード、呼び出しタイプ、ログタイプ等を設定する
Aws::Lambda::Model::InvokeRequest request;
// SetFunctionName()
// 呼び出すLambda関数の名前またはARN(Amazon Resource Name)を指定する
// 例 : "my-function" または "arn:aws:lambda:us-east-1:123456789012:function:my-function"
request.SetFunctionName(functionName.toStdString());
// InvocationType (呼び出しタイプ) の設定
// Lambda関数の呼び出し方法を指定する列挙型
if (invocationType == "RequestResponse") {
    // RequestResponse - 同期呼び出し
    // 関数の実行完了を待ち、結果(レスポンスペイロード)を返す
    // リアルタイムで結果が必要な場合に使用
    request.SetInvocationType(Aws::Lambda::Model::InvocationType::RequestResponse);
}
else if (invocationType == "Event") {
    // Event - 非同期呼び出し
    // 関数をイベントキューに追加し、すぐに制御を返す(結果は返らない)
    // 処理の完了を待つ必要がない場合に使用
    request.SetInvocationType(Aws::Lambda::Model::InvocationType::Event);
}
else if (invocationType == "DryRun") {
    // DryRun - テスト呼び出し
    // 実際には関数を実行せず、アクセス許可のみを検証する
    // 本番実行前の権限チェックに使用
    request.SetInvocationType(Aws::Lambda::Model::InvocationType::DryRun);
}
// LogType(ログタイプ)の設定
// 実行ログの取得方法を指定する列挙型
if (logType == "Tail") {
    // Tail - 最後の4KBの実行ログをBase64エンコードして返す
    // デバッグ時に関数の実行状況を確認する場合に使用
    request.SetLogType(Aws::Lambda::Model::LogType::Tail);
}
else {
    // None - ログを返さない
    // ログが不要な場合に使用 (デフォルト)
    request.SetLogType(Aws::Lambda::Model::LogType::None);
}
// SetBody() - ペイロード (入力データ) の設定
// Lambda関数に渡すデータを設定する (JSON形式が一般的)
// Aws::MakeShared
// AWS SDKのメモリアロケータを使用してshared_ptrを作成する関数
// 第1引数は識別用のタグ (メモリトラッキング用)
std::shared_ptr<Aws::IOStream> payload_stream = Aws::MakeShared<Aws::StringStream>("PayloadStream");
*payload_stream << payload.toStdString();
request.SetBody(payload_stream);
// Invoke() - Lambda関数を実際に呼び出すメソッド
// 戻り値はOutcomeオブジェクト (成功 / 失敗の結果を保持)
//
// Outcome
// AWS SDK for C++の結果を表すテンプレートクラス
// 成功時はGetResult(), 失敗時はGetError()でアクセスする
auto outcome = m_lambdaClient->Invoke(request);
// IsSuccess() - 呼び出しが成功したかをチェック
if (outcome.IsSuccess()) {
    // GetResult() - 成功時の結果オブジェクトを取得
    const auto& result = outcome.GetResult();
    // GetStatusCode()
    // HTTPステータスコードを取得
    // 通常、成功時は200が返る
    int statusCode = result.GetStatusCode();
    // GetFunctionError()
    // Lambda関数内でエラーが発生した場合、エラータイプを返す
    // "Handled" - 関数コード内でキャッチされたエラー
    // "Unhandled" - 関数コードでキャッチされなかったエラー
    // 空文字列 - エラーなし
    std::string functionError = result.GetFunctionError();
    // GetPayload()
    // Lambda関数から返されたレスポンスデータのストリームを取得
    // 通常、JSON形式のデータが返される
    auto& payload_stream = result.GetPayload();
    std::stringstream ss;
    ss << payload_stream.rdbuf();
    std::string response_payload = ss.str();
    // GetLogResult()
    // 実行ログ (Base64エンコード済み) を取得
    // LogType::Tailを指定した場合のみ利用可能
    // デコードすることで関数の実行ログ (print文やエラーメッセージ等) を確認できる
    std::string logResult = result.GetLogResult();
    return true;
}
else {
    // GetError() - 失敗時のエラー情報を取得
    // GetMessage() - エラーメッセージを取得
    std::cerr << "✗ 呼び出し失敗: " << outcome.GetError().GetMessage() << std::endl;
    return false;
}
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>