⑨M3U8生成WebAPIの作成(Python/AWS Lambda)
前回の記事はこちら
はじめに
本章では、HLS(HTTP Live Streaming)のインデックスファイルであるM3U8を動的に生成して返却するLambda関数をPythonで作成します。
AWS Lambdaとは、いわゆるサーバーレスなシステムを実現する為の、イベント駆動型コンピューティングサービスです。
今回は、Lambdaで、指定した区間の動画を再生する為のM3U8ファイルを、動的に作成する機能を作ります。
さらに、WebAPIとして通常のHTTPリクエストでアクセスできるように、関数URLを生成します。
なお、本記事の後半は有料記事になっており、ソースコードの説明と全ソースコードの公開を行っています。
Lambda関数の作成
まずはAWSのコンソールにログインして、Lambdaのページを開きます。
「関数の作成」ボタンを押すと、「関数の作成」ページが開きますので、関数の名前(ここではCreateM3U8Sampleとしています)を入力し、ランタイムとして「Python3.10」を選択し、関数を作成します。
関数が作成されると、下記のような画面が表示されます。
Lambdaでは、ブラウザ上でコードの入力ができます。
VisualStudio Codeなどで作成することも可能ですが、今回は、このままブラウザ上のエディターを使用していきます。
関数を作成した状態では、サンプル用のコードが記載されています。
このコードでは、この関数にアクセスすると、「Hello from Lambda!」という文字列が返却される内容になっています。
とりあえずコードはそのままにして、必要な設定を行っていきます。
Lambda関数の設定
以下の設定を行います。
一般設定
タイムアウトの変更
アクセス権限
AmazonS3ReadOnlyAccess権限を関数の権限に追加
関数URL
関数URLを作成
通常のHTTPリクエストを受け付けることができるようになる
環境変数
プログラム起動時に渡す設定値を環境変数で設定
各種設定は「設定」タブを開いて行います。
一般設定:タイムアウトの変更
まずは「一般設定」を選択して、タイムアウトを変更します。
このタイムアウトに設定された時間を超えた処理を行うと、処理の途中でも関数が中断されてしまいます。
Lambdaでは最高15分までの処理を行えますが、今回は関数URLの設定をしてウェブブラウザからHTTPでアクセスします。
その場合、ブラウザ側のタイムアウト(通常は30秒)で、ブラウザ側から切断されてしまうので、あまり長い時間を設定しても無意味になってしまいます。
ただ、3秒は短すぎるので、30秒に変更します。
アクセス権限の設定
次に、この関数のアクセス権限を設定します。
AWSで権限設定を行うサービスは、IAM(Identity and Access Management)になります。
関数作成時に最低限必要な権限を付与した、この関数の権限(IAMロール)が自動作成されていますので、そのIAMロールに対して、今回のプログラム内部で使用する、AWS S3の読み込み権限を追加します。
「アクセス権限」を選択すると、自動生成されたIAMロールが表示されますので、それをクリックします。
クリックすると、IAMサービス画面に遷移し、この関数のIAMロールの設定画面が開きます。
この画面上で、「許可を追加」ボタンを押し、プルダウンメニューから「ポリシーをアタッチ」を選びます。
アタッチするポリシーを選択する画面が開きますので、検索窓に「s3」と入力して、「AmazonS3ReadOnlyAccess」チェックを入れて保存します。
これで、この関数からS3の情報を読み込むことができるようになりました。
関数URLの作成
次に関数URLを選択して、関数URLを作成します。
通常、Lambda関数へアクセスするには、AWS SDKなどを使用して、実行権限を付与したプログラム内部から行います。
ただ、今回は、公開されたHTTP関数として設定し、外部の再生プレイヤーで再生できるように設定します。
関数URLを選択し、「関数URLを作成」ボタンを押し、「関数URLを設定」画面を開きます。
このページで、「認証タイプ」を「NONE」に設定して保存すると、このLambda関数にHTTPでアクセスする為のURLが表示されます。
試しに、上記のURLにブラウザでアクセスしてみてください。
「Hello from Lambda!」という文字列が表示されればOKです。
環境変数
Lambdaでは、起動時に必要な情報を、環境変数経由で渡すことができます。
今回は、以下の情報を環境変数に設定します。
S3_BUCKETNAME
MPEG2-TSファイルを保存しているS3バケット名
公開設定を行っておいてください
S3_HOSTING_URL
上記のS3バケットで設定した、静的ウェブサイトホスティングのURL
S3_MOVIE_KEY
MPEG2-TSファイルが保存されるS3上のフォルダ名
「movie」を設定してください
TARGET_DURATION
MPEG2-TSファイルの長さ(秒)
30を指定してください
ソースコードの貼り付け
本章の最後にソースコードを載せてありますので、それをコピーして、コードエディタ上にそのまま張り付けてください。
コードを張り付けただけでは、まだ反映されていません。
上部の「Deploy」ボタンを押すことで、Lambda関数に反映されますので、コードを変更した際は、必ず「Deploy」ボタンを押してください。
これでLambda関数の作成は完了です。
次の記事
処理説明
以降では、M3U8生成WebAPiとして作成したAWS Lambda関数の処理の流れの説明と、関数のソースコードを公開します。
関数全体の流れは以下のようになります。
ここから先は
¥ 1,200
この記事が気に入ったらチップで応援してみませんか?