はじめてのサーバーレス ~ サーバーレスな会員制サイトを作ってみよう ~ 第 1 回
亀田 治伸

みなさん、こんにちは。シニアエバンジェリストの亀田です。みなさん、コーディングしてますか ?
サーバーレスコンピューティングは 2014 年に AWS Lambda がリリースされその歴史が始まりました。サーバーのプロビジョニングや OS を管理することなく、コードを実行することが でき、そのキャパシティはリクエストに応じ、自動でスケールします。
上手に活用することで開発者はコーディングにフォーカスすることができ、開発生産性を大きく向上させることができます。
この記事を読んでいる皆さんの中には、「サーバレス」というキーワードを聞いたことがある方でも、実はまだ触ったことの無いかがたいるのではないでしょうか。この記事はそのような方向けに書いています。まだ遅くはないサーバレス、是非最初の一歩を踏み出してみましょう。
この記事では、以下のサーバレス系サービスを活用し、簡易的な会員制サイトにログインしたユーザーが自分のデータを登録できる、という環境をつくる Step by Step ガイドをお届けします。少し記事の分量が多いので、数回に分けて連載を予定していますのでお付き合いください。
この Step by Step ガイドでは以下のサービスを使用します。
- コンピューティング : AWS Lambda
- データストア : Amazon DynamoDB
- API の発行と管理 : Amazon API Gateway
- ユーザー認証・認可 : Amazon Cognito
目次
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »
毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。
1. 準備事項
- AWS を利用可能なネットワークに接続された PC (Windows, Mac OS, Linux 等)
- 事前に用意していただいた AWS アカウント
- ブラウザ (Firefox もしくは Chrome を推奨)
また、こちらからハンズオンに使う必要なファイルをダウンロードしておきましょう。
2. ハンズオン全体を通しての注意事項
各手順において、「任意」と記載のあるものについては自由に名前を変更いただくことができますが、ハンズオン中に指定した名前がわからなくならないように、ハンズオン実施中は基本的にはそのままの名前で進めることを推奨いたします。
3. 準備 - Cloud9 環境の作成
このハンズオンで使用する AWS Cloud9 の環境を構築します。AWS Cloud9 は、コードの記述・実行・デバッグが行えるクラウドベースの統合開発環境 (IDE) です。
このハンズオンでは、Amazon EC2 インスタンスを利用して新規に Cloud9 の環境を構築します。
AWS マネジメントコンソールにログインします。
AWS マネジメントコンソールのサービス一覧から Cloud9 を選択します。
以下のように設定します。(基本的にデフォルトのままで構いません)
- Environment type : [Create a new EC2 instance for environment (direct access)]
- Instance type : [t2.micro]
- Platform : [Amazon Linux]
- Cost-saving setting : [After 30 minutes] (アイドル状態が 30 分続くと自動的にEC2インスタンスを停止する設定です)
- IAM Role : [AWSServiceRoleForAWSCloud9] (変更できません)
[Network settings (advanced)] をクリックして展開します。
Cloud9 環境を構築する VPC および サブネット を指定できますので、任意の VPC を指定してください。サブネットは「パブリックサブネット」であるものを指定してください。
不明な場合はデフォルト VPC (名前に「(default)」が付いた VPC) を選択すれば問題ありません。
全て終わったら [Next Step] をクリックします。
4. Amazon DynamoDB および AWS Lambda を使用して動作確認を行う
4-1. DynamoDB テーブルの作成
以下の通り入力します。
- テーブル名 : [YYYYMMDDserverless] (YYYYMMDD は本日の日付)
- プライマリーキー : [Artist] と入力、右側のプルダウンから [文字列] を選択
- [ソートキーの追加] にチェックを入れる
- ソートキー : [Title] と入力、右側のプルダウンから [文字列] を選択
[作成] をクリックします。テーブルが作成されるまで 1~2 分程度かかります。
テーブルが作成されましたら、[項目] タブをクリックします。
下図のように [Artist]、[Title] の各属性が構成されていることを確認します。
4-2. Lambda 用 IAM ポリシーの作成
[名前] 欄に [YYYYMMDDserverlessLambdaPolicy] と入力します。(YYYYMMDD は本日の日付)
入力したら [ポリシーの作成] をクリックします。
4-3. Lambda 用 IAM ロールの作成
[信頼されたエンティティの種類] で [AWS サービス] が選択されていることを確認します。
[ユースケースの選択] で [Lambda] をクリックして選択状態にします。
[次のステップ: アクセス権限] をクリックします。
ポリシーの一覧から、前手順で作成した [YYYYMMDDserverlessLambdaPolicy] を探して、左側のチェックボックスにチェックを入れます。
[次のステップ: タグ] をクリックします。
[タグの追加] ページでは何も入力せず、[次のステップ: 確認] をクリックします。
ポリシーの一覧から、前手順で作成した [YYYYMMDDserverlessLambdaPolicy] を探して、左側のチェックボックスにチェックを入れます。
[次のステップ: タグ] をクリックします。
[タグの追加] ページでは何も入力せず、[次のステップ: 確認] をクリックします。
4-4. Cloud9 上での Lambda 関数の作成とテスト (Write 関数)
[Function name] 欄に [YYYYMMDDserverlessWrite] と入力します。(YYYYMMDD は本日の日付)
[Application name] 欄は [Function name] 欄と同じ内容が自動的に入力されますので、そのままにします。
[Next] をクリックします。
[Select runtime] で [Node.js 12.x] を選択します。
[Select blueprint] の中から [empty-nodejs] をクリックして選択状態にします。
[Next] をクリックします。
以下の通りに選択します。
- Memory : [128 MB] (デフォルトのまま)
- Role : [Choose an existing role]
- Existing Role : 前手順で作成した [YYYYMMDDserverlessLambdaRole] を選択
[Next] をクリックします。
*注意 : この手順で先に作成した IAM ロールが表示されない場合、IAM ロールに以下のポリシーを追加で作成して再度試してください。[AmazonDynamoDBFullAccess] [AWSCloud9Administrator]
初期入力されているサンプルコードを一旦全て削除します。
フォルダ内の [lambda_function_write.txt] の内容をコピーして編集画面にペーストします。コード中に DynamoDB のテーブル名が記述されている箇所がありますので、実際に作成したテーブルの名前に書き換えます。
DynamoDB の画面に移動して、テーブルの [項目] タブを表示します。
リロードボタンをクリックして、Lambda 関数によって書き込まれたデータが表示されていることを確認します。
4-5. Cloud9 上での Lambda 関数の作成とテスト (Read関数)
[Function name] 欄に [YYYYMMDDserverlessRead] と入力します。(YYYYMMDD は本日の日付)
[Application name] 欄は [Function name] 欄と同じ内容が自動的に入力されますので、そのままにします。
[Next] をクリックします。
[Select runtime] で [Node.js 12.x] を選択します。
[Select blueprint] の中から [empty-nodejs] をクリックして選択状態にします。
[Next] をクリックします。
以下の通りに選択します。
- Memory : [128 MB] (デフォルトのまま)
- Role : [Choose an existing role]
- Existing Role : 前々項で作成した [YYYYMMDDserverlessLambdaRole] を選択
[Next] をクリックします。
初期入力されているサンプルコードを一旦全て削除します。
[lambda_function_read.txt] の内容をコピーして編集画面にペーストします。
コード中に DynamoDB のテーブル名が記述されている箇所がありますので、実際に作成したテーブルの名前に書き換えます。
[EXECUTION RESULTS] 欄に実行結果が表示されます。エラー等が発生しておらず、[Success] と表示されていれば成功です。
DynamoDB のデータが [Response] に表示されていることを確認します。
4-6. Lambda 関数のデプロイ
[Local Functions] (= Cloud9 上に存在する関数) 配下に 2 つのフォルダがあります。
まず、[YYYYMMDDserlverlessRead] の方をクリックして選択状態にします。
[Deploy] ボタン ([↑]) をクリックします。
Lambda 関数のデプロイが行われます。
フォルダアイコンが「デプロイ中」の動きとなりますので、終わるまで待ちます。
同様にして、[YYYYMMDDserlverlessWrite] をクリックして選択状態にしてから、[Deploy] ボタンをクリックします。
デプロイが終わるまで待ちます。
AWS マネジメントコンソールのサービス一覧から [Lambda] を選択します。
関数の一覧に [cloud9-YYYYMMDDserverless…] で始まる名前の関数が 2 つ存在することを確認します。
5. まとめ
今日はページの関係でここまでです。なるべく早く第二回を出しますので、楽しみにお待ちください。
今日作った環境は継続的な課金は発生しませんので残しておいてください。
プロフィール

亀田 治伸
アマゾン ウェブ サービス ジャパン合同会社
エバンジェリスト
兵庫県伊丹市出身。米国州立南イリノイ大学卒業。
認証系独立 ASP 、動画・音楽配信システム構築、決済代行事業者を経て現職。ユーザー視点に立ったわかりやすい AWS のサービス解説を心掛ける。
AWS のどんなサービスでも 1 分づつ資料なしで説明することができる、という特技を持つ自称【AWSマニア】
AWS のベストプラクティスを毎月無料でお試しいただけます
さらに最新記事・デベロッパー向けイベントを検索
AWS を無料でお試しいただけます