目的
AWS Certified Developer - Associateの勉強をしている中で
理解が浅いサービスについて実際に使用してみます
今回はAPI GatewayとLambdaを使用して、リクエストを送れるまでをやってみます
手順
- Lambda関数の作成
- API Gatewayの設定
Lambda関数の作成
1. Lambdaのページに移動、左のメニューから関数を選択
2. 右上の関数の作成を選択
3. 下の設定で作成(記載していないものはデフォルト設定です)
関数の作成:一から作成
基本的な情報
関数名:test_lambda
ランタイム:Python
コードは作成時に用意されているサンプルをそのまま使用します
import json
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
API Gatewayの設定
APIの作成
1. API Gatewayのページに移動、左のメニューからAPIを選択
2. 右上のAPIを作成を選択
3. 下の設定で作成(記載していないものはデフォルト設定です)
API タイプを選択:REST API
名前と説明
API 名:test lambda API
メソッドの作成
1. 作成されたAPIを選択、左のメニューからリソースを選択
2. アクションからメソッドの作成を選択、GETで作成
3. 以下の内容でセットアップ
Lambda関数の作成で作成した関数が見つからない場合、
Lambda関数の名前やリージョンが正しいことを再確認します
テスト
1. テストを選択
2. 下のテストを選択し、レスポンス本文にLambdaの内容があることを確認
IP制限
このままだと外部に公開した際に、誰からでもアクセスできる状態のため制限をします
今回はリソースポリシーでIPによる制限を試してみました
1. 作成されたAPIを選択、左のメニューからリソースポリシーを選択
2. ポリシーを設定し、保存を選択
今回は以下のサイトのサンプルを参考に設定します
https://repost.aws/ja/knowledge-center/api-gateway-resource-policy-access
sourceIpOrCIDRBlock部分を許可したいIPに変更します
例
["52.95.36.0/22", "15.230.39.196/31", "52.93.178.219/32"]
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*/*/*"
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "execute-api:/*/*/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": ["sourceIpOrCIDRBlock", "sourceIpOrCIDRBlock"]
}
}
}
]
}
デプロイ
外部からアクセスできるようにするための作業です
1. 作成されたAPIを選択、左のメニューからリソースを選択
2. アクションからAPIのデプロイを選択
3. 下の設定でデプロイ
デプロイされるステージ:[新しいステージ]
ステージ名:test
4. URLの生成が行われる
画面上あたりに生成されたURLが記載されています
デプロイ後にリソースポリシーを変更した場合、再度デプロイが必要なので注意が必要です
アクセス確認
生成されたURLにアクセスし、うまく表示されていれば成功です
またIPによる制限がうまくいっている場合、
許可されていないIPからのアクセスは以下のようなメッセージが表示されます
{"Message":"User: anonymous is not authorized ~省略~ with an explicit deny"}