Bug #15
Updated by Redmine Admin 2 months ago
# EndEnd Quality Check Deployment
version 02: 2026-04-23
<!-- @import "[TOC]" {cmd="toc" depthFrom=2 depthTo=3 orderedList=false} -->
<!-- code_chunk_output -->
- [概要](#概要)
- [デプロイターゲット](#デプロイターゲット)
- [作成されるリソース・権限他](#作成されるリソース権限他)
- [デプロイメント手順](#デプロイメント手順)
- [params.jsonの作成](#paramsjsonの作成)
- [環境変数の設定](#環境変数の設定)
- [CloudFormation コマンド](#cloudformation-コマンド)
- [params.json](#paramsjson)
- [create-stack 実行時に指定する主なパラメータ(説明)](#create-stack-実行時に指定する主なパラメータ説明)
- [更新時の反映方針(運用ルール)](#更新時の反映方針運用ルール)
- [その他](#その他)
- [Lambda環境変数](#lambda環境変数)
<!-- /code_chunk_output -->
## 概要
EndEndツールのコールログに記録されるPESQ値をチェックし閾値未満である場合にメール通知を行うLambda関数をデプロイ。
CloudFormation テンプレート、**`endend-quality-check.yml`** を使用してデプロイ。

configuration.png

### デプロイターゲット
2026年4月時点では以下のAWSアカウントにデプロイ。
- `IPVC-TOKYO` `AccountID :311376832000`
- `IPVC-OSAKA` `AccountID :381491903436` MFAアクセス
### 作成されるリソース・権限他
`endend-quality-check.yml`で作成されるリソース・権限は以下。
- AWS::IAM::Role `endend-role-quality-check-lambda`
- AWS::SNS::Topic `endend-sns-quality-check-alarm`
- AWS::Logs::MetricFilter - Log Group EndEnd に対しパターン [ a="*,0,*" ] で設定
- AWS::CloudWatch::Alarm `endend-pesq-quality-<StackId>`、Namespace `EC2/Application`
- AWS::Lambda::Function `endend-quality-alert`
- AWS::Lambda::Permission - CloudWatchからLambdaの呼び出しを許可
<div style="page-break-before:always"></div>
## デプロイメント手順
### params.jsonの作成
CloudFormation のパラメータは JSON ファイルで渡す。`./params`ディレクトリ配下に`EndEnd監視システム名`をつけたjsonファイルを作成し配置。
EndEnd監視システム、#2(IPVC-OSAKA)の例: `#2_ipvc-osaka_params.json`
```json
[
{"ParameterKey":"SystemName","ParameterValue":"endend"},
{"ParameterKey":"Environment","ParameterValue":"#2(ipvc-osaka)"},
{"ParameterKey":"AlarmNotificationEmail","ParameterValue":"sbc-tech@ntt.com"},
{"ParameterKey":"SBCLogGroupName","ParameterValue":"EndEnd"},
{"ParameterKey":"AlarmFilterPattern","ParameterValue":"[ a=\"*,0,*\" ]"},
{"ParameterKey":"ExistingLambdaRoleArn","ParameterValue":""},
{"ParameterKey":"PermissionBoundaryArn","ParameterValue":""},
{"ParameterKey":"MonitoringPeriod","ParameterValue":"60"}
]
```
note:
- `SystemName`と`Environment`はメールのSubjectに利用される。
- `PESQThreshold`: `2.6`はCloudFormationテンプレートで固定。
### 環境変数の設定
アカウントごとの環境変数を設定し、デプロイする。
- wxc-dev-work
```bash
PARAMS_FILE="${PARAMS_FILE:-params/wxc-dev_params.json}"
REGION="${REGION:-ap-northeast-1}"
PROFILE="${PROFILE:-wxc-dev-work}"
echo $PARAMS_FILE
echo $REGION
echo $PROFILE
```
- #2_ipvc-osaka
```bash
PARAMS_FILE="${PARAMS_FILE:-params/#2_ipvc-osaka_params.json}"
REGION="${REGION:-ap-northeast-3}"
PROFILE="${PROFILE:-381491903436-mfa}"
```
- #1_ipvc-tokyo
```bash
PARAMS_FILE=#1_ipvc-tokyo_params.json
REGION=ap-northeast-1
PROFILE=311376832000
```
### CloudFormation コマンド
#### create-stack
```bash
aws cloudformation create-stack \
--stack-name endend-quality-check \
--template-body file://endend-quality-check.yml \
--parameters file://params/"${PARAMS_FILE}" \
--capabilities CAPABILITY_NAMED_IAM \
--region "${REGION}" \
--profile "${PROFILE}" && \
aws cloudformation wait stack-create-complete \
--stack-name endend-quality-check \
--region "${REGION}" \
--profile "${PROFILE}" && \
echo "CREATE COMPLETE"
```
#### update-stack
```bash
aws cloudformation update-stack \
--stack-name endend-quality-check \
--template-body file://endend-quality-check.yml \
--parameters file://params/"${PARAMS_FILE}" \
--capabilities CAPABILITY_NAMED_IAM \
--region "${REGION}" \
--profile "${PROFILE}" && \
aws cloudformation wait stack-update-complete \
--stack-name endend-quality-check \
--region "${REGION}" \
--profile "${PROFILE}" && \
echo "UPDATE COMPLETE"
```
#### delete-stack
```bash
aws cloudformation delete-stack \
--stack-name endend-quality-check \
--region "${REGION}" \
--profile "${PROFILE}" && \
aws cloudformation wait stack-delete-complete \
--stack-name endend-quality-check \
--region "${REGION}" \
--profile "${PROFILE}" && \
echo "DELETE COMPLETE"
```
<div style="page-break-before:always"></div>
## params.json
### create-stack 実行時に指定する主なパラメータ(説明)
以下は `aws cloudformation create-stack` 実行時に指定する`params.json`のパラメータ一覧。`ExistingLambdaRoleArn` と `PermissionBoundaryArn` の扱いに注意(後述)。
| パラメータ | 必須 | デフォルト | 説明 / 備考 |
|---|:---:|---|---|
| `SystemName` | 必須 | `endend` | メール件名に使用。 |
| `Environment` | 必須 | `#1(IPVC-Tokyo)` | 環境名。メール件名に使用。`#1(ipvc-tokyo)` or `#1(ipvc-osaka)` |
| `AlarmNotificationEmail` | 必須 | なし | 通知先メールアドレス。 |
| `SBCLogGroupName` | デフォルト | `EndEnd` | 監視対象の CloudWatch Logs の LogGroup 名。 |
| `AlarmFilterPattern` | 必須 | `[ a="*05034881413*" && a="*,0,*" ]` | MetricFilter のパターン。特殊文字を含むためシングルクォートで囲んで指定。 |
| `PESQThreshold` | デフォルト | `2.6` | Lambda 内で使用する閾値(float)。 |
| `MonitoringPeriod` | デフォルト | `60` | アラームの評価間隔(秒)。CloudWatch の評価間隔と連動するため `60` 固定。 |
| `AlarmFunction` | デフォルト | `quality-alert` | 作成する Lambda の名前。変更すると Lambda が置換される。 |
| `ExistingLambdaRoleArn` | 任意 | 空 (`""`) | 既存の Lambda 実行ロールの ARN を指定するとテンプレートはロールを作成せず既存ロールを使用。ARN をシングルクォートで囲む。 |
| `PermissionBoundaryArn` | 任意 | 空 (`""`) | 新規ロール作成時に適用する Permissions Boundary の ARN。組織で Boundary が必須な場合は必ず指定。(スタック実行ユーザに `iam:PutRolePermissionsBoundary` 権限が必要)。 |
#### 補足: `ExistingLambdaRoleArn` / `PermissionBoundaryArn` の扱い
- `ExistingLambdaRoleArn` を指定すると(ARN を渡す)テンプレートは既存ロールを使用し、新しい IAM ロールは作成されません。空文字を指定するとテンプレートで新規ロールを作成。
- 組織ポリシーで Permissions Boundary の適用が必須な場合、`PermissionBoundaryArn` を指定。新規ロール作成時に Boundary を適用するため、スタック実行ユーザに `iam:CreateRole` と `iam:PutRolePermissionsBoundary`(または十分な IAM 権限)が必要。
Lambda関数用のロールがすでにある場合と、新規に作成する場合でparms.jsonの設定を変更する必要がある。
<div style="page-break-before:always"></div>
### 更新時の反映方針(運用ルール)
テンプレートやパラメータを変更する際の最小限の運用ルール。
- 再作成を必要とするパラメータ( `delete-stack` → `create-stack` による再作成):
- `AlarmFunction`(Lambda 名)
- `ExistingLambdaRoleArn`(空 ⇄ ARN の切替はロール作成条件を変える)
- `SBCLogGroupName`(MetricFilter の監視対象を変更すると再作成が発生する場合がある)
- アップデイトで反映:
`SystemName`, `Environment`,`AlarmFilterPattern`, `MonitoringPeriod`, `PESQThreshold`, `AlarmNotificationEmail`
## その他
### Lambda環境変数
以下はCloudFormation パラメータとデプロイ時に Lambda 実行環境に注入される環境変数の対応表です。
| CloudFormation パラメータ / リソース | Lambda 環境変数 | 説明 |
|---|---|---|
| `SystemName` | `SYSTEM_NAME` | メール件名に使用。 |
| `Environment` | `ENVIRONMENT` | 環境名。メール件名に使用。 |
| `AlarmNotificationEmail` | `ALARM_NOTIFICATION_EMAIL` | 通知先メールアドレス(SNS サブスクリプション確認が必要)。 |
| `SBCLogGroupName` | `LOG_GROUP_NAME` | 監視対象 CloudWatch Logs の LogGroup 名。 |
| `AlarmFilterPattern` | `ALARM_FILTER_PATTERN` | MetricFilter と同一のフィルターパターン。シェルでクォートして指定。 |
| `MonitoringPeriod` | `PERIOD` | Lambda 内で `int()` して使用する秒数。CloudWatch の評価間隔と連動するため `60` に固定。 |
| `PESQThreshold` | `PESQ_THRESHOLD` | Lambda 内で `float()` して使用する閾値(例: `2.6`)。 |
| SNS Topic(出力/リソース) | `SNSTopic` | テンプレートで作成される SNS Topic の ARN が注入される(Topic ARN)。 |