はじめに
勉強していることをなんとなくメモっていきます。
行うこと
https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/
サーバーレスアーキテクチャで翻訳 Web API を構築する »
本人情報
IT現場雑用員(一生エクセル触ってる人)
1年前にAWS SAA取得済み
サーバレスの基本を学ぼう。
実装するアーキテクチャ
今回のハンズオンビギナーで実装するアーキテクチャです。
クライアントからのリクエストをAPI Gatewayで受け取り、Amazon Translateで翻訳したものを返します。AWS LambdaはこのAPI GatewayとTranslateの間の橋渡しとして動作し、翻訳の履歴をヒストリーテーブルとしてDynamoDBに書き込みます。
なぜサーバレスなのか
ビジネスの価値(利益)に繋がらない作業への時間、お金を節約することができます。
例)サーバ、ミドルウェアのセットアップ、セキュリティパッチの適用、耐障害性の確保など
主な特徴
1.インフラのプロビジョニングや管理が不要
Elastic BeanstalkやOpsWork、CloudFormationを使用して環境構築を自動化し、環境自体の複製、削除、共有などを容易に行うことができます。
2.高い可用性
特にRDSなどのマネージドサービスを使用することで、高い可用性を保つことができます。また、ELBを用いた負荷分散やCloudWatchを用いた死活監視、マルチAZ構成などを行うことによって、設計の中で高い可用性を容易に確保することができます。
3.自動でスケール
Auto Scalingなどのサービスを利用して負荷や障害に対して、自動でスケーリングを行うことができます。
4.価値に対する支払い
AWSは基本的に使用した分だけ支払いを行う仕組みになっているため(結構例外あり)、リクエストが少ない時間帯や利用者が少ないサービスにかかるコストを節約することができます。
Lambdaについて
AWS Lambdaの特徴
サーバのプロビジョニング/管理なしでプログラムを実行することができるサービス
他にもコードを実行するためのスケーリングなどは全てLambda側で実行してくれるため、開発者はコードを書くことに集中することができます。
料金体系
実行回数 + 実行時間
対応言語
Java、GO、PowerShell、Node.js、C#、Python、Ruby
ライフサイクル
初回の実行や、利用可能なコンテナがない場合はコールドスタートとなり、利用可能なコンテナがある場合はウォームスタートになります。コールドスタートになってしまうと、立ち上がりに時間がかかる場合があるので注意が必要です。
AWS Lambdaのイベントソースと呼び出しタイプ
Lambda関数は呼び出し元のリソースによって呼べ出され方が変わります。
また、呼び出され方は大きく分けて2種類あります。
非同期型
Lambdaへのリクエストが正常に受け入れられたかどうかのみを、呼び出し元に返却します。リクエストに対する実行の成否を返さないという意味で、非同期での処理となります。
同期型
Lambdaへのリクエストに対する実行が完了したときにレスポンスを返却します。
各サービスごとの呼び出しタイプは下記リンクのシート44枚目あたりに書いてあります。
https://d1.awsstatic.com/webinars/jp/pdf/services/20190402_AWSBlackbelt_AWSLambda%20Part1%262.pdf
Lambdaを単体で使ってみる
メモリやタイムアウトの設定、付与するIAMロールの変更はここから行う。
Lambdaで他のサービスを呼び出す。
- Python SDKのドキュメントを見ながらTranslateの呼び出し方を実装する。
'3. レスポンスとして、JSON形式で英語訳を返すようにする
'4. Lambda関数をテスト実行する
翻訳されていることが確認できました。
API Gatewayについて
上述したサーバレスの特徴を持つため、サーバのプロビジョニングや管理を考えることなくAPIを作成することができます。
開発の流れ
① リソースとメソッドタイプ定義
リソースとメソッドタイプ(GET、POSTなど)を組み合わせて指定することによって、どのようにしてデータを受け取るかを指定します。
例 /reports(レポートの一覧) ✖️ GET, POST
/report_id(指定したIDのレポート) ✖️ GET, DELETE
②メソッドリクエスト設定
リクエストの受付時に関する設定を行う(認証など)
③統合タイプ設定
バックエンドの種類を選択する(Lambda関数、HTTP、Mockなど)
④Req/Res変換定義
バックエンドへのInput、バックエンドからのOutput変換をすることができる。
ここで何も変換を行わない(プロキシ統合)という設定も可能
⑤デプロイ
API自体をデプロイする。
API Gatewayを単体で使ってみる
今回はエンドポイントとしてMockを選択し、統合レスポンスにjsonファイルを登録しておくことによってリクエスト→レスポンスの流れを確認する。
長くなってきたので、1回区切ります
その②に続く…