記事公開日
サーバーレスで画像認識アプリを作ってみた ― Lambda + S3 + Rekognition

この記事のポイント
クラウド初心者向けのサーバーレスワークショップを実施し、Lambda・S3・Rekognitionを使った画像認識アプリを構築した際に気づいた点をまとめました。
- サーバーレスの本質:
サーバーが存在しないのではなく、サーバーのリソース管理を意識せずにコードの実行に専念できる仕組みを指します。 - 構築したアプリの構成:
S3・Lambda・Rekognition・DynamoDB・API Gatewayを組み合わせ、画像アップロード時に物体検出を行うアプリケーションを作成しました。 - 初学者としての気づき:
Lambdaによるコード実行の手軽さを実感した一方、各サービスへのアクセス権限(IAM)設定の複雑さに苦労しました。
概要
こんにちは。DXソリューション営業本部の松榮です。
今回はクラウド初心者のためのサーバーレスワークショップを実施して、初学者目線で気づいた点や苦労した点を共有したいと思います。
※今回実施したワークショップ
https://catalog.workshops.aws/serverless-for-cloud-beginners/ja-JP
サーバーレスとは?
まず、今回のワークショップで一番のポイントである「サーバーレス」についてです。
言葉だけを聞くと、初学者にとってはサーバーそのものが存在しないことを表すのかなと感じる方がいるかもしれません。
しかし実際には、サーバーのリソースを意識しないという意味を表しています。
クラウド上でプログラムを実行する際に、サーバーの構築や保守が必要ない仕組みです。
開発する側はインフラ管理が不要であり、プログラムの実行やアプリの開発に専念できます。
今回使用したLambdaもサーバーの管理、プロビジョニングを必要とせず、コードを実行することができます。
今回作成したアプリの動き
今回作成したアプリの全体図です。
Amazon S3バケットに画像ファイルがアップロードされたときに、Amazon Rekognitionを用いて画像に写っている物体を検出するアプリケーションです。
検出したラベルをデータベースに保存し、検索するためのAPIを作成します。
S3へのアップロード検知、物体検出、ラベルのデータベースへの保存をLambdaで実行します。
今回使用したAWSサービス
| サービス名 | 概要 |
|---|---|
| Amazon S3 (Amazon Simple Storage Service) |
高水準のスケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するオブジェクトストレージサービス。99.999999999%の耐久性を実現するよう設計されており、アクセス頻度に応じてストレージクラスを選択できます。 |
| AWS Lambda | サーバーのプロビジョニングや管理を行うことなく、コードを実行できるコンピュートサービス。コードのみに集中できるため、開発の迅速化、パフォーマンス向上、セキュリティ強化、コスト効率の向上を実現できます。 |
| Amazon Rekognition | 画像およびビデオの分析サービス。APIを使用することで、物体検出、テキスト検出、顔分析などを簡単に行えます。今回は DetectLabels API を用いて、画像に写っている物体のラベルを検出しました。 |
| Amazon DynamoDB | 完全マネージド型のNoSQLデータベース。バックアップやセキュリティ、モニタリング等の管理作業が不要で、データ量やアクセス急増に合わせた自動スケーリング、複数AZへの自動複製による高可用性を実現できます。 |
| Amazon API Gateway | あらゆる規模のREST、HTTP、WebSocket APIを作成、公開、維持、モニタリングおよびセキュア化するためのサービス。APIサーバーを構築せずにLambda関数を外部から呼び出せます。 |
Lambdaに実際に触れてみて気付いた事
Lambdaに初めて触れてみて思ったことは
「簡単!」
でした。
VPCを作成して、サブネットを作って、EC2を起動してと様々なサービスを起動・連携させてインフラを構築していくことを学んできましたが、今回のLambdaを使ったアプリでは、複数のサービスをまたぐもののインフラ構築や管理の時間をとることなく、一つのLambdaの中で関数を定義してコードを書くだけでアプリが実行されるので、非常にスムーズに感じました。
迅速さや手軽さといったサーバーレスの利点をすごく感じました。
Lambdaを使う点で苦労した事
Lambdaを使うことで簡単にアプリを実行できることを身をもって体験できましたが、苦労した点もあります。
特に、アクセス権の付与のところは複雑に感じました。
今回作成したアプリで挙げると、S3バケットやDBへのアクセス権など、Lambdaは最初からそれぞれのAWSサービスに対してアクセスができるわけではありません。
それぞれのサービスに対して権限を付与することが必要になってきます。
今回のアクセス権など、IAM関連の知識や学習はまだまだだなと感じました。
まとめ
今回のワークショップを通じて、「サーバーレス」の枠組みや利便性を理解することができました。
サーバーレスでの利点と自身がサーバーを管理する利点をしっかりと把握して、状況によって選択できるような知識を身に付けることが必要だなと感じました。
また、AWSを学ぶ上で、実際に様々なサービスに触れてみることがとても大切だと感じました。実際に触れることで理解が深まるところや理解できていないところがはっきりしてきます。新たなサービスに触れることで、前から触れていたサービスの知識も深まります。
知識を頭に入れていくインプットだけでなく実際に手を動かすアウトプットを行うことで技術習得をしていきたいです。
AWSの導入支援につきましては、弊社お問い合わせフォームまでお気軽にご連絡ください。 複雑な内容に関するお問い合わせの場合には直接営業からご連絡を差し上げます。 また、よろしければ以下のリンクもご覧ください!
<QES関連ソリューション/ブログ>
<QESが参画しているAWSのセキュリティ推進コンソーシアムがホワイトペーパーを公開しました>
※Amazon Web Services、"Powered by Amazon Web Services"ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。


