Добавление заголовков в ответ шлюза AWS API с помощью Chalice

Мой вариант использования требует, чтобы мое приложение возвращало заголовки CORS, когда ответ об ошибке равен 401.

Эта функциональность была добавлена ​​AWS в прошлом году (см.). Это можно сделать с помощью шаблона Cloudformation и Swagger, но я не уверен, что это возможно с Chalice.




Ответы (1)


Я решил свою проблему с помощью скрипта Python, который добавляет заголовки CORS для ответа 401 и повторно развертывает API. Это повторное развертывание API занимает секунду или две, так как не нужно развертывать все Lambdas, такие как Chalice.

развернуть.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])

Папка Services содержит мое приложение чаши. deploy.sh и update_api_response_headers.py размещаются на один уровень выше приложения чаши. Чтобы развернуть приложение, мне просто нужно использовать:

./deploy.sh stage_name
person amsh    schedule 10.12.2018