API Gateway의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모
12745 단어 람다파이썬설계서boto3APIGateway
소개
AWS API Gateway 설계서를 만들게 되었고, 화면을 보면서 설정값을 복사하고 있으면 의식이 없어져 좌절했기 때문에, lambda로 취득한 json을 설계서라고 하기로 했습니다
공식 자료에서는 어느 것이 어느 설정인지 알기 어렵고, qiita에도 없는 것 같기 때문에 스스로 때문에 1개 1개 조사했습니다
htps : // 보토 3. 아마조나 ws. 코 m/v1/도쿠멘들 온/아피/ㅁ st/레후 렌세/세르ゔぃ세 s/아피가테와 y. HTML #C
※APIGatewayV2를 알아차리는 것이 늦었기 때문에 APIGateway로 만들고 있습니다
여기 계속됩니다
AWS S3의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모
htps : // 이 m/ぅ나 r_수 rd3/이고 ms/5df4122d797b23이다79
본문
설정 정보 취득에 이용한 메소드 리스트
모든 인수는 버킷 이름입니다.
예import boto3
client = boto3.client('apigateway', region)
메소드 이름
설명
get_rest_apis()
API 목록 얻기
get_resources(restApiId=restApiId)
리소스 정보 얻기 restoApiId get_rest_apis
client.get_method(restApiId=restApiId, resourceId=resourceId, httpMethod=httpMethod)
메소드의 정보를 얻는 restApiId, resourceId, httpMethod는 get_resources
get_stages(restApiId=restApiId)
스테이지에 대한 정보를 얻기 위해 restApiId get_rest_apis
코드
코코
show-APIGateway-setting.py# API Gatewayの設計書用の設定情報取得lambda
# テストで実行した結果が取得情報になる
import json
import boto3
from datetime import date, datetime, timedelta
# 設定
# リージョン
region_list = [
"us-east-1",
"us-east-2",
"us-west-1",
"us-west-2",
"ca-central-1",
"eu-central-1",
"eu-west-1",
"eu-west-2",
"eu-west-3",
"ap-northeast-1",
"ap-northeast-2",
# "ap-northeast-3", #ないっぽい
"ap-southeast-1",
"ap-southeast-2",
"ap-south-1",
"sa-east-1"
]
def lambda_handler(event, context):
region_lambda_list = []
#リージョンごとに取得
for region in region_list:
client = boto3.client('apigateway', region)
# API Gatewayのリストを取得
responce = {}
responce = client.get_rest_apis()
restApi_items = responce['items']
for idx, restApi in enumerate(restApi_items):
res_resources = {}
res_stages = {}
# api id
restApiId = restApi['id']
# リソースの情報を取得
res_resources = client.get_resources(restApiId=restApiId)
res_resources_items = res_resources['items']
# メソッドの情報を取得
for idxr, res_resources_item in enumerate(res_resources_items):
resourceId = res_resources_item['id']
# methodがあれば情報取得
if ('resourceMethods' in res_resources_item):
for httpMethod in res_resources_item['resourceMethods'].keys():
res_method = client.get_method(
restApiId=restApiId,
resourceId=resourceId,
httpMethod=httpMethod
)
# メソッドごとに情報をまとめる
res_resources['items'][idxr]['resourceMethods'][httpMethod]['response_method'] = res_method
# リソースごとに情報をまとめる
responce['items'][idx]['resources'] = res_resources
# ステージの情報を取得
res_stages = client.get_stages(restApiId=restApiId)
for idxs,stageItem in enumerate(res_stages['item']):
res_stage = client.get_stage(
restApiId=restApiId,
stageName=stageItem['stageName']
)
res_stages['item'][idxs]['stage_info']=res_stage
# ステージごとに情報をまとめる
responce['items'][idx]['stages'] = res_stages
region_lambda_list.append({region: responce})
return json.dumps(region_lambda_list, default=json_serial)
def json_serial(obj):
if isinstance(obj, (datetime, date)):
# 時差の修正9時間
obj = obj - timedelta(hours=-9)
return obj.strftime('%Y/%m/%d %H:%M')
raise TypeError("Type %s not serializable" % type(obj))
결론
이제 설계 문서를 최신화하는 것이 매우 쉬워졌습니다
그리고 같은 API Gateway 만드는 것도 이 값과 boto3의 메소드 사용해 만들 수 있을 것・・・
남았으면 하고 싶은 예정
cloudfront의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모
lambda의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모
Reference
이 문제에 관하여(API Gateway의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lunar_sword3/items/b3e5d314ea0bb2a4e58e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
설정 정보 취득에 이용한 메소드 리스트
모든 인수는 버킷 이름입니다.
예
import boto3
client = boto3.client('apigateway', region)
메소드 이름
설명
get_rest_apis()
API 목록 얻기
get_resources(restApiId=restApiId)
리소스 정보 얻기 restoApiId get_rest_apis
client.get_method(restApiId=restApiId, resourceId=resourceId, httpMethod=httpMethod)
메소드의 정보를 얻는 restApiId, resourceId, httpMethod는 get_resources
get_stages(restApiId=restApiId)
스테이지에 대한 정보를 얻기 위해 restApiId get_rest_apis
코드
코코
show-APIGateway-setting.py
# API Gatewayの設計書用の設定情報取得lambda
# テストで実行した結果が取得情報になる
import json
import boto3
from datetime import date, datetime, timedelta
# 設定
# リージョン
region_list = [
"us-east-1",
"us-east-2",
"us-west-1",
"us-west-2",
"ca-central-1",
"eu-central-1",
"eu-west-1",
"eu-west-2",
"eu-west-3",
"ap-northeast-1",
"ap-northeast-2",
# "ap-northeast-3", #ないっぽい
"ap-southeast-1",
"ap-southeast-2",
"ap-south-1",
"sa-east-1"
]
def lambda_handler(event, context):
region_lambda_list = []
#リージョンごとに取得
for region in region_list:
client = boto3.client('apigateway', region)
# API Gatewayのリストを取得
responce = {}
responce = client.get_rest_apis()
restApi_items = responce['items']
for idx, restApi in enumerate(restApi_items):
res_resources = {}
res_stages = {}
# api id
restApiId = restApi['id']
# リソースの情報を取得
res_resources = client.get_resources(restApiId=restApiId)
res_resources_items = res_resources['items']
# メソッドの情報を取得
for idxr, res_resources_item in enumerate(res_resources_items):
resourceId = res_resources_item['id']
# methodがあれば情報取得
if ('resourceMethods' in res_resources_item):
for httpMethod in res_resources_item['resourceMethods'].keys():
res_method = client.get_method(
restApiId=restApiId,
resourceId=resourceId,
httpMethod=httpMethod
)
# メソッドごとに情報をまとめる
res_resources['items'][idxr]['resourceMethods'][httpMethod]['response_method'] = res_method
# リソースごとに情報をまとめる
responce['items'][idx]['resources'] = res_resources
# ステージの情報を取得
res_stages = client.get_stages(restApiId=restApiId)
for idxs,stageItem in enumerate(res_stages['item']):
res_stage = client.get_stage(
restApiId=restApiId,
stageName=stageItem['stageName']
)
res_stages['item'][idxs]['stage_info']=res_stage
# ステージごとに情報をまとめる
responce['items'][idx]['stages'] = res_stages
region_lambda_list.append({region: responce})
return json.dumps(region_lambda_list, default=json_serial)
def json_serial(obj):
if isinstance(obj, (datetime, date)):
# 時差の修正9時間
obj = obj - timedelta(hours=-9)
return obj.strftime('%Y/%m/%d %H:%M')
raise TypeError("Type %s not serializable" % type(obj))
결론
이제 설계 문서를 최신화하는 것이 매우 쉬워졌습니다
그리고 같은 API Gateway 만드는 것도 이 값과 boto3의 메소드 사용해 만들 수 있을 것・・・
남았으면 하고 싶은 예정
cloudfront의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모
lambda의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모
Reference
이 문제에 관하여(API Gateway의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lunar_sword3/items/b3e5d314ea0bb2a4e58e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(API Gateway의 설정 정보를 lambda(python + boto3)로 취득했을 때의 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lunar_sword3/items/b3e5d314ea0bb2a4e58e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)