【STEP順に解説】
🥇STEP 1:DynamoDBテーブルの作成
▶️ 目的:通話中の件数を記録する場所を準備します。
- テーブル名例:CallSessionCounter
- パーティションキー例:counterType(例:値は “activeCalls” など)
- 初期データ:counterType = activeCalls、count = 0(初期値)
🥈STEP 2:Lambda関数の作成(CallLimitChecker)
▶️ 目的:着信時に通話中件数を確認して「受ける or 切る」判断をします。
- DynamoDB を読み取り、
- 2件以上なら disconnect を返す、
- 少なければ success を返す。
※この Lambda は Amazon Connect フローから呼び出すことになります。
🥉STEP 3:EventBridge ルールの作成
▶️ 目的:「通話開始・通話終了」イベントをキャッチする仕組みです。
- イベントパターン(Amazon Connect の通話イベント)
- ターゲットに後述の Lambda(CallCounterUpdater)を指定
🏅STEP 4:Lambda関数の作成(CallCounterUpdater)
▶️ 目的:通話イベントを元に DynamoDB の件数を「+1 / -1」更新します。
- EventBridge から渡されたイベントを解析
- 開始なら +1、終了なら -1 を DynamoDB に反映
🛠STEP 5:Amazon Connect フロー修正
▶️ 目的:フロービルダーに CallLimitChecker を呼び出す処理を追加
- 「Invoke AWS Lambda 関数」ブロックを使用
- Lambda の返り値が disconnect なら「切断ブロック」へ分岐
🔁まとめ:構築手順の順番
- DynamoDB テーブル作成
- CallLimitChecker Lambda 作成(+ DynamoDB読み取りIAM)
- EventBridge ルール作成
- CallCounterUpdater Lambda 作成(+ DynamoDB書き込みIAM)
- Amazon Connect フロー修正で Lambda 呼び出し追加
🥇STEP 1:DynamoDB テーブルの作成手順
①「テーブルの作成」ボタンをクリック
👉 右側にあるオレンジ色の「テーブルの作成」ボタンを押してください。
② テーブル設定画面で以下のように入力します
| 項目名 | 入力内容(例) |
|---|---|
| テーブル名 | CallSessionCounter(任意ですが、わかりやすい名前に) |
| パーティションキー | counterType(文字列型・String のままでOK) |
| ソートキー | 不要(☑チェックしない) |
✅ 「オンデマンド(デフォルト)」の読み書き容量設定のままで大丈夫です。
③ 「テーブルの作成」ボタンを押す
画面下部の「テーブルの作成」をクリックすると、数秒でテーブルが作成されます。
④ 初期データを1件登録(通話中件数=0)
作成後、テーブルを開いて「項目を探索」ボタンをクリックし、以下のデータを入れてください。
- 作成した CallSessionCounter をクリックして中に入る
- 左メニューの「項目を探索」または「項目」をクリック
- 画面上部の「項目の作成」ボタンをクリック
| 属性名 | タイプ | 値 |
|---|---|---|
| counterType | 文字列(S) | activeCalls |
| count | 数値(N) | 0 |
countは、新しい属性の追加から追加してください。
📌 注意
- counterType は パーティションキーなので必須です。
- count は現在の通話件数として使います。
✅ これにより、Lambda が通話件数を確認できる状態になります。
✅ここまでで完了すべき状態
- テーブル:CallSessionCounter
- パーティションキー:counterType
- 登録データ:{ counterType: “activeCalls”, count: 0 }

🥈 Step 2:Lambda関数「CallLimitChecker」の作成
Amazon Connect での着信時に、同時通話数(例:2件)を超えていたら切断させる処理を行うための Lambda 関数「CallLimitChecker」を作成します。
この関数は DynamoDB の通話件数をチェックして、disconnect または continue のフラグを返す役割を担います。
① 関数作成画面を開く
- AWSコンソール > Lambda にアクセス
- オレンジ色の「関数の作成」をクリック
- 「一から作成」を選択
② 各種設定を入力
| 項目 | 入力値 |
|---|---|
| 関数名 | CallLimitChecker |
| ランタイム | Node.js 20.x |
| アーキテクチャ | x86_64(そのままでOK) |
③ 「関数の作成」ボタンをクリック
これで Lambda 関数の作成は完了です。
Lambda 関数コード(Node.js 版)
以下のコードを index.mjs に貼り付け、左下の「Deploy(Ctrl + Shift + U)」をクリックしてください。
import { DynamoDBClient, GetItemCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient({ region: "ap-southeast-2" }); // シドニー
export const handler = async (event) => {
const params = {
TableName: "CallSessionCounter",
Key: {
counterType: { S: "activeCalls" },
},
};
try {
const data = await client.send(new GetItemCommand(params));
const count = data.Item?.count?.N ? parseInt(data.Item.count.N, 10) : 0;
if (count >= 2) {
return { action: "disconnect" };
} else {
return { action: "continue" };
}
} catch (err) {
console.error("DynamoDBエラー:", err);
return { action: "error", message: "DynamoDBアクセス失敗" };
}
};JavaScript✅ 注意点
リージョンは Connectと同じ「ap-southeast-2(シドニー)、ap-northeast-1(東京)」など にしてください。- DynamoDBテーブル名が違う場合は “CallSessionCounter” を変更してください。
- 貼り付けたら「Deploy(デプロイ)」を必ず実行してください。
Deploy(デプロイ)
左下の「Deploy(Ctrl + Shift + U)」をクリック。
これで変更内容が Lambda に反映されます。

Lambda関数「CallLimitChecker」が正常に更新(=デプロイ)された
- 緑のメッセージ「関数 CallLimitChecker が正常に更新されました」が表示されている。
- これは、コードの変更内容が AWS に反映された状態であることを意味します。
Node.js(index.mjs)ファイルが正しく編集されている
- index.mjs ファイルが開かれており、Node.js形式の Lambda 関数として正しい構成。
- DynamoDBClient や GetItemCommand のインポート、非同期関数なども確認済み。
Lambdaの準備は完了している
- つまり、Amazon Connect フローからこの関数を呼び出せる状態にあるということです。
- DynamoDB の count 値によって “disconnect” または “continue” を返す準備が整っています。
- 「Create new test event」が表示されるので、以下のように入力:
| 項目 | 入力内容 |
|---|---|
| Event Name | TestEvent(任意) |
| Event sharing | Private(既定のままでOK) |
| Template | Hello World(そのままでOK) |
| Event JSON | {}(空オブジェクト) に変更する! ※ここが重要 |
※Event JSONは “key1”: “value1” などが入っているため、それをすべて削除して {} にしてください。
✅ その後の手順
- 右上の「Save(保存)」をクリック
- 続けて「Test(テスト)」を実行
- 結果として {“action”:”continue”} が返れば 成功
(※DynamoDBの count が 0 のため)
CallLimitChecker関数の実行ロールに DynamoDB 読み取り権限を追加する
テストした際に、エラーになったら、権限を追加してください。

Lambda関数がDynamoDBのデータを読み取れるようにするには、関数に関連付けられた実行ロールに、読み取り権限(ポリシー)を追加する必要があります。これは関数本体ではなく、実行ロール側への設定です。
「関数」ではなく「ロール」(=Lambda関数の実行ロール)に対して
「ポリシー」(=DynamoDBアクセス許可)を追加する作業中です
STEP 1:実行ロールの IAM 画面へ移動
- Lambda 関数「CallLimitChecker」の「設定」タブを開く(画像の通り)
- 設定→アクセス権限をクリック
- 「実行ロール」欄の青文字リンク(例:CallLimitChecker-role-2uc84nai)をクリック
STEP 2:ポリシーの追加
- IAM ロールの画面が開いたら、「許可を追加」をクリック
- 「ポリシーをアタッチ」を選択
- 検索ボックスに入力「AmazonDynamoDBReadOnlyAccess」
- チェックを入れて「次へ」→「許可を追加」で完了

再度 テスト動作確認 を行うと、 {“action”:”continue”} が返ります。

🏅STEP 3:Lambda関数の作成(CallCounterUpdater)
このステップでは、Amazon Connect の通話イベント(開始・終了)をトリガーとして、DynamoDB の通話中件数を更新する Lambda 関数を作成します。
この関数の役割
- イベント発生元:Amazon EventBridge(通話の開始・終了)
- 処理内容:
- 通話開始 → カウントを +1
- 通話終了 → カウントを -1
- データ保存先:DynamoDB(counterType = “activeCalls”)
Lambda 関数の作成
- AWSマネジメントコンソール > Lambda > 関数の作成
- 「一から作成」を選択
- 関数名:CallCounterUpdater(任意名でOK)
- ランタイム:Node.js 20.x(※Node.js希望のため)
- アーキテクチャ:x86_64
- 関数の作成をクリック。

実行ロールの IAM 画面へ移動
- Lambda 関数「CallCounterUpdater」の「設定」タブを開く
- 設定→アクセス権限をクリック
- 「実行ロール」欄の青文字リンク(例:CallCounterUpdater-role-2uc84nai)をクリック

ポリシーの追加
- IAM ロールの画面が開いたら、「許可を追加」をクリック
- 「ポリシーをアタッチ」を選択
- 検索ボックスに入力「AmazonDynamoDBFullAccess」
- チェックを入れて「次へ」→「許可を追加」で完了
Lambda 関数コード(Node.js 版)
以下のコードを index.mjs に貼り付け、左下の「Deploy(Ctrl + Shift + U)」をクリックしてください。
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DynamoDBDocumentClient, UpdateCommand } from "@aws-sdk/lib-dynamodb";
const client = new DynamoDBClient();
const dynamo = DynamoDBDocumentClient.from(client);
const TABLE_NAME = 'CallSessionCounter';
const COUNTER_ID = 'activeCalls';
export const handler = async (event) => {
console.log("Received event:", JSON.stringify(event, null, 2));
const detail = event.detail;
const instanceEventType = detail?.eventType;
let updateValue = 0;
if (instanceEventType === 'CONNECT_CONTACT_CONNECTED') {
updateValue = 1;
} else if (instanceEventType === 'CONNECT_CONTACT_DISCONNECTED') {
updateValue = -1;
} else {
console.log("Unhandled event type. Skipping.");
return { statusCode: 200, body: 'Ignored event' };
}
try {
const params = new UpdateCommand({
TableName: TABLE_NAME,
Key: { counterType: COUNTER_ID },
UpdateExpression: 'ADD #count :value',
ExpressionAttributeNames: { '#count': 'count' },
ExpressionAttributeValues: { ':value': updateValue },
});
await dynamo.send(params);
return { statusCode: 200, body: 'Counter updated.' };
} catch (err) {
console.error("DynamoDB update failed:", err);
return { statusCode: 500, body: 'Error updating counter.' };
}
};JavaScriptDeploy(デプロイ)
- 左下の「Deploy(Ctrl + Shift + U)」をクリック。
- これで変更内容が Lambda に反映されます。
- 「Create new test event」が表示されているので、テストイベントを行います。
- 右上の「Save(保存)」をクリック
- 続けて「Test(テスト)」を実行
| 項目 | 入力内容 |
|---|---|
| Event Name | TestEvent(任意) |
| Event sharing | Private(既定のままでOK) |
| Template | Hello World(そのままでOK) |
| Event JSON | {}(空オブジェクト) に変更する! ※ここが重要 |
今回のテストは、Event JSONの項目は空欄にしません。
{
"detail": {
"eventType": "CONNECT_CONTACT_CONNECTED"
}
}JSON通話中のテストイベント。

{
"detail": {
"eventType": "CONNECT_CONTACT_DISCONNECTED"
}
}JSON接続のテストイベント。
🔄 実際のイベントの流れ
- お客様が Amazon Connect に発信
- Amazon Connect が Contact を作成
- EventBridge で CONNECT_CONTACT_CONNECTED イベントが発生
- EventBridge ルールが Lambda をトリガー
- CallCounterUpdater Lambda 関数が DynamoDB を +1 更新
- お客様とオペレーターの通話が行われる
- 通話が終了(切断)
- EventBridge で CONNECT_CONTACT_DISCONNECTED イベントが発生
- 同じ EventBridge ルールが Lambda を再トリガー
- CallCounterUpdater Lambda 関数が DynamoDB を -1 更新
🧷 Lambda 関数を Amazon Connect 側で認識させるためのアクセス権限追加(CLI)
Amazon Connect では、フローエディタ上で Lambda 関数を使用する際、内部的に lambda:ListFunctions とリソースベースポリシーの検査が行われます。特に AWS Organizations 環境やセキュリティ制限の厳しいアカウントでは、
リソースベースポリシーに “AWS:SourceAccount” 条件が含まれていないと、Lambda関数がフローエディタ上に表示されない問題が発生することがあります。
🔧 CLIによる “AWS:SourceAccount” 条件付きの許可追加
この条件は GUI からは追加できないため、AWS CLI にて以下のコマンドを実行します。
aws lambda add-permission ^
--function-name CallCounterUpdater ^
--statement-id AllowExecutionFromConnectWithSourceAccount ^
--action lambda:InvokeFunction ^
--principal connect.amazonaws.com ^
--source-arn arn:aws:connect:ap-southeast-2:404267024263:instance/0301b3b3-0a33-47af-9d9c-6dc51a995446 ^
--source-account 404267024263 ^
--region ap-southeast-2Bashaws lambda add-permission ^
--function-name CallCounterUpdater ^
--statement-id AllowConnectInvoke ^
--action lambda:InvokeFunction ^
--principal connect.amazonaws.com ^
--source-account <AWSアカウントID> ^
--source-arn arn:aws:connect:<リージョン>:<AWSアカウントID>:instance/<インスタンスID>Bashこの設定を行うことで、Amazon Connect フローエディタ上で Lambda 関数が選択可能な状態になります。
🥉STEP 4:EventBridge ルールの作成
Lambda が自動で DynamoDB の件数を更新できるよう、Amazon Connect の通話イベント(通話開始・通話終了)をトリガーとして検出する仕組みを作ります。
その仕組みこそが「EventBridge ルール」です。
目的
- Amazon Connect で通話が 始まったとき → count を +1
- 通話が 終了したとき → count を -1
このような更新処理を行うために、Connectイベントを自動で Lambda に渡す設定を行います。
準備しておくべきもの(事前チェック)
| 要素 | 内容 |
|---|---|
| Connectのインスタンス | 正しく作成済みであること(リージョン一致) |
| Lambda関数 | 「CallCounterUpdater」が未作成であれば後で作成 |
| イベントソース | Amazon Connect |
EventBridge ルールの作成
① EventBridge へ移動
- AWS マネジメントコンソールで「EventBridge」を検索
- 左メニューから「ルール」をクリック
- オレンジ色の「ルールを作成」ボタンをクリック
ルールの詳細を定義
- 名前
ConnectCallEventsRule など任意の名称 - 説明
例:Amazon Connect の通話開始・終了イベントを検出 - イベントバス
default(既定のままでOK) - 選択したイベントバスでルールを有効にする
✅ チェックされた状態でOK - ルールタイプ
イベントパターンを持つルール - 次へ
イベントパターンを構築
- イベントパターン↠カスタムパターン (JSON エディタ)。を選択。
- イベントがその他になります。
カスタムJSONで正しいイベントパターンを手動で入力します。
{
"source": ["aws.connect"],
"detail-type": [
"Contact initiated",
"Contact disconnected"
]
}JSON🔍 それぞれの意味
| フィールド | 説明 |
|---|---|
| source | イベント発信元が Amazon Connect(=aws.connect)であることを指定 |
| detail-type | イベントの種類。今回は2つの通話イベントに反応させる: ・Contact initiated(通話開始) ・Contact disconnected(通話終了) |
右下の「次へ」ボタンをクリック。

ターゲットを選択(呼び出す処理)を設定
- ターゲットタイプ
→ 「AWSのサービス」にチェック(※すでに選択済み) - ターゲットを選択
→ プルダウンから「Lambda関数」を選択 - 関数(Lambda関数)
→ 「CallCounterUpdater」(事前に作成している想定)を選択 - 許可(IAMロール)
→ 実行ロールを使用(推奨) にチェックを入れる(※デフォルトでONのことが多い) - 実行ロール
→ 「この特定のリソースについて新しいロールを作成」を選択
→ 自動生成されたロール名(例:Amazon_EventBridge_Invoke_Lambda_1659983559)が表示される
→ このままでOK - 次へ
- ここで選ぶ関数は、Connectの通話イベントを受けて DynamoDB のカウントを +1 / -1 する処理を行う CallCounterUpdater Lambda です。
- 関数がまだ無ければ、先に作成しておく必要があります。
※タグの設定は特に必要ないので、次へ。
レビューと作成
個々の画面でも設定することはないので、確認のみします。「ルールの作成」 をクリック。
作成後は以下の確認をおすすめします。
- EventBridge → ルール一覧で(ConnectCallEventsRule)「有効」になっているか確認
- Amazon Connect で実際に着信イベントがトリガーされるかテスト
- CloudWatch Logs で Lambda の動作を確認(DynamoDB 更新確認も)
作成を完了
「ルールの作成」を押して完了
これで Amazon Connect の通話イベントが、自動で Lambda に流れるようになります。
🛠 STEP 5:Amazon Connect フロー修正(通話開始・終了でDynamoDBを更新)
🎯 目的:
Amazon Connect で発生する「通話開始(CONNECT_CONTACT_CONNECTED)」および「通話終了(CONNECT_CONTACT_DISCONNECTED)」イベントに応じて、DynamoDB のカウントを +1 / -1 する処理を正しく機能させるために、フローを調整してイベントが発火するように構成します。
構成手順
- Amazon Connect 管理画面へアクセス
- 「フロー」から対象のコンタクトフロー(例:問い合わせフロー)を選択
- 以下の2つの条件を満たすように構成を調整
- フロー開始時に「CONNECT_CONTACT_CONNECTED」イベントが発生するようにする(例:問い合わせ受付の開始)
- フロー終了時(切断時)に「CONNECT_CONTACT_DISCONNECTED」イベントが発生するようにする(例:切断やフローの終了)
- 不要なエラーブロックや未完了の分岐がないか確認
- イベントが発火しない原因になる可能性があります
注意ポイント
| 項目 | 内容 |
|---|---|
| ✅ 「人員の確認」ブロック等を利用する場合 | キューに入る or 対応エージェントの有無でフローが分岐しても、開始時点でイベントが発生します(CONNECT_CONTACT_CONNECTED) |
| ✅ フローが切断される条件 | 「切断」ブロックや「オペレーター対応後に通話が終了」など、終了条件を明確にし、CONNECT_CONTACT_DISCONNECTED が発火するようにします |
| ✅ デバッグ | 実際の通話後、Lambda(CallCounterUpdater)の CloudWatch Logs で Received event: ログが出ているか確認 |
フロー確認が終わったら
- EventBridge のルールが「有効」
- Lambda に AmazonDynamoDBFullAccess または最小権限のポリシーが付与済み
- DynamoDB のテーブルとカウンター項目(例:activeCalls)が作成済み
これで構成はすべて完了です。
必要であれば、「構成図」や「動作確認手順」もあわせてお出しできます。希望があればお知らせください。


