【小ネタ】AWS CDKでKinesis Video Streamsを利用できなかった話
カフェチームの山本です。
現在、カフェのシステムでは、機械学習を用いて、カメラを用いて動画を撮影し、商品の前にいる人物の骨格や手を検出することで、どのユーザがどの商品を取り出したかを判定しています。
そのために、エッジデバイスからクラウドに動画を送信し、クラウド側で様々な処理を実行する、という構成を検討しており、最近の記事で、Kinesis Video Streamsを使った、エッジデバイスでの動画処理と、クラウド側の処理について記載しました。
撮影した動画をリアルタイムにエンコードする方法【GStreamer】
今回は、クラウド(AWS)側のリソースを管理するためにCDKを使おうとした際に、Kinesis Video Streams(以下、KVS)を利用できなかった(2021/06/03現在)ようだったので、その内容と自分が行った対処に関して記載します。
CDKにはKVSがない
AWS CDKのAPI Referenceのページを見てみると、kinesisと名前がつくものは以下の4つがありました。
- @aws-cdk/aws-kinesis
- @aws-cdk/aws-kinesisanalytics¹
- @aws-cdk/aws-kinesisanalytics-flink
- @aws-cdk/aws-kinesisfirehose¹
@aws-cdk/aws-kinesisは、Kinesis Data Streamsであり、ほかのものも名前の通りKVSではありません。
対処
ストリームの作成・削除
CDKから作成することはできないため、他の手段を使う必要があります。簡単に作成するなら、AWS CLIが良いと思われます。以下のコマンドで、動画データを24時間保持する設定のストリームの作成と、作成したストリームの削除ができます。、
aws kinesisvideo create-stream --stream-name test_stream --data-retention-in-hours 24 aws kinesisvideo create-stream --stream-arn (作成したストリームのARN)
アクセス権限の付与
前回の記事で書いたようにLambda関数からKVSにアクセスする際には、Lambda関数のIAMロールに権限を付与する必要があります。
CDKでLambda関数を管理し、KVSへのアクセス権限を与えるには、例えば、以下のようにすることができます。KVS_STREAM_ARNには予め作成したKVSストリームのARNを、LAMBDA_ASSET_PATHには実行したいLambda関数のコードへのパスを、それぞれ指定してください(アクセスするKVSストリームを制限しない場合は、「"*"」を指定してください)。
import * as cdk from '@aws-cdk/core'; import * as lambda from "@aws-cdk/aws-lambda"; import * as iam from "@aws-cdk/aws-iam"; const KVS_STREAM_ARN = "(KVSストリームのARN)" const LAMBDA_ASSET_PATH = "(Lambda関数のコードへのパス)" export class KvsAccessStack extends cdk.Stack { private function_kvs_access: lambda.Function; constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); this.function_kvs_access = new lambda.Function(this, "function_kvs_access", { code: new lambda.AssetCode(LAMBDA_ASSET_PATH), handler: "lambda_function.lambda_handler", runtime: lambda.Runtime.PYTHON_3_6, memorySize: 2048, timeout: cdk.Duration.seconds(30), }); this.function_kvs_access.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, resources: [KVS_STREAM_ARN], actions: ['kinesisvideo:*'], })) } }
まとめ
CDKからKVSを利用できないようでした。また、簡単ですが、対処法について記載しました。