AWS Startup ブログ

【週刊 Ask An Expert #51】Amazon SageMaker でデプロイしたモデルを RESTful に提供するには?先週の #AWSLoft で受けた質問をざっくり紹介!

こんにちは、スタートアップ ソリューションアーキテクトの塚田 (Twitter: @akitsukada) です。

最近、お客様から「この週刊 Ask An Expert週刊 AWS シリーズとは関係あるの?(競ってるの?)」とご質問をいただきました。内容や運営に直接の関係はありませんが、筆者たちはどちらも同じ AWS Japan の SA ということで仲良くやっております。週刊 AWS シリーズは毎週のアップデートを効率よくキャッチアップできるナイスな情報源ですので、みなさんぜひどちらもチェックしていただければ幸いです!

さあ、それでは今日も先週いただいた質問から、執筆者の独断と偏見によりいくつかの質問をピックアップしてざっくり解説していきたいと思います。Let’s Online Ask An Expert

最後に、AWS Summit などスタートアップエンジニアの方向けおすすめイベント情報もつけているのでぜひ見てみてください。

※ Online Ask An Expert のご利用方法、簡単 4 ステップはこちらからご確認いただけます。

週刊 Ask An Expert #51 (2021/03/15〜2021/03/19)

Q. 複数の Amazon EC2 インスタンスでそれぞれ出力されている複数種類のログのうち、共通する種類のもの(Nginx のアクセスログなど)を横串で監視したい。

ユースケースをお伺いすると、例えば HTTP 500 Internal Server Error がいずれかのサーバーで発生した場合を検知し、Slack に通知されるアラートを作成するようなイメージをお持ちでした。少し議論し、共通のログについては Amazon CloudWatch Logs 上の一つのロググループで管理する方向性で実現できそうでした。

まずお使いの EC2 インスタンス上で CloudWatch エージェントがインストールされ稼働していることを確認しました。

awslogs.conf を開き、 file = /var/log/nginx/access.log log_group_name = value log_stream_name = value などの設定を追記していただきました。

試しにログが CloudWatch Logs 上に表示されるか確認するとしておらず、EC2 のインスタンスプロファイルに DescribeLogStreams を追加したところログが送信されるようになりました。

その後 CloudWatch Logs のメトリクスフィルタを設定するご案内をするところで時間切れとなったため、類似する設定の例として以下のドキュメントをご紹介しつつ、

Amazon CloudWatch Logs ユーザーガイド | 例: HTTP 404 コードをカウントする

Slack への通知部分については Amazon SNS のトピックと AWS Chatbot の連携チュートリアルを見て試していただくようお願いしてご案内終了しました。

AWS Chatbot Administrator Guide | Getting started with AWS Chatbot

Q.  Amazon SageMaker Studio を使っている。モデルの学習などは終えているものの、エンドポイントへのデプロイの仕方がわからない。(デプロイしようとするとエラーが発生する。)

その場で deploy を実施してみていただいたところ、 deploy メソッドの引数を指定していなそうだったため、指定して実行、ご確認いただくようお願いしました。

参考: SageMaker Python SDK API Reference | APIs » Inference APIs » Model » deploy

from sagemaker.model import Model
from sagemaker.pipeline import PipelineModel
import boto3
from time import gmtime, strftime

timestamp_prefix = strftime("%Y-%m-%d-%H-%M-%S", gmtime())

scikit_learn_inferencee_model = sklearn_preprocessor.create_model()
linear_learner_model = ll_estimator.create_model()

model_name = 'inference-pipeline-' + timestamp_prefix
endpoint_name = 'inference-pipeline-ep-' + timestamp_prefix
sm_model = PipelineModel(
    name=model_name, 
    role=role, 
    models=[
        scikit_learn_inferencee_model, 
        linear_learner_model])

sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)

Q. フロントエンドアプリケーション(JavaScript)から Amazon S3 上の画像へのアクセスを制御したい。

全体的な構成をお伺いした上で、Amazon CloudFront の署名付き URL、署名付き Cookie を使ってアップロードおよびダウンロードを許可する方法や、Amazon Cognito Identity Pool を使って一時認証情報を払い出して Amazon S3 へのアップロード権限を一時的に付与する方法についてご案内しました。

また、サービスのリリースを控えているので主にセキュリティ面の強化をしたいとのことだったため、 AWS Well-Architected Framework についてご案内し、まず Well-Architected Tool を使ってレビューを実施し、上がってきた改善点について検討することをお勧めしました。

Q. Amazon SageMaker でデプロイしたエンドポイントを RESTful なインターフェースで利用者(社内の Web 開発者)に提供したい。

次の解説をお見せしながら、Amazon API Gateway を利用して Amazon SageMaker Endpoint をラップする方法と手順についてご案内しました。

Amazon API Gateway マッピングテンプレートと Amazon SageMaker を使用して機械学習を搭載した REST API の作成 | Amazon Web Services ブログ

また、やはり Amazon API Gateway と AWS Lambda を利用したサーバーレスな RESTful API を Python で直感的に構築・実装できる方法として、AWS Chalice をご紹介しました。AWS Chalice については、以下の記事で解説しているのでご覧ください。

爆速 API 開発を実現するサーバーレスアプリケーション開発向けフレームワーク | builders.flash

[AWS Black Belt Online Seminar] Dive deep into AWS Chalice 資料及び QA 公開 | Amazon Web Services ブログ

AWS Chalice でフロントに提供する RESTful API の定義と実装をしつつ、バックエンドの SageMaker Endpoint にアクセスする方法もご検討いただくようご案内しました。

週刊 Ask An Expert まとめ、今回はここまで

最後までお読み頂きありがとうございます。

冒頭に書いたように、執筆者の独断により興味深かった質問を選び、かつざっくり要約して記載しています。実際にはより具体的な質問をより多く頂いていますが、様々なご相談があることが伝わっていれば幸いです。まだ Online Ask An Expert をご利用になったことがない方も、ぜひ一度お気軽にご利用ください。

お知らせ: スタートアップのエンジニアの方向け、直近のおすすめイベント

さて最後に、先週に続き、スタートアップの皆様にチェックしていただきたい3つのイベントをお知らせてしております。参加して AWS の知識や最新事例をキャッチアップしましょう!

2021/3/24(水)16:00 ~ 17:30 AWS Startup.fm 今だからこそ話せる!AWS Startup Solutions Architect が選ぶ注目の AWS re:Invent 2020 アップデート

昨年末に開催された AWS re:Invent 2020 (およびそれ以降も!)では多くの新サービス・新機能が発表されました! そんな中多くの情報の中、自分に役立つアップデートはどれなのか、みなさん手早く知りたくありませんか? そこで今回、日頃から多くのスタートアップの技術相談を受ける AWS Startup Team の SA(Solutions Architect)たちが、独断と偏見で「スタートアップで使ってほしい re:Invent 周辺アップデート Top 10!(と少し)」を選んでみました! (イベント概要より引用)

「手早くAWSのアップデートを把握したい」と考えているスタートアップ企業にご所属で技術に関わる方全般にお届けしたいセッションです。ぜひ上のリンクから申し込んでみてください!

2021/3/30(火)14:00 ~ 17:30  AWS で始める機械学習 Amazon SageMaker ハンズオンセミナー

スタートアップのお客様に AWS の機械学習の全体像をご理解いただき、また簡単に Amazon SageMaker をご利用いただけるハンズオンです。

  • 機械学習プログラムの実装、運用経験のある方
  • Python を利用したことがある方、理解できる方
  • Amazon SageMaker に興味をお持ちの方
  • AWS の機械学習サービスの全体像を知りたい方

はぜひ、上のページをチェックです!

そして3つ目は少し先ですが、今年もオンラインで開催することになった

2021/5/11(火)〜 5/12(水) AWS Summit Online Japan

です!
各種セッションでスタートアップのお客様にもご登壇頂く予定である他、Startup Solutions Architect によるスタートアップの皆様のためのセッション特集などもお届けする予定です。
詳細が確定してき次第、このブログでも見どころをピックアップしてお伝えしていこうと思います。

すでに参加登録は受け付け開始していますので、まずは上のページから登録してみてください!

以上、皆様のお越しをお待ちしております。

このブログの著者

A author image of Aki Tsukada塚田 朗弘(Aki Tsukada
Head of Startup Solutions Architect, Japan.
AWS Amplify とか好き。

Twitter: @akitsukada