LoginSignup
1
3

初心者が5分で出来る簡単サーバレスAPIを構築してみる【Lambda】

Last updated at Posted at 2020-01-23

#はじめに
今回は機械学習ではないのですが、自分がAWSの試験を受けるにあたり、IT初心者としてサーバレスについてイメージが難しいところがありました。
サーバーへの考慮がいらない、サーバーのメンテナンスや管理をしなくていいと言われていますが、実際使い勝手などが分かりにくい。

少しでも理解できるようになるために、1杯のコーヒーよりもコストが低いAPIの作成を実践してみました!

image.png
AWS Black Belt 公式より抜粋

##AWSのサーバレスサービス
サーバレスとは言いますが、サーバが存在していないわけでは無いのです。
あくまでもAWS側がサポートしてくれて、サーバを意識せずに、アプリケーションを作成したり運用できるサービスのことを指しています。

#1. DynamoDB でテーブルを作る
データベースのidの番号から、名前を引っ張ってこれるような簡単なAPIを作っていきます。
まずは、データベースの DynamoDB にテーブルを作成していきます。
2020-01-10_09h21_19.png
テーブル名を入力して[デフォルト設定の使用]にチェックマークをつけて作成をクリック。
2020-01-10_09h23_00.png
数秒待つとテーブルが作成されます。出来上がったテーブルをクリックして、右の[項目]のタブから[項目の作成]をクリック。
2020-01-10_09h24_57.png
「id string:」の VALUE の項目にまず1という番号を入力して、+ボタンをクリックし、[Append]を選択してさらに[String]を選択します。
2020-01-10_09h30_30.png
FIELD という項目には[name]を入力し、 string の項目には適当な名前を入力します。
2020-01-10_10h41_06.png
同じ手順で三人分名前を登録しました。
2020-01-14_15h21_14.png

#2. Lambda関数を作る
次は Lambda のコンソールへ行き、関数の作成に入ります。
2020-01-10_10h43_01.png
[一から作成]を選択している状態でまずは関数名を入力。
2020-01-10_10h45_58.png
ランタイムで関数の言語を選択します。今回使うのは[Node.js 10.x] 。
実行ロールの選択または作成を選択し、DynamoDB のアクセス権限をつけます。そして作成をクリック。
2020-01-10_10h48_47.png
次に DynamoDB からidの番号で名前を引っ張ってくるシンプルなコードを書いていきます。
2020-01-10_10h49_26.png
コードはこちら。

Node.js
'use strict';

const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
const createResponse = (statusCode, body) => ({ statusCode, body });

    exports.handler = (event, context, callback) => {
    //テーブル名を指定
    let params = {
        TableName: 'test' ,
        Key: {
            id: event.pathParameters.id
        }
    };
    
    let dbGet = (params) => { return dynamo.get(params).promise() };
    
    dbGet(params).then( (data) => {
        if (!data.Item) {
            callback(null,createResponse(404, "ITEM NOT FOUND"));
            return;
        }
        callback(null, createResponse(200, JSON.stringify(data.Item)));
    }).catch( (err) => {
        callback(null, createResponse(500, err));
    });
};

index.js のデフォルトのコードを削除して書き直します。右の[保存]をクリックして更新します。
2020-01-10_16h46_21.png

#3. API をデプロイする
API Gateway のコンソールへ行き、API の作成に入ります。
2020-01-10_17h09_16.png
リソースの横にある、アクションのプルダウンから[リソースの作成]を選択。
image.png
リソース名を入力して[リソースの作成]をクリック。
2020-01-10_17h14_36.png
作ったリソースにさらに子リソース[id]を追加し、「{}」で囲みます。idの番号で指定できるようにするためです。
2020-01-10_17h16_53.png
アクションのプルダウンから、次は[メソッドの作成]を選択します。
2020-01-10_17h25_17.png
プルダウンから[GET]を選択したら、横にチェックマークが出るのでクリック。
2020-01-10_17h27_46.png
セットアップ画面が出てくるので、先程作った Lambda 関数の名前を入力し紐付けます。
2020-01-10_17h30_01.png

2020-01-10_18h02_17.png
最後にアクションのプルダウンから[APIのデプロイ]を選択します。
2020-01-14_09h20_06.png
デプロイされるステージは[新しいステージ]を選択。[prod]を入力し[デプロイ]をクリックします。
2020-01-14_09h22_13.png
出来上がったAPIを確認するために、URLをコピーしておきます。
image.png

#4.確認しよう
先程コピーしたURLの最後に、API で作ったリソースを指定します。
今回は「/users/{id}」でしたので、id のところは Dynamo で登録したidの番号を指定します。
(私が登録したのは1か2か3)
Dynamo で登録した「 id : 1 」の「 Jill 」を引き出せました!
image.png

#所感
APIを形成するには、本来ならもっと細かく、インフラの構築から始めるようなものだと想像してましたが
データベースに登録して、Lambda でコードを書いて、API に紐付けただけで完了できました!
実に簡単で早い!これなら確かに、API やアプリの中身を構築することだけに集中して作業ができそうですね。
環境構築や障害対策のことを考えながら、アプリを運用するのはコストもかかるし、開発だけに集中するのはなかなか難しいところであると思います。
一日のリクエスト数、集中する時間が限られているものであれば、コスト面で最適だと思います。

#公式リンク
AWS Lambda 開発者ガイド
参考にしたAWSの公式サミット動画

1
3
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
3