この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
カフェチームの山本です。
現在、カフェのシステムでは、機械学習を用いて、カメラを用いて動画を撮影し、商品の前にいる人物の骨格や手を検出することで、どのユーザがどの商品を取り出したかを判定しています。
そのために、エッジデバイスからクラウドに動画を送信し、クラウド側で様々な処理を実行する、という構成を検討しており、最近の記事で、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を利用できないようでした。また、簡単ですが、対処法について記載しました。