(社内勉強会) AWS サーバレスAPIハンズオン
概要
AWSにてWebAPIをサーバレスで構築するハンズオンです。
ハンズオンの内容
- AWSコンソールからAPIGatewayにてモックAPIを構築する
- AWSコンソールから手動でAPIGatewayとLambdaを構築する
- SAM(Serverless Application Model)により自動でAPIGatewayとLambdaを構築する
(※時間が足りれば)
事前準備
- AWSアカウント登録
- AWS CLIインストール
- SAM CLIインストール
AWSCLIのインストール
(※時間が足りれば)
- AWSアカウント登録
- AWS CLIインストール
- SAM CLIインストール
AWSCLIのインストール
下記ページからWindowsのMSIをダウンロードして、インストールお願いします。
https://aws.amazon.com/jp/cli/
コマンドプロンプトにて下記コマンドを実行し、バージョンが表示されればOK
$ aws --version
aws-cli/1.16.212 Python/3.6.0 Windows/10 botocore/1.12.202
```![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10978/baa42ebc-a53b-9029-4bf5-9825423fb806.png)
## SAMCLIのインストール
下記ページからWindowsのMSIをダウンロードして、インストールお願いします。
https://aws.amazon.com/jp/serverless/sam/
コマンドプロンプトにて下記コマンドを実行し、バージョンが表示されればOK
$ sam --version
SAM CLI, sam --version 0.19.0
```
1. AWSコンソールからAPIGatewayにてモックAPIを構築する
AWSマネジメントコンソールからログイン
https://console.aws.amazon.com/console/home
[APIGateway]
API作成
今すぐはじめるを選択
1. 「REST」を選択
2. 「新しいAPI」を選択
3. API名:"test"
4. エンドポイントタイプ:「リージョン」
5. APIの作成ボタン押下
モデル作成
モデルを選択
1. 「作成」ボタン押下
2. モデル名:"user"
3. コンテンツタイプ:"application/json"
4. モデルのスキーマを下記の通り登録
{
"$schema" : "http://json-schema.org/draft-04/schema#",
"title" : "User Schema",
"type" : "object",
"properties" : {
"userId" : { "type" : "string" },
"userName" : { "type" : "string" }
}
}
メソッド作成
GETメソッドを作成します。
1.「アクション」→「メソッド作成」
2. 「GET」を選択
3. 統合タイプ:Mock → 保存
統合レスポンス
- メソッドレスポンスのステータス:200を選択
- マッピングテンプレート:Content-Typeを"application/json"で登録。
- テンプレートの生成で「User」を選択して下記の通り登録し、保存ボタン押下
#set($inputRoot = $input.path('$'))
{
"userId" : "1",
"userName" : "test"
}
テスト実行
レスポンス本文が下記の通りとなればOK
{
"userId": "1",
"userName": "test"
}
デプロイ
アクション→APIのデプロイ
デプロイされるステージ:「新しいステージ」
ステージ名:dev
デプロイボタン押下
ステージ[dev]を選択
エクスポート:Swaggerの形式でエクスポート
補足
- Swagger+Postman拡張の形式でエクスポートすると、Postmanから簡単にAPIをコールできます。
- APIクライアント開発チームにAPIスキーマとモックAPIを提供することで、APIロジック実装との並行開発が可能になります。
2. AWSコンソールから手動でAPIGatewayとLambdaを構築
[AWS Lambda]
Lambda関数作成
- サービスから「Lambda」を選択
- 関数の作成ボタンを押下
- 「一から作成」を選択
- 関数名:"getUser"
- ランタイム:「Python3.7」 ※言語はお好みで
- 実行ロール:「基本的なLambdaアクセス権限でロールを作成」
- 関数の作成ボタンを押下
Lambda関数のテスト
- テストボタン押下
- イベント名:"test"
- 作成ボタン押下
- コードを編集
import json
def lambda_handler(event, context):
response = {
'userId': '1234567890',
'userName': 'hirata'
}
return {
'statusCode': 200,
'body': json.dumps(response)
}
ファイルを上書き(Ctrl+S)して、保存ボタン押下
テストボタン押下
実行結果の下記の通りに表示されたらOK
{
"statusCode": 200,
"body": "{\"userId\": \"1234567890\", \"userName\": \"hirata\"}"
}
[APIGateway]
APIGatewayからLambda関数を呼ぶ設定を行う
- サービスから「API Gateway」を選択
- 先程作成したAPI「test」を選択
- GETメソッド選択
- 統合リクエストを選択
- 統合タイプ:「Lambda 関数」に変更
- Lambdaプロキシ統合の仕様:OFF
- Lambdaリージョン:「ap-northeast-1」を選択
- Lambda関数:「getUser」を入力
- デフォルトタイムアウトの使用:ON
- 保存ボタン押下
APIテスト
APIGatewayのGETメソッドのテストを実行
下記のように結果が返ってこればLambda関数が呼ばれたことが確認できます。
[レスポンス本文]
{
"statusCode": 200,
"body": "{\"userId\": \"22872\", \"userName\": \"hirata\"}"
}
3. SAMにより自動でAPIGatewayとLambdaを構築
SAMとは
AWS サーバーレスアプリケーションモデル
https://aws.amazon.com/jp/serverless/sam/
サーバーレスアプリケーション構築用のオープンソースフレームワーク
準備
IAMユーザー作成
AWSマネジメントコンソールにログイン
1. サービスから「IAM」を選択
2. ユーザーを選択
3. 「ユーザーを追加」ボタン押下
4. ユーザー名:"SAM"
5. アクセスの種類:「プログラムによるアクセス」を選択 → 「次のステップ」ボタン押下
6. 「既存のポリシーを直接アタッチ」を選択
7. 「AWSCloudFormationFullAccess」「AWSLambdaFullAccess 」「AmazonAPIGatewayAdministrator」「IAMFullAccess」を検索してチェック→「次のステップ」ボタン押下 ※
8. そのまま「次のステップ」ボタン押下
9. そのまま「ユーザーの作成」ボタン押下
10. 作成完了画面にて「.CSVのダウンロード」ボタンを押下(後で利用するので大事に保管してください)
※本来は必要最低限の権限を付与しますがハンズオンのため割愛
S3バケット作成(sam-deploy-test-{社員番号})
- サービスから「S3」を選択
- 「バケットを作成する」ボタン押下
- バケット名:"sam-deploy-test-{社員番号}"
※
→ 次へボタン押下 - オプションの設定:そのまま次へボタン押下
- アクセス許可の設定:そのまま次へボタン押下
- 確認:「バケットを作成」ボタン押下
※同じ名前のバケットを作成できないため
ローカル環境にAWS認証情報設定
ローカル環境のコマンドプロンプトにて下記コマンド実行
先程ダウンロードしたCSVを確認してアクセスキーとシークレットキーを入力
$ aws configure
AWS Access Key ID [None]: {Access key ID}
AWS Secret Access Key [None]: {Secret Access Key}
Default region name [None]: ap-northeast-1
Default output format [None]: json
SAM実行
プロジェクト作成
$ sam init --runtime python3.7 --name test
作成されたtestフォルダに移動
testフォルダの中身を確認
hello_world ←ここにLambdaで実行するソースファイルが入っています
tests
.gitignore
event.json
README.md
template.yaml ←SAMテンプレート
デプロイパッケージ作成
$ sam package --s3-bucket sam-deploy-test-{社員番号} --output-template-file packaged.yaml --no-verify
・・・
Successfully packaged artifacts and wrote output template to file packaged.yaml.
package.yamlファイルが作成され、S3に「sam-deploy-test-{社員番号}」のバケットとその中にデプロイ用のファイルがアップロードされます。
※プロキシ経由の場合は下記実行しておく
SET HTTPS_PROXY=http://{ユーザー}:{パス}@{ホスト}:{ポート}
デプロイ
$ sam deploy --template-file packaged.yaml --stack-name api --no-verify --capabilities CAPABILITY_IAM
・・・・
Successfully created/updated stack - api
デプロイは、WEBコンソールのCloudformation画面からも可能です。
確認
スタック作成結果は、コンソールのCloudformation画面にて確認
APIGatewayのAPI、Lambda関数が作成されているのを確認
最後はお片付けとして、コンソールのCloudformation画面にてスタック削除することで、作成されたAPIとLambdaが削除されます。
おまけ
AWSのサーバレスAPI環境をコード化することでデプロイ自動化が可能
Author And Source
この問題について((社内勉強会) AWS サーバレスAPIハンズオン), 我々は、より多くの情報をここで見つけました https://qiita.com/kj_hira/items/c7794e0e412a8d7b75c5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .