Help us understand the problem. What is going on with this article?

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

はじめに

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

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

やりたいこと

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

構成図

ScreenShot 2020-03-04 12.20.39.png

使用リソース

  • CloudWatch Events
  • Lambda
  • IAM
  • SNS

手順

SNS

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

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

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

・件名:Subscription Confirmation

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

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通知 slack-sns.png

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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした