Amazon Connect コスト集計手順書
概要
本書は、Amazon Connectのコストを電話番号および対象キューに応じて費用按分するための月次集計手順を記載します。
背景・目的
- 目的: 電話番号および対象キューに応じたAmazon Connectの費用按分
- 背景: オンライン事業部でコスト集計をしていたが、SREでコストモニタリングをするため、SREで引き継いだ
- 実施頻度: 毎月(月初から4日以内)
- 用途: AWSの費用按分作業のための資料作成
- 今後の展望: 完全自動化する(自動化まで本手順で対応する)
対象環境
- システム: Amazon Connect(FDシステム)
- AWSアカウントID: 913831226605
- リージョン: 東京(ap-northeast-1)
前提条件
必要な権限・アクセス
AWS 913831226605アカウント
- [ ] Amazon ConnectのRead権限
- [ ] AWS CloudShellへのAdmin権限
GCP oc-monitoringプロジェクト
- [ ] bigquery ジョブユーザー権限
- [ ] bigquery データ編集者権限
- [ ] bigquery ユーザー権限
Google Spreadsheet
- [ ] Google Spreadsheetの編集権限
- [ ] 前月のコストシートへの編集権限
必要なAWS IAM権限の内容(例)
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"connect:ListQueues",
"connect:DescribeQueue",
"connect:ListPhoneNumbersV2",
"connect:ListContactFlows",
"connect:BatchGetFlowAssociation"
],
"Resource": "arn:aws:connect:ap-northeast-1:913831226605:instance/*"
},
{
"Effect": "Allow",
"Action": [
"cloudshell:*"
],
"Resource": "*"
}
]
}必要なツール
- [ ] AWSコンソールへのアクセス
- [ ] Google Spreadsheet
- [ ] テキストエディタ(VSCode等)
注意事項
- 作業は 月初から4日以内 に完了すること
- 最終的なデータの整合性を必ず確認すること
- CloudShellでの作業完了後は必ずセッションを終了する
- ダウンロードしたCSVファイルは作業完了後に削除する
- 機密情報を含むデータの取り扱いに注意する
作業時間見積もり
- 作業: 約2-3時間
作業手順
1. 前月コストシートの複製
1.1 シートの複製
- 前月のシート(例:
amazon connect_YYYY年MM月版)を複製 - 一時的にマイドライブに保存
- 注意: 正規配置場所への移動は検討(TBD)
- 共有設定を前月シートと同じに設定
1.2 参照設定の修正
提出用シートのB列5行目 のRefで参照エラーを修正
- セルを選択してアクセス許可を追加
詳細版提出用B,C列の4,5行目 の数式を修正
- 数式内のスプレッドシートID(URLの
/d/の/までの後の文字列)を今回更新するシートのIDに変更
- 数式内のスプレッドシートID(URLの
詳細版提出用B列の5行目 の数式を修正
- 上記2と同様にスプレッドシートIDを更新
2. 集計対象月へのリネーム
2.1 シート名の変更
- シート名を集計対象月に変更
2.2 接続シートのクエリ修正
- 接続シート1〜5 のクエリを修正
- 検索範囲を集計対象月に変更
- 注意: 権限エラーが発生した場合は、オンライン事業部のPMにプロジェクト
oc-monitoringの権限追加を依頼する
- 注意: 権限エラーが発生した場合は、オンライン事業部のPMにプロジェクト
抽出データのシートの全てに対して画面左下に表示される青色の更新ボタンを押す
3. AWS CloudShellでのデータ取得
3.1 CloudShell起動
- AWSコンソールから913831226605アカウントにログイン
- 東京リージョン(ap-northeast-1) を選択
- CloudShellを起動
3.2 キューリスト取得
- キューIDを取得
bash
aws connect list-queues --instance-id dbdef82b-a066-4ad3-a9d1-1da163ccc52c > queues.json- スタンダードキューのIDを抽出
bash
cat queues.json | jq -r '.QueueSummaryList[] | select(.QueueType == "STANDARD") | .Id' > queue_ids.txt
cat queue_ids.txt- 重複を削除
bash
sort queue_ids.txt | uniq > unique_queue_ids.txt
wc -l unique_queue_ids.txtキュー詳細情報を取得
コマンド
bashecho "queue_name,description" > queues.csv # 合計件数取得 total=$(wc -l < unique_queue_ids.txt) count=0 while read -r queue_id; do count=$((count + 1)) echo "Processing $count / $total: $queue_id" response=$(aws connect describe-queue --instance-id dbdef82b-a066-4ad3-a9d1-1da163ccc52c --queue-id "$queue_id" 2>/dev/null) if [ $? -ne 0 ]; then echo "Error retrieving queue details for ID: $queue_id" >&2 continue fi echo "$response" | jq -r '[.Queue.Name, .Queue.Description // ""] | @csv' >> queues.csv done < unique_queue_ids.txt結果確認
bash
cat queues.csv- CSVファイルをソート
bash
# ヘッダーを抜き出して最上段に保存
head -n 1 queues.csv > sorted_queues.csv
# データ行だけソートして追記
tail -n +2 queues.csv | LC_ALL=C sort -t, -k1,1 >> sorted_queues.csv
# 結果確認
cat sorted_queues.csv- CSVファイルをダウンロード
- CloudShellの右上「アクション」メニューから、sorted_queues.csvをローカル環境にダウンロード
- ダウンロードファイルパス:/home/cloudshell-user/sorted_queues.csv
3.3 電話番号/フロー取得
情報取得
コマンド
bash#!/bin/bash INSTANCE_ID="dbdef82b-a066-4ad3-a9d1-1da163ccc52c" REGION="ap-northeast-1" OUTPUT_FILE="connect_phone_summary.csv" # CSVヘッダー出力 echo "\"Phone Number\",\"Description\",\"Phone Type\",\"Active Channels\",\"Contact flow/IVR\",\"Country\"" > "$OUTPUT_FILE" # Contact Flow ID → Name のマッピング declare -A FLOW_NAME_MAP while read -r FLOW_ID FLOW_NAME; do FLOW_NAME_MAP["$FLOW_ID"]="$FLOW_NAME" done < <(aws connect list-contact-flows \ --instance-id "$INSTANCE_ID" \ --region "$REGION" \ --query 'ContactFlowSummaryList[*].[Id, Name]' \ --output text) # list-phone-numbers-v2(TargetArnを用いた Voice 判定) aws connect list-phone-numbers-v2 \ --instance-id "$INSTANCE_ID" \ --region "$REGION" \ --query 'ListPhoneNumbersSummaryList[*]' \ --output json | jq -c '.[]' | while read -r row; do PHONE_ID=$(echo "$row" | jq -r '.PhoneNumberId') PHONE_NUM=$(echo "$row" | jq -r '.PhoneNumber') DESC=$(echo "$row" | jq -r '.PhoneNumberDescription // ""') TYPE=$(echo "$row" | jq -r '.PhoneNumberType // ""') COUNTRY=$(echo "$row" | jq -r '.PhoneNumberCountryCode // ""') # ✅ Active Channel:TargetArn が存在すれば Voice HAS_TARGET=$(echo "$row" | jq -r '.TargetArn') if [[ "$HAS_TARGET" != "null" && -n "$HAS_TARGET" ]]; then CHANNEL="Voice" else CHANNEL="-" fi # Flow 情報取得 FLOW_ID=$(aws connect batch-get-flow-association \ --instance-id "$INSTANCE_ID" \ --region "$REGION" \ --resource-type VOICE_PHONE_NUMBER \ --resource-ids "$PHONE_ID" \ --query "FlowAssociationSummaryList[0].FlowId" \ --output text 2>/dev/null) if [[ "$FLOW_ID" != "None" && "$FLOW_ID" != "null" ]]; then FLOW_ID_SHORT="${FLOW_ID##*/}" FLOW_NAME="${FLOW_NAME_MAP[$FLOW_ID_SHORT]}" [[ -z "$FLOW_NAME" ]] && FLOW_NAME="(Unknown)" else FLOW_NAME="(Not Set)" fi # ✅ 出力(画面表示 + CSV追記) printf '"%s","%s","%s","%s","%s","%s"\n' \ "$PHONE_NUM" "$DESC" "$TYPE" "$CHANNEL" "$FLOW_NAME" "$COUNTRY" | tee -a "$OUTPUT_FILE" done
以下のエラーが発生した場合の対処法:: CloudShellを閉じて、しばらく待ってから再実行
An error occurred (TooManyRequestsException) when calling the ListPhoneNumbersV2 operation (reached max retries: 2): Too Many Requests- CSVファイルをダウンロード
- CloudShellの右上「アクション」メニューから、connect_phone_summary.csvをローカル環境にダウンロード
- ダウンロードファイルパス:/home/cloudshell-user/connect_phone_summary.csv
4. データの貼り付け・整理
4.1 キューリストの更新
- 「キューリスト」シートを開く
- A,B,C列 の色と太文字設定を元に戻す
- 取得したデータを F,G列 に貼り付け
- A,B列にはあるがF,G列にはなくFALSE判定でズレた場合: F,G列にセルを挿入して空白行にし次の行がTRUEになるまで揃える
- A,B列にないがF,G列にはありFALSE判定でズレた場合: A,B,C列にセルを挿入して空白行しF,G列と同じ内容を転記しA,B,C列を赤い太文字にする。
- category_queueが不明なものは 他のシートを参考に調べる。不明な場合はオンライン事業部のPMに確認する。
4.2 番号リストの更新
データ前処理:
connect_phone_summary.csvに対してdescription部分に改行が入っていることがあるので改行を削除(以下のスクリプト使用)
script
bash#!/bin/bash INPUT_FILE="connect_phone_summary.csv" OUTPUT_FILE="connect_phone_summary_output.csv" # 出力ファイル初期化 > "$OUTPUT_FILE" # ステップ1: 行頭に ' がなければ付けて、current_line に全行を読み込む current_line="" while IFS= read -r line || [ -n "$line" ]; do # 行頭に ' がなければ追加 [[ $line != \'* ]] && line="'$line" current_line="${current_line}${line}" done < "$INPUT_FILE" # ステップ2: "JP" の直後に改行を挿入して、output.csv に出力 echo "$current_line" | perl -pe 's/"JP"/"JP"\n/g' > "$OUTPUT_FILE"スプレッドシート更新:
- 「番号リスト」シートのA,B,C列 の色と太文字設定を元に戻す
- 処理済みデータを F列以降 に貼り付け
- A,B列にはあるがF,G列にはなく不一致判定でズレた場合: F~P列にセルを挿入して空白行にし次の行がTRUEになるまで揃える
- A,B列にないがF,G列にはあり不一致判定でズレた場合: A,B,C列にセルを挿入して空白行しF,G列と同じ内容を転記しA,B,C列を赤い太文字にする。
5. 詳細版の調整
5.1 X列の数値調整
- 詳細版提出用シートのX列の2行目: 「番号リスト」シートでA,B,C列を更新し番号が増えた場合は保有回線数の数値を増やす
5.2 詳細版ソート処理
- 詳細版提出用 シートの全列6行目から下の値を全て 詳細版ソート シートの6行目に転記
- 詳細版ソート シートのR列を降順でソート
6. 作業完了連絡
6.1 オンライン事業部の担当者、アシスタントに連絡
- 以下の担当者にslackで完了連絡を入れる(2025/09時点の担当者)
- オンライン事業部 伊藤勇樹
- オンライン事業部 伊藤裕哉
- アシスタント 伊藤園子
改版履歴
| バージョン | 日付 | 変更内容 | 作成者 |
|---|---|---|---|
| 1.0 | 2025-09-04 | 初版作成 | 大賀 |
| 1.1 | 2025-10-02 | 手順とスクリプト修正 | 大賀 |