Добавление заголовков в ответ шлюза API AWS с помощью чаши
Мой вариант использования требует, чтобы мое приложение возвращало заголовки CORS, когда ответ об ошибке 401.
Эта функциональность была добавлена AWS в прошлом году ( см. Это). Это можно сделать с помощью шаблона Cloudformation и Swagger, но я не уверен, что это возможно с Chalice.
1 ответ
Я решил свою проблему с помощью скрипта Python, который добавляет заголовки CORS для ответа 401 и повторно развертывает API. Это перераспределение API занимает секунду или две, так как не нужно развертывать все лямбды, такие как Chalice.
deploy.sh
#!/usr/bin/env bash
cd services
A="$(chalice deploy --stage $1)"
cd ..
python update_api_response_headers.py "$A" "$1"
update_api_response_headers.py
import boto3
import sys
import re
if len(sys.argv) != 3:
print("usage: python script.py <CHALICE_DEPLOYMENT_RESULT> <STAGE>")
exit()
search = re.search('URL: https:\\/\\/([a-zA-Z0-9]+).+', sys.argv[1])
api_id = search.group(1)
print(api_id)
if not api_id:
print(sys.argv[1])
exit()
client = boto3.client('apigateway')
response = client.put_gateway_response(
restApiId=api_id,
responseType='UNAUTHORIZED',
statusCode='401',
responseParameters={
"gatewayresponse.header.Access-Control-Allow-Origin": "'*'",
"gatewayresponse.header.Access-Control-Allow-Headers": "'*'"
}
)
response = client.create_deployment(
restApiId=api_id,
stageName=sys.argv[2])
print(sys.argv[1])
Папка "Службы" содержит мое приложение для чаши. deploy.sh и update_api_response_headers.py размещаются на один уровень выше приложения для чаши. Для развертывания приложения мне просто нужно использовать:
./deploy.sh stage_name