修行ブログ

修行メモ

AWSサーバーレスに入門しました

初めに

サーバーレス関連のサービスを実際に触ったことがなかったので、ついに触ってみる。その時の雑メモ。

以下のAWS公式ハンズオン参照。

AWS Hands-on for Beginners | AWS

AWS Hands-on for Beginnersめちゃおすすめです。

学んだ内容

・サーバーレス関連の基礎サービスを、Web APIを作成することで動作を確認する。
・Lambda, DynamoDB, API Gatewayを使ったアーキテクチャを構成する。

 

なぜサーバーレスが必要か?

開発者がやりたいのは「サーバー管理」ではなく「ビジネスロジックの実行」だが、実際はインフラ管理に時間がかかっている現状がある。

サーバーレスアーキテクチャを用いれば、インフラのプロビジョニングや高可用性の実現などはクラウド側で担保され、ビジネスロジックに集中できる。

 

Lambda概要

サーバーを意識せずにプログラムを実行できるサービス。

Lambda覚え書き

・マネジメントコンソールから設定可能。
・対応言語はJava,Go,Powershell,Python,Ruby,Nodejs等(随時拡充されそうなのでぼやかしときます)
・確保するメモリ量を設定する(CPUはメモリに比例)
・Lambda関数ではIAMロールで許可された権限でしか操作できない
・呼び出しタイプには「非同期呼び出し」と「同期呼び出し」が存在。
 →Lambdaは様々なサービスから呼び出しできるが、サービスごとに呼び出しタイプが異なる。
・Lambdaが呼び出されると、コンテナが起動しプログラムが実行される。
・ライフサイクルとして「コールドスタート」と「ウォームスタート」が存在。
 →基本はコンテナ再利用、利用可能コンテナがなければコンテナ生成から実行

 

Lambdaを使ってみる

実施内容

・Lambdaを単体で使ってみる
・Translateと組み合わせてみる

覚え書き

・デフォルトでCloudWatch Logsに実行時ログを出力するようになっている&必要なロールも与えてある。
・コードの変更内容を反映するため、「デプロイ」を選択してから「テスト」する。

API Gatewayと組み合わせてみる

そもそもAPIとは?

プログラムやソフトウェアが連携するための取り決めや仕様 とのこと。
API Gatewayは、API作成において本来利用者側で意識すべき部分は事前に準備されており、API作成の負荷を軽減してくれる。

API Gateway覚え書き

・順番は以下。

 メソッドリクエスト>統合リクエスト>統合レスポンス>メソッドレスポンス
・メソッドリクエストでは、認証設定や受け付けるクエリパラメータ、必須のHTTPヘッダ 等を設定する。
・統合リクエストでは、バックエンドの種別を選択する(Lambda関数、HTTP、その他AWSサービスなど)
・バージョニング、使用量プラン設定などの機能も存在。
API、ステージごとにデプロイを行う。
・前述したフローごとに設定を行う。

API GatewayとLambdaを組み合わせる

実施の概要

日本語の入力を英語に翻訳するAPIを作成する。

API GatewayとLambdaの組み合わせ覚え書き

・ハードコーディングから、API Gatewayのクエリパラメータのインプットから渡してくるようにする。
API Gatewayからの入力をLambdaに渡すためにqueryStringParametersを編集。

・ステージにデプロイしていないと、「{"message":"Missing Authentication Token"}」が出力された。

詰まったポイント

API呼び出しをするためのURLを指定した際、「Internal server error」が発生。
原因は、「URLクエリ文字列パラメータ」の誤字だった。
詰まったところ大抵誤字。
ただ誤字で詰まると、「どこをミスるとどこで支障がでるか」がわかるので、悪くない。笑

f:id:lin2734:20210124172256p:plain

f:id:lin2734:20210124172238p:plain

f:id:lin2734:20210124172359p:plain

DynamoDBを使ってAPIを進化

DynamoDB覚え書き

・キーバリュー型のNoSQLデータベース
・テーブル毎にスループットキャパシティを設定
・HTTPベースのAPIで操作する
・課金は〇〇ベース

別記事でまとめたいな。DynamoDBの覚え書き。

DynamoDBハンズオン

・キャパシティユニットを利用度合いに応じて増減したいなら、テーブル作成時「読み込み/書き込みキャパシティ-モード」をオンデマンドにする。
・「保管時の暗号化」では、本番利用するならKMS使った方がよい?
Pythonで日時を取るには「import datetime」

API Gatewayエンドポイントから文字入力
 →結果をLambda

 


用語メモ

・2種類のプライマリーキー
 -パーティションキー
 -パーティションキー+ソートキー
・ローカルセカンダリインデックス(LSI)、グローバルセカンダリインデックス(GSI)
・キャパシティユニット

用語

・パススルー
・Lambdaプロキシ統合
 →レスポンスの変換できなくなる

その他

・サービスの一言説明、風情がある。
 →Lambdaは「サーバーのことを考えずにコードを実行する」

感想と今後学んでいくこと

サーバーレス構成を組むための基礎サービスを諸々触れてよかった。
これまでは机上の知識しかなかったので、使用感をつかめたことは大きかった。
今後は、別のアーキテクチャにもチャレンジしてみたい。