8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-13

はじめに

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ロールを設定する

lambda_function.py
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チャンネルがない場合、通知は飛びません。
#参考

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?