[UPDATE] Amazon IVSがAWS CloudFormationをサポートしました!

Amazon Interactive Video Service (Amazon IVS)がAWS CloudFormationをサポートしました。Channel作成について実際にテンプレートファイルを準備してスタックを作成、挙動を確認しています。
2020.10.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。本日お届けするアップデートはこちら!簡単にセットアップでき、しかも超低遅延な配信ができるAWSのライブストリーミングソリューションAmazon Interactive Video Service (Amazon IVS)がAWS CloudFormatioに対応しました!AWS Developer Forumsに2020/10/30にポストされたアップデートになります。

Amazon IVSをCloudFormationで作成してみた

では実際に、Amazon IVSのリソースをAmazon CloudFromationで作成してみたいと思います。CloudFormationのドキュメント内、テンプレートリファレンスを確認してみます。

以下の3つのリソースタイプが定義されていることがわかります。

通常のライブストリーミング配信のほか、プライベートチャンネルでの配信の構成もCloudFormationを用いて作成できそうですね。本エントリでは取り急ぎ、Channelリソースの作成をしてみたいと思います。AWS::IVS::Channelのドキュメント(テンプレートリファレンス)を参考に、以下のテンプレートファイルを作成しました。LatencyModeとTypeは、あえてデフォルトではない設定をしています。(LatencyModeならNORMAL、TypeならBASIC)

amazon-ivs-now-supports-aws-cloudformation.yaml

AWSTemplateFormatVersion: 2010-09-09
Resources:
  IVSChannel:
    Type: AWS::IVS::Channel
    Properties:
      Name: cfn-channel
      LatencyMode: NORMAL
      Type: BASIC
Outputs:
  IVSChannelArn:
    Value: !Ref IVSChannel
  IVSChannelIngestEndpoint:
    Value: !GetAtt IVSChannel.IngestEndpoint
  IVSChannelPlaybackUrl:
    Value: !GetAtt IVSChannel.PlaybackUrl

このファイルからCloudFormationスタックを作成していきます。マネージメントコンソールでAmazon IVSをサポートしているリージョン(今回はus-west-2/Oregon)を選択し、Create stack画面でテンプレートファイルをアップロードします。

Stack nameを適切に入力し、進みます。

次の画面はそのまま[Next]で進み、最後のレビュー画面で内容を確認して[Create stack]します。

1分かかることなくすぐに、リソース作成が完了しCREATE_COMPLETEの状態になりました!

IVSのマネジメントコンソールでもリソースを確認してみましょう。問題なくリソースが作成されていますね。

なお、IVS ChannelのIngestEndpointやPlaybackURLについてはCloudFormationリソース作成時のReturn valueでも確認ができます。今回使用したCloudFormationテンプレートでもOutputsで出力していますが、以下のようになります。(IngestEndtpointについては先頭にrtmps://、末尾に/app/を入れておくとより良さそうですね。

なお、2020/10/31 18:30現在、私が確認した限りですが、以下のようなテンプレートファイルで、Channelリソースと同時にStreamKeyリソースを作成しようとすると「ivs.ServiceQuotaExceededException: Resource: stream-key quota exceeded limit: 1」というエラーになりリソースの作成が行えませんでした。(結果、ROLLBACKしてしまいます。) AWS::IVS::Channelのドキュメントページによると、AWS::IVS::Channelリソース作成時にはStreamKeyが作成されない(ので、AWS::IVS::StreamKeyリソースで別途作成する必要がある)とのことなのですが、実際には作成されてしまっているのかな?と推測しています。(いずれにせよ、AWS::IVS::StreamKeyリソースの作成も組み合わせることができれば、CloudFormationスタック作成時のOutputで配信に必要な情報がすベて確認できそうですね。)

AWSTemplateFormatVersion: 2010-09-09
Resources:
  Channel:
    Type: AWS::IVS::Channel
    Properties:
      Name: MyChannel
      Tags:
        - Key: MyKey
          Value: MyValue
  StreamKey:
    Type: AWS::IVS::StreamKey
    Properties:
      ChannelArn: !Ref Channel
      Tags:
        - Key: MyKey
          Value: MyValue
Outputs:
  ChannelArn:
    Value: !Ref Channel
  ChannelIngestEndpoint:
    Value: !GetAtt Channel.IngestEndpoint
  ChannelPlaybackUrl:
    Value: !GetAtt Channel.PlaybackUrl
  StreamKeyArn:
    Value: !Ref StreamKey

まとめ

Amazon Interactive Video Service (Amazon IVS)でAWS CloudFormationを使ってリソースを作成してみました。Amazon IVSはリリース当時からAWS CLIでの対応はしていましたが、リソース構築などの選択肢が増えるのは嬉しいですね。またStreamKeyとの連携部分やプライベートチャンネル配信時に必要と思われるPlaybackKeyPairとの連携、リソースの更新時の挙動なども追って確認していきたいと思います。