Serverless Framework(APIGateWay+Lambda+DynamoDB)でのリダイレクト
Serverless Framework(APIGateWay+Lambda+DynamoDB)でのリダイレクト:
pathパラメータをキーにDynamoDBに格納されているURLへリダイレクトさせる。
2018/11/05にAPIGatewayでWAFを有効化できるようになりました(ワーイ)
※ちょうど先日(2018/12/18)APIGatewayで WebSocketAPI の構築が出来るようになったのですが、そこには今回触れません
リソースのアクション→リソースの作成
リソースのアクション→メソッドの作成
※ Lambda プロキシ統合 はAPIGatewayに対するリクエストの情報をよしなにまとめてLambdaに渡してくれるの非常に便利です!!!
※ Lambda プロキシ統合 を設定した場合はlamdbaからのレスポンス形式に注意が必要です
APIGateWayにデプロイされたエンドポイントにpathパラメータをDynamoDBに挿入した
https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/hogepath
無事にリダイレクトされたら成功です
macOS Mojave 10.14
serverless 1.35.1
npm 6.5.0
ServerlessでDynamoDBのキャパシティユニットを設定しなくてもデフォルト値が入るだろうと記載しないでデプロイしたらCloudFormationのエラーにハマった一日潰しました・・・
要件
pathパラメータをキーにDynamoDBに格納されているURLへリダイレクトさせる。
アーキテクチャ
2018/11/05にAPIGatewayでWAFを有効化できるようになりました(ワーイ)
APIGateway設定
新規作成
※ちょうど先日(2018/12/18)APIGatewayで WebSocketAPI の構築が出来るようになったのですが、そこには今回触れません
パスパラメータの設定
リソースのアクション→リソースの作成
メソッドの設定(GET)
リソースのアクション→メソッドの作成※ Lambda プロキシ統合 はAPIGatewayに対するリクエストの情報をよしなにまとめてLambdaに渡してくれるの非常に便利です!!!
メソッド作成後
Lambda
handler.py
import json import boto3 from boto3.dynamodb.conditions import Key, Attr DYNAMO_TABLE_NAME = 'hoge-dynamodb' def hoge(event, context): path_id = event['pathParameters']['Id'] # DBConnection dynamodb = boto3.resource('dynamodb') table = dynamodb.Table(DYNAMO_TABLE_NAME) partition_key = {"Id": path_id} res = table.get_item(Key=partition_key) item = res["Item"] result = { "statusCode": 302, "headers": { "Location": item['url'] }, "body": '' } return result
DynamoDB
新規テーブル作成
項目の追加
Serverless設定
serverless.yml
service: redirect frameworkVersion: ">=1.1.0 <2.0.0" custom: pythonRequirements: dockerizePip: true provider: name: aws runtime: python3.6 stage: dev region: ap-northeast-1 profile: hoge-profile environment: STAGE: ${self:provider.stage} iamRoleStatements: - Effect: Allow Action: - dynamodb:* Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/*" functions: redirect: handler: handler.hoge events: - http: method: get path: /{Id} integration: lambda-proxy resources: Resources: RedirectDynamoDbTable: Type: AWS::DynamoDB::Table DeletionPolicy: Retain Properties: TableName: hoge-dynamodb AttributeDefinitions: - AttributeName: Id AttributeType: S KeySchema: - AttributeName: Id KeyType: HASH ProvisionedThroughput: ReadCapacityUnits: 1 WriteCapacityUnits: 1
デプロイ
$ sls deploy -v
確認
APIGateWayにデプロイされたエンドポイントにpathパラメータをDynamoDBに挿入した hogepath
を付与してアクセスします。https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/dev/hogepath
無事にリダイレクトされたら成功です
実行環境
macOS Mojave 10.14serverless 1.35.1
npm 6.5.0
コメント
コメントを投稿