AWS Startup ブログ
【週刊 Ask An Expert #39】Amazon Rekognition で顔画像を比較したい!先週の #AWSLoft で受けた質問10選
スタートアップソリューションアーキテクトの塚田 (@akitsukada): です。
最近は AWS Startup Day の準備に取り組んでいます。昨年はオフラインで大々的に開催した Startup Day ですが、今年は AWS Innovate と併催のオンラインイベントになっています。無料でビジネス・テクニカルトラックのセッション計16本が視聴できるので、ぜひ登録しておいてくださいね。
さて、今週は週刊 Ask An Expert 第39回をお届けします。読んでいて「参考になった」「いい内容だ」と思って頂けたら、ハッシュタグ #AWSLoft を付けてシェアしてください!
Ask An Expert とは
皆さん AWS Loft Tokyo はご存知でしょうか。目黒セントラルスクエア17Fにある、AWS を利用中のスタートアップ・デベロッパーのためのコワーキング及びイベントスペースです。その一角に AWS のエキスパート – Solutions Architect (SA) や Cloud Support Engineer (CSE)、時にはサービス開発チームや Customer Success Manager (CSM) – といった中の人に技術的な質問ができる Ask An Expert カウンターがあります。そこでは毎月100件以上にものぼるご相談を来場者の方からお受けしています。
さて、この連載「週刊 Ask An Expert」では、多くのご相談の中から我々スタートアップソリューションアーキテクトの独断で面白かった質問を毎週 10 個ずつ選び紹介していきます。他の AWS Loft 利用者がどんな質問をしているのか、自分が知らない新しいトピックはないか、Ask An Expert ってどんなところなのか、一緒に見ていきましょう。Let’s ask an expert!
週刊 Ask An Expert #39 (2020/01/27 – 01/31)
この週の対応者は SA: 内山・木内・野上・安藤・廣瀬・石神・澤野・渡邊・門田・保坂・小宮・桑野・浅野・松田・木村・市川と、CSE: 嶋本・古野 でした。
Q1: Amazon Rekognition で顔画像を比較するアプリを作りたい。比較する画像は Amazon S3 に置く必要がある?
イメージのバイト配列 (base64 エンコード) を指定するか、Amazon S3 オブジェクトを指定できます。例えば AWS CLI で S3 においた画像を使う場合、次のようなパラメータを渡します。
aws rekognition compare-faces \
--source-image '{"S3Object":{"Bucket":"bucket-name","Name":"source.jpg"}}' \
--target-image '{"S3Object":{"Bucket":"bucket-name","Name":"target.jpg"}}'
Q2: カスタマーサポート用に新しいコールセンターをスモールスタートで立ち上げている最中。Amazon Connect でダイヤルイン番号の選択肢に日本の番号が出てこない。
バージニア北部リージョン us-east-1 を選択されていたため、東京リージョン ap-northeast-1 を選択したところ出てきました。
Q3: Amazon S3 への画像アップロード処理のために、クライアント側のコードに Access Key / Secret Access Key を埋め込んでいる。なくせないか。
いくつか方法があります。一部の例として以下のような方法が挙げられます。
- AWS IAM の権限を利用する方法
- クライアントがブラウザで動作する JavaScript やモバイルアプリの場合、Amazon Cognito を使って S3 への一時的なアクセス権を払い出すことができます。
- サーバーサイドのアプリケーションの場合、環境変数
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
等に値をセットすることで AWS SDK が読み込んでくれるため、コードに記述する必要がなくなります。(例: AWS SDK for PHP ) - Amazon EC2 で動作するアプリケーションの場合、インスタンスプロファイルとして指定した AWS IAM Role の権限を使うことができます。インスタンスメタデータから動的に Access Key 等を取得することもできますが、AWS SDK を使っていればそれらを自動的に取得してくれます。
- AWS Lambda や Amazon ECS などのマネージドサービスを使っている場合、Lambda 関数や ECS Task に IAM Role をセットすることができます。
- Access Key 等を使わず一時的なアクセス許可を払い出す方法
- Amazon S3 や Amazon CloudFront の署名付き URL(S3, CloudFront) を発行してクライアントに返し、クライアントはその URL に対してオブジェクトをアップロードすることができます。この URL は有効期限を設定できます。
用途にあった方法をお選びください。
また、誤ってソースコードに認証情報を埋め込んでコミットしてしまわないよう、 git-secrets などのツールも併せてお使いいただくことをおすすめします。
Q4: Amazon API Gateway 上の一つのリソース・メソッドで、そのままレスポンスを返す場合とリダイレクトさせる場合を動的に制御したい。実現できる?
API Gateway の AWS Lambda プロキシ統合を使うと、Lambda 関数内で柔軟に処理した後、動的にレスポンスのステータスコード等を生成して返すことができます。リダイレクトの場合はステータスコード 302, そうでない場合は 200 を返すなどのロジックを実装することで実現可能です。
Q5: ELB – EC2 で Web サイトを構築中。デプロイしたサイトにアクセスできない。
一緒にネットワーク設定を見直したところ、 Public Subnet のルートテーブルで 0.0.0.0/0 が NAT Gateway に向いていました。 Internet Gateway に変更したところ疎通できるようになりました。
Q6: 1時間に1回、Twitter のトレンドを AWS Lambda を使って取得したい。費用感はどれくらいか。
一緒に AWS Pricing Calculator で試算したところ、無料枠に収まるためコストは 0 で済みそうでした。
※ 料金は実装方法等にもよるため、個々のユースケースを考慮して計算してください。
Q7: AWS 料金の確認や通知、管理を行うにはどうすればよいか。
AWS Budgets で上限を決めたり、Amazon CloudWatch を使って予想請求額を通知することが可能です。Simple Monthly Calculator/AWS Pricing Calculator で概算可能です。
Q8: Amazon S3 に大量に画像をアップロードするバッチ処理を開発中。S3 オブジェクトのパスを Amazon DynamoDB に保存したい。どう処理するのが適切か。
S3 オブジェクトのパスはアップロード後に払い出されるのではなく、アップロード時に指定したものになるため、あらかじめ確定することができます。パスの構成を設計した上で、DynamoDB にパスを登録するスクリプトなどの処理があればよいと思われます。
Q9: コスト削減のため、Amazon S3 に置いているログファイルを定期的に削除したい。
S3 のライフサイクルポリシーを設定することで、指定期間経過後にオブジェクトを自動的に削除することができます。ライフサイクルポリシーでは、削除以外にもストレージクラスを移動したりアーカイブしたりすることでコストを抑えることができるため、要件にあった方法をご検討ください。
Q10: AWS IAM で RBAC(Role Based Access Control)を運用しているけど、リソースが増えた時に IAM ポリシーを更新するのが大変で困っている。
AWS IAM の ABAC(Attribute Based Access Control)で問題解決する可能性があります。IAM ポリシー内の属性値とリソースのタグが一致する場合にアクセスを許可する方法で、新しくリソースを追加したときも適切にタグを設定すればポリシーを更新する必要がなくなります。ご検討ください。
週刊 Ask An Expert まとめ、今回はここまで!
最後までお読み頂きありがとうございます。冒頭に書いたように執筆者の独断で興味深かった質問のみをピックアップの上、要約して記載しているので実際にはより具体的な質問をより多く頂いています。まだ Ask An Expert カウンターをご利用されたことがない方も、AWS Loft Tokyo にお越しの際はぜひお気軽にご質問ください。
※Ask An Expert が混雑してお待ちいただく場合、またはエキスパートが不在の場合がございます。何卒ご容赦ください。
このブログの著者
つかだ あきひろ / Startup SA。AWS Amplify が好き。髪の毛は 2 週間ごとにメンテするのが理想。