LoginSignup
1
0

More than 1 year has passed since last update.

AWS Hands-on for Beginners 〜Serverless 編〜  #1

Posted at

はじめに

勉強していることをなんとなくメモっていきます。

行うこと
https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/
サーバーレスアーキテクチャで翻訳 Web API を構築する »

本人情報
IT現場雑用員(一生エクセル触ってる人)
1年前にAWS SAA取得済み


サーバレスの基本を学ぼう。

実装するアーキテクチャ

スクリーンショット 2022-07-02 16.19.16.png
今回のハンズオンビギナーで実装するアーキテクチャです。
クライアントからのリクエストを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種類あります。

非同期型
スクリーンショット 2022-07-02 17.39.04.png
Lambdaへのリクエストが正常に受け入れられたかどうかのみを、呼び出し元に返却します。リクエストに対する実行の成否を返さないという意味で、非同期での処理となります。

同期型
スクリーンショット 2022-07-02 17.41.34.png
Lambdaへのリクエストに対する実行が完了したときにレスポンスを返却します。

各サービスごとの呼び出しタイプは下記リンクのシート44枚目あたりに書いてあります。
https://d1.awsstatic.com/webinars/jp/pdf/services/20190402_AWSBlackbelt_AWSLambda%20Part1%262.pdf

Lambdaを単体で使ってみる

メモリやタイムアウトの設定、付与するIAMロールの変更はここから行う。

スクリーンショット 2022-07-02 18.10.42.png

スクリーンショット 2022-07-02 18.11.04.png

イベントとしてこれを渡して
スクリーンショット 2022-07-02 18.30.11.png

こう実行すると
スクリーンショット 2022-07-02 18.30.25.png

eventの中に入っていたログがこのように表示されます。
スクリーンショット 2022-07-02 18.30.56.png

Lambdaで他のサービスを呼び出す。

  1. Python SDKのドキュメントを見ながらTranslateの呼び出し方を実装する。

スクリーンショット 2022-07-02 19.32.17.png
'2. IAMロールを実装する
スクリーンショット 2022-07-02 19.20.24.png

'3. レスポンスとして、JSON形式で英語訳を返すようにする
スクリーンショット 2022-07-02 19.33.29.png

'4. Lambda関数をテスト実行する
スクリーンショット 2022-07-02 19.33.57.png
翻訳されていることが確認できました。

API Gatewayについて

上述したサーバレスの特徴を持つため、サーバのプロビジョニングや管理を考えることなくAPIを作成することができます。

開発の流れ

① リソースとメソッドタイプ定義
リソースとメソッドタイプ(GET、POSTなど)を組み合わせて指定することによって、どのようにしてデータを受け取るかを指定します。
例 /reports(レポートの一覧)    ✖️ GET, POST
  /report_id(指定したIDのレポート) ✖️ GET, DELETE

②メソッドリクエスト設定
リクエストの受付時に関する設定を行う(認証など)

③統合タイプ設定
バックエンドの種類を選択する(Lambda関数、HTTP、Mockなど)

④Req/Res変換定義
バックエンドへのInput、バックエンドからのOutput変換をすることができる。
ここで何も変換を行わない(プロキシ統合)という設定も可能

⑤デプロイ
API自体をデプロイする。

スクリーンショット 2022-07-02 19.49.52.png

API Gatewayを単体で使ってみる

今回はエンドポイントとしてMockを選択し、統合レスポンスにjsonファイルを登録しておくことによってリクエスト→レスポンスの流れを確認する。

① 新規にAPIを作成する
スクリーンショット 2022-07-02 21.46.37.png

② sampleリソースを作成し、GETメソッドを作成
スクリーンショット 2022-07-02 21.47.31.png
スクリーンショット 2022-07-02 21.48.43.png

③ 統合タイプとしてMockを選択する
スクリーンショット 2022-07-02 21.51.45.png

④ devステージにデプロする
スクリーンショット 2022-07-02 22.16.45.png
スクリーンショット 2022-07-02 22.17.18.png

⑤ APIを試しに実行してみる。
スクリーンショット 2022-07-02 22.19.01.png

長くなってきたので、1回区切ります
その②に続く…

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0