見出し画像

【AWS】サーバーレスハンズオン:学習メモ

AWSが提供している学習コンテンツ「AWS Hands-on for Beginners」をやってみたメモです。

2020年2月時点では2つコンテンツがあり、今回は「サーバーレスアーキテクチャで翻訳 Web API を構築する」を選びました。

ハンズオンのゴール

Lambda, API Gateway, DynamoDBの基本を学び、
組み合わせてサーバーレスなWeb APIを作る

アジェンダ

1)Serverless アーキテクチャの概要

2)AWS Lambda の紹介とハンズオン
 2-1)AWS Lambda の概要
 2-2)AWS Lambda ハンズオン① Lambda を単体で使ってみる
 2-3)AWS Lambda ハンズオン② 他のサービスを呼び出してみる

3)Amazon API Gateway の紹介とハンズオン
 3-1)Amazon API Gateway の概要
 3-2)Amazon API Gateway ハンズオン① API Gateway を単体で使ってみる
 3-3)Amazon API Gateway ハンズオン② API Gateway と Lambda を組み合わせる

4)Amazon DynamoDB の紹介とハンズオン
 4-1)Amazon DynamoDB の概要
    4-2)Amazon DynamoDB ハンズオン① テーブルを作ってみる
    4-3)Amazon DynamoDB ハンズオン② API Gateway と Lambda と DynamoDB を組み合わせる

なぜサーバーレスなのか


・エンジニアの本当の目的とは:エンドユーザーに価値を届けること
 → でも、実際はエンドユーザーには見えない必要な作業がたくさんある
  (サーバーのセットアップ、セキュリティパッチの適用など)

Lambdaについて

・サーバーの管理なしでプログラムを実行できるサービス
・料金体系:実行回数 + 実行時間
・設定値:確保するメモリの量、タイムアウト値(MAX15分なので、それ以上かかる処理はLambdaでできない)、実行するIAMロール
・単体でも使えるけど、他のサービスと組み合わせて使われることが多い(S3(非同期), API Gateway(同期))
 ・非同期:実行自体は完了していない。Lambdaを正常に呼び出せたというレスポンスが返る
 ・同期:実行自体が完了したらレスポンスが返る

Lambdaのログを出したいとき

今回はPythonだったので "aws python logging" でググった。
以下にたどり着けた
Python の AWS Lambda 関数ログ作成
 
上記のコードをコピペしてログ出力できた。
ログはテスト実行結果(コンソール上)にも出る。
また、CloudWatch Logsの画面でも確認できることがわかった。

Amazon Translateの呼び出し方を調べたいとき

"aws python sdk" でググった。
以下にたどり着けた
AWS SDK for Python (Boto3)

上記にあるAPIリファレンスから"translate"でページ内検索。
Client のところを見たらAmazon Translateの呼び出し方がわかった。

メソッドがいろいろ載っているけど、ひとまず今回使いたいメソッド"translate_text()"のところを確認する。
リクエスト時のパラメータなどが載っているので、必要な項目だけにして書く。どういうレスポンスが返ってくるかも載っている

API Gatewayについて

・サーバーをプロビジョニング・管理することなくAPIを作成・管理できるマネージドサービス
 可用性の担保やスケーリング・APIキー管理などは考えなくてオッケー
・料金体系:リクエストベース (REST APIの場合)
 実行回数 + ( キャッシュメモリ量) + データ転送料金 


API GatewayとLambdaを連携させるハンズオン

"API Gateway 統合レスポンス" でググった。
以下にたどり着けた
API Gateway で統合レスポンスを設定する
上記を読むとLambda プロキシ統合の場合にどういう形式で書けばいいかがわかる

Lambda:テストイベントの設定

イベントテンプレートがいろいろ用意されている。
今回は Amazon API Gateway AWS Proxy

DynamoDBについて

・フルマネージド型のNoSQL データベースサービス
・3つのAZに保存されるため信頼性が高い

DynamoDBの用語たち

・テーブルは普通のDBと同じ
・Item = レコードと同じ
・Primary Key
・Attributes
 必須じゃないやつら。あってもなくてもいいやつ
・セカンダリインデックス
 Primary Key以外で検索したいときに使う。2種類ある
 ・ローカルセカンダリインデックス
 ・グローバルセカンダリインデックス
・キャパシティユニット
 読み込みと書き込みの回数

DynamoDBにおけるデータの操作方法
・HTTPベースのAPIで操作する (PUT, GET, ...などなど)

DynamoDBとLambdaを連携させるハンズオン
また "aws python sdk" でググって AWS SDK for Python (Boto3) を参照。

上記にあるAPIリファレンスから"dynamodb"でページ内検索。
Table のところを見たらLambdaからDynamoDBを呼び出す書き方がわかる。
今回は登録したいから put_item() の関数のところを見る。

ハンズオンの感想

・SAAの試験勉強で対策本を読み漁ったけど、点と点が全然つながらないというかユースケースの想像をしづらかった。
 ハンズオンをやることによって「動いてうれしい、楽しい」って気持ちになるので記憶に定着しそう
・ググり方のヒントを教えてくれるのがありがたい
・API Gateway単体のハンズオンでは「モックって5分ぐらいで作れるんだ...」という感動があった。デプロイすると瞬時にURLが発行されてすごい
・ハンズオンのおまけ動画内でラーニングパスの紹介があり、次のアクションにつながりやすいと感じた。深く学ぶ・広く学ぶの具体例もあるからわかりやすい。
この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
8
サーバーサイドエンジニアをやっています。 学んだことのアウトプット用アカウントです。