はじめに

AWS MediaLiveを利用していると、
チャンネルを停止するのを忘れてしまうことがあるかと思います。

起動中のままにしておくと、請求が高額になる可能性があります。
今回はそれを防ぐために、RUNNING状態のチャンネルをslackに自動通知させる仕組みを考えました。

やりたいこと

AWS MediaLiveで、ステータスが「RUNNING」となっているチャンネル情報を
自動的にSlackに通知させる。(どのタイミングで通知するかは任意で設定可能)

構成図

使用リソース

  • CloudWatch Events
  • Lambda
  • IAM
  • SNS

手順

SNS

1. SNSトピックを作成する。
2. サブスクリプションを作成する。

  • プロトコル:Eメール
  • エンドポイント:任意のメールアドレス

3. 指定したメールアドレスにAWSからメールが届くので、本文中のリンクをクリックして承認する。

  • 件名:Subscription Confirmation

4. ステータスが「確認済み」となっていることを確認する。

IAM

Lambdaに設定するIAMロールを作成する。

1. 下記のJSONをコピーして、新規にポリシーを作成する。
2. Lambda用のIAMロールを作成する。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Action": "medialive:ListChannels",
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": "sns:Publish",
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
        ],
        "Resource": "*"
    }
    ]
}

Lambda

Lambda関数を作成する。

  • ランタイム:Python3.8
  • タイムアウト:30秒
  • 実行ロール:先ほどのIAMロールを設定する
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import boto3
 
medialive = boto3.client('medialive')
sns = boto3.client('sns')
 
def lambda_handler(event, context):
    channels = medialive.list_channels()
    channel_list = []
 
    for Channels in channels['Channels'] :
        if Channels['State'] == 'RUNNING':
            name = Channels['Name']
            id = Channels['Id']
            state = Channels['State']
            channel_list.append("| " + name + " | " + id + " | " + state + " |")
 
    print('\n'.join(channel_list))
 
    if channel_list == []:
        pass
 
    else:
        request = {
            'TopicArn': "<SNSトピックのARN>",
            'Message': ('\n'.join(channel_list)),
            'Subject': "Running MediaLive Channels"
            }
        sns.publish(**request)

CloudWatch Events

CloudWatch Eventsでルールを作成する。

  • イベントソース:スケジュール(タイミングはお好みで)
  • ターゲット:先ほどのLambdaを設定する

Slack

ここでは説明しませんので、下記のサイト等をご参照ください。

出力例

  • Slack通知

※「RUNNING」状態のMediaLiveチャンネルがない場合、通知は飛びません。

参考

元記事はこちら

AWS MediaLiveチャンネルの停止忘れを防ぐための自動通知設定