はじめに

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ロールを作成する。

{
    "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ロールを設定する
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チャンネルの停止忘れを防ぐための自動通知設定