チュートリアル: Amazon Rekognition Lambda アプリケーションの作成 - AWS Toolkit for Visual Studio

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル: Amazon Rekognition Lambda アプリケーションの作成

このチュートリアルでは、Amazon Rekognition を使用して、検出ラベルのタグを Amazon S3 オブジェクトに付ける Lambdaアプリケーションを作成する方法を示します。

の設定に関する前提条件と情報については AWS Toolkit for Visual Studio、「Toolkit for Visual Studio の AWS Lambda テンプレートの使用」を参照してください。 AWS

Visual Studio の NET Core Lambda Image Rekognition プロジェクトを作成します

以下の手順では、から Amazon Rekognition Lambda アプリケーションを作成する方法について説明します。 AWS Toolkit for Visual Studio

注記

作成時、アプリケーションには 2 つのプロジェクトからなるソリューションが作成されます。1 つは Lambda にデプロイする Lambda 関数コードを含むソースプロジェクト、もう 1 つは関数をローカルでテストするための xUnit を使用するテストプロジェクトです。

Visual Studio NuGet がプロジェクトのすべての参照を見つけられない場合があります。これは、ブループリントには依存関係が必要であり、そこから取得する必要があるためです。 NuGet新しいプロジェクトが作成されると、Visual Studio はローカル参照のみを取得し、リモート参照は取得しません。 NuGet NuGet エラーを修正するには、参照を右クリックして [パッケージを復元] を選択します。

  1. Visual Studio から [ファイル] メニューを展開し、[新規] を展開して [プロジェクト] を選択します。

  2. 新規プロジェクト」ダイアログで、「言語」、「プラットフォーム」、「プロジェクトタイプ」の各ドロップダウンボックスが「すべて...」に設定されていることを確認し、「検索aws lambda フィールドに入力します。

  3. AWS Lambda テスト付き (.NET Core-C#) テンプレートを選択します。

  4. [次へ] をクリックして [新規プロジェクトの設定] ダイアログを開きます。

  5. 新規プロジェクトの設定」ダイアログで、「名前 ImageRekognition」に「」と入力し、残りのフィールドを好みに合わせて入力します。[作成] ボタンを選択して [ブループリントの選択] ダイアログに進みます。

  6. [ブループリントの選択] ダイアログから [イメージラベルの検出] ブループリントを選択し、[完了] を選択して Visual Studio プロジェクトを作成します。

    注記

    このブループリントには Amazon S3 イベントをリッスンするためのコードがあり、Amazon Rekognition を使用してラベルを検出し、それらを Amazon S3 オブジェクトにタグとして追加できます。

プロジェクトファイルのレビュー

以下のセクションでは、これらのプロジェクトファイルを調べます。

  1. Function.cs

  2. aws-lambda-tools-defaults.json

1. Function.cs

Function.csファイル内のコードの最初の部分は、ファイルの上部にあるアセンブリ属性です。デフォルトでは、Lambda は入力パラメータと戻り値の型のみを受け入れます。System.IO.Stream入力パラメータと戻り値の型に型付きクラスを使用するには、シリアライザーを登録する必要があります。アセンブリ属性は、Newtonsoft.Jsonストリームを型付きクラスに変換するために使用する Lambda JSON シリアライザーを登録します。シリアライザーをアセンブリまたはメソッドレベルで設定できます。

以下はアセンブリ属性の例です。

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

このクラスには、2 つのコンストラクタがあります。1 つ目は、デフォルトコンストラクタで、Lambda がユーザーの関数を呼び出すときに使用されます。このコンストラクターは Amazon S3 サービスクライアントと Amazon Rekognition サービスクライアントを作成します。また、コンストラクタは、デプロイ時に関数に割り当てた IAM AWS ロールからこれらのクライアントの認証情報を取得します。 AWS クライアントのリージョンは、Lambda 関数が実行されているリージョンに設定されます。この設計図では、Amazon Rekognition サービスがラベルについて最低限の信頼度を持っている場合にのみ、Amazon S3 オブジェクトにタグを追加する必要があります。このコンストラクタは環境変数 MinConfidence をチェックして、許容できる信頼レベルを決定します。この環境変数は、Lambda 関数をデプロイするときに、設定できます。

以下は、のファーストクラスコンストラクターの例です。Function.cs

public Function() { this.S3Client = new AmazonS3Client(); this.RekognitionClient = new AmazonRekognitionClient(); var environmentMinConfidence = System.Environment.GetEnvironmentVariable(MIN_CONFIDENCE_ENVIRONMENT_VARIABLE_NAME); if(!string.IsNullOrWhiteSpace(environmentMinConfidence)) { float value; if(float.TryParse(environmentMinConfidence, out value)) { this.MinConfidence = value; Console.WriteLine($"Setting minimum confidence to {this.MinConfidence}"); } else { Console.WriteLine($"Failed to parse value {environmentMinConfidence} for minimum confidence. Reverting back to default of {this.MinConfidence}"); } } else { Console.WriteLine($"Using default minimum confidence of {this.MinConfidence}"); } }

次の例は、2 番目のコンストラクターをテストに利用する方法を示しています。テストプロジェクトは独自の S3 クライアントと Rekognition クライアントを設定し、それらを渡します。

public Function(IAmazonS3 s3Client, IAmazonRekognition rekognitionClient, float minConfidence) { this.S3Client = s3Client; this.RekognitionClient = rekognitionClient; this.MinConfidence = minConfidence; }

FunctionHandlerファイル内のメソッドの例を以下に示します。Function.cs

public async Task FunctionHandler(S3Event input, ILambdaContext context) { foreach(var record in input.Records) { if(!SupportedImageTypes.Contains(Path.GetExtension(record.S3.Object.Key))) { Console.WriteLine($"Object {record.S3.Bucket.Name}:{record.S3.Object.Key} is not a supported image type"); continue; } Console.WriteLine($"Looking for labels in image {record.S3.Bucket.Name}:{record.S3.Object.Key}"); var detectResponses = await this.RekognitionClient.DetectLabelsAsync(new DetectLabelsRequest { MinConfidence = MinConfidence, Image = new Image { S3Object = new Amazon.Rekognition.Model.S3Object { Bucket = record.S3.Bucket.Name, Name = record.S3.Object.Key } } }); var tags = new List(); foreach(var label in detectResponses.Labels) { if(tags.Count < 10) { Console.WriteLine($"\tFound Label {label.Name} with confidence {label.Confidence}"); tags.Add(new Tag { Key = label.Name, Value = label.Confidence.ToString() }); } else { Console.WriteLine($"\tSkipped label {label.Name} with confidence {label.Confidence} because maximum number of tags reached"); } } await this.S3Client.PutObjectTaggingAsync(new PutObjectTaggingRequest { BucketName = record.S3.Bucket.Name, Key = record.S3.Object.Key, Tagging = new Tagging { TagSet = tags } }); } return; }

FunctionHandler は、インスタンスの作成後に Lambda が呼び出すメソッドです。入力パラメータは S3Event 型で Stream ではないことに注意してください。これができるのは、登録された Lambda JSON シリアライザーのためです。S3Event には Amazon S3でトリガーされたイベントに関するすべての情報が含まれています。関数は、イベントの一部であるすべての S3 オブジェクトをループし、Rekognition に対しラベルの検出を指示します。ラベルが検出された後、それらは S3 オブジェクトにタグとして追加されます。

注記

コードにはへの呼び出しが含まれていますConsole.WriteLine()。関数が Lambda で実行されている場合、すべての呼び出しは Amazon Logs Console.WriteLine() にリダイレクトされます。 CloudWatch

2. aws-lambda-tools-defaults.json

aws-lambda-tools-defaults.jsonこのファイルには、ブループリントがデプロイウィザードの一部のフィールドに事前入力するように設定したデフォルト値が含まれています。また、.NET Core CLI と統合するためのコマンドラインオプションを設定する場合にも役立ちます。

.NET Core CLI 統合にアクセスするには、関数のプロジェクトディレクトリに移動して入力しますdotnet lambda help

注記

関数ハンドラーは、呼び出された関数に応答して Lambda が呼び出すメソッドを示します。このフィールドの形式は:. <assembly-name>::<full-type-name>::<method-name> 名前空間はタイプ名に含める必要があります。

関数をデプロイする

以下の手順では、Lambda 関数をデプロイする方法について説明します。

  1. ソリューションエクスプローラーで Lambda プロジェクトを右クリックし、[ AWS Lambda に公開] を選択して [アップロード先] ウィンドウを開きます。 AWS Lambda

    注記

    プリセット値はファイルから取得されます。aws-lambda-tools-defaults.json

  2. アップロード先 AWS Lambda」ウィンドウの「関数名」フィールドに名前を入力し、「次へ」ボタンを選択して「拡張機能の詳細」ウィンドウに進みます。

    注記

    この例では、関数名を使用していますImageRekognition

  3. 拡張機能の詳細」ウィンドウから、コードに Amazon S3 および Amazon Rekognition リソースにアクセスする権限を付与する IAM ロールを選択します。

    注記

    この例に従っている場合は、ロールを選択してください。AWSLambda_FullAccess

  4. 環境変数を 60 MinConfidence に設定し、[Upload] を選択してデプロイプロセスを開始します。AWS ExplorerFunction ビューが表示されたら、公開プロセスは完了です。

  5. デプロイが成功したら、[Event Sources] タブに移動して、新しい関数にイベントを送信するように Amazon S3 を設定します。

  6. [イベントソース] タブから [追加] ボタンを選択し、Lambda 関数に接続する Amazon S3 バケットを選択します。

    注記

    バケットは Lambda AWS 関数と同じリージョンにある必要があります。

関数をテストする

これで、関数がデプロイされ、イベントのソースとして S3 バケットが関数に対して設定されたので、S3 バケットブラウザを AWS Explorer から、選択したバケットについて開きます。次に、いくつかのイメージをアップロードします。

アップロードが完了すると、使用する関数のビューからログを調べることで、関数が実行されたことを確認できます。または、バケットブラウザ内のイメージを右クリックし、[Properties (プロパティ)] を選択します。[Tags (タグ)] タブで、使用するオブジェクトに適用されたタグを表示できます。