📢 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> | ||