Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@ktsuchi

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

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

参考

3
Help us understand the problem. What is going on with this article?
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
ktsuchi
動画配信チームで働いています。
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?