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

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

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

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

前提条件およびセットアップの詳細については、AWS Toolkit for Visual Studio「」を参照してください。の使用AWSの Lambda テンプレートAWSToolkit for Visual Studio

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

  1. Visual Studio を開き、[File (ファイル)] メニューで [New (新規)] を選択し、[Project (プロジェクト)] を選択します。

  2. Visual Studio 2017 の場合:

    新しいプロジェクトダイアログボックスでインストール済みを拡張します。Visual C#[] を選択してから、AWSLambda

    Visual Studio 2019 の場合:

    新しいプロジェクト] ダイアログボックスで、[言語,プラットフォーム, およびプロジェクトタイプドロップダウンボックスが [すべて...] に設定され、aws lambda()検索field.

  3. [] を選択します。AWSLambda プロジェクト (.NET Core-C#)テンプレートテンプレート

  4. Visual Studio 2017 の場合:

    プロジェクトに「ImageRekognition」という名前を付け、目的の [場所] などを入力して、[OK] をクリックします。

    Visual Studio 2019 の場合:

    [Next] をクリックします。次のダイアログで、[名前] に「ImageRekognition」と入力し、目的の [場所] などを入力して、[作成] をクリックします。

  5. 設計図を選択します。設計図では、Lambda 関数の記述に役立つサンプルコードが提供されます。この例では、[Detect Image Labels (画像ラベルの検出)] 設計図を選択します。

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

    
                  の設計図AWSLambda プロジェクト
  6. 開発する Lambda 関数の種類を選択し、[Lambda 関数の種類] を選択します。完了をクリックして Visual Studio プロジェクトを作成します。

完了すると、2 つのプロジェクトを備えたソリューションができます。Lambda にデプロイするための Lambda 関数コードを含むソースプロジェクト、および関数をローカルでテストするために xUnit を使用するテストプロジェクトです。


            の設計図AWSLambda プロジェクト

プロジェクトを初めて作成したときに、Visual Studio で NuGet の参照が一部見つからないことがあります。これは、これらの設計図で必要な依存関係を、NuGet から取得する必要があるからです。新しいプロジェクトが作成されたとき、Visual Studio はローカル参照だけを取り込み、NuGet からリモート参照を取り込みません。この問題は、使用する参照を右クリックし、[Restore Packages (パッケージの復元)] を選択すると簡単に解決できます。

ファイルを検証する

  1. Function.cs ファイルを開き、設計図に付属するコードを確認します。コードの最初のセグメントのは assembly 属性で、ファイルの先頭に追加されます。

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

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

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

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

    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; }

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

  2. 設計図が作成した aws-lambda-tools-defaults.json ファイルを開きます。このファイルには、設計図で設定されたデフォルト値が含まれます。これはデプロイウィザードの一部のフィールドを事前設定するのに役立ちます。また、新しい .NET Core CLI と統合するときのコマンドラインオプション設定にも役立ちます。これを使用するには、関数のプロジェクトディレクトリに移動し、dotnet lambda help と入力します。

重要なフィールドは FunctionHandler です。これは、起動しようとしている関数に対応したコードでの呼び出しメソッドを Lambda に示します。このフィールドの形式は <assembly-name>::<full-type-name>::<method-name> です。型名に名前空間を必ず含めるようにしてください。

関数をデプロイする

  1. Lambda プロジェクトを右クリックし、への発行AWSLambda。デプロイウィザードが起動します。多くのフィールドがすでに設定されていることに注意してください。これらの値は前に説明した aws-lambda-tools-defaults.json ファイルから取得されます。

  2. 関数名を入力します。この例では、ImageRekognition を使用し、[Next (次へ)] を選択します。

  3. [Advanced Function Details (アドバンスト関数の詳細)] ページで、S3 と Rekognition にアクセスするコードに対してアクセス権限を付与する IAM ロールを選択します。この設定を短縮するには、[Power User managed policy (パワーユーザー管理ポリシー)] を選択します。ツールはこのポリシーに基づいてロールを作成します。

  4. 最後に、環境変数 MinConfidence を 60 に設定し、[Upload (アップロード)] を選択します。

    これにより Lambda プロジェクトをビルド、パッケージ化するデプロイプロセスが起動され、Lambda 関数が作成されます。公開が完了すると、関数[] ビューでAWSExplorer] ウィンドウが表示されます。ここから、テスト関数を呼び出し、関数の CloudWatch Logs を表示し、イベントソースを設定できます。

  5. 関数がデプロイされたら、Amazon S3 を設定してそのイベントを新しい関数に送信するようにする必要があります。[Event Sources (イベントソース)] タブで、[Add (追加)] を選択します。自分の Lambda 関数に接続する Amazon S3 とバケットを選択します。バケットは、Lambda 関数がデプロイされるリージョンと同じリージョンに存在する必要があります。

関数をテストする

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

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