Привет, разработчики,
Я собираюсь рассказать вам одну проблему AWS SAM, касающегося ресурса AWS:: Serverless:: API
и преобразовать AWS:: Serverless-2016-10-31
поднят над Stackoverflow и их решение для борьбы с временной основой, потому что эта проблема все еще существует. Позвольте мне объяснить, что сначала проблема.
Заявление проблемы :
При создании AWS Server Bless API Gateway с использованием SAM Эта конфигурация для развертывания на стадии «Prod» вместе с образцом кода без сервера, но, создавая ресурсы, она создает два этапа под шлюзом API, который вы предоставили в соответствии с примером ниже, а один — по умолчанию Стадия Анкет Так что, если вы хотите создать собственную сцену, не может создать его, выбросить ошибку, это Стадия уже существует
:
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: AWS SAM template with a simple API definition Resources: ApiGatewayApi: Type: AWS::Serverless::Api Properties: StageName: prod ApiFunction: # Adds a GET api endpoint at "/" to the ApiGatewayApi via an Api event Type: AWS::Serverless::Function Properties: Events: ApiEvent: Type: Api Properties: Path: / Method: get RestApiId: Ref: ApiGatewayApi Runtime: python3.7 Handler: index.handler InlineCode: | def handler(event, context): return {'body': 'Hello World!', 'statusCode': 200}
В AWS Sam есть ошибка Сценический псевдоним
Это создает стадию по умолчанию вместе с именем сцены, которое вы предоставили, как Prod. Сначала вы удалите свой текущий, затем вы можете применить эти изменения.
Чтобы решить эту проблему, есть два способа, добавив OpenApiversion: '2.0'
В вашем файле YAML:
Решение 1 : Под свойствами следующих Стаговое имя
может добавить это. Эти свойства могут быть добавлены для AWS:: Serverless:: API
или другие ресурсы, такие как AWS:: Serverless:: Lambda
Анкет
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: AWS SAM template with a simple API definition Resources: ApiGatewayApi: Type: AWS::Serverless::Api Properties: StageName: 'V1' OpenApiVersion: '2.0' ApiFunction: # Adds a GET api endpoint at "/" to the ApiGatewayApi via an Api event Type: AWS::Serverless::Function Properties: Events: ApiEvent: Type: Api Properties: Path: / Method: get RestApiId: Ref: ApiGatewayApi Runtime: python3.7 Handler: index.handler InlineCode: | def handler(event, context): return {'body': 'Hello World!', 'statusCode': 200}
Решение 2 : Следующее в вашем шаблоне SAM на верхнем уровне и убедитесь, что вы определили стадию, используя «Стагновое» на вашем ресурсе AWS:: Serverless: API. Это будет глобальный уровень, если у вас есть несколько ресурсов, таких как API или Lambda и т. Д.
Globals: Api: OpenApiVersion: 3.0.1 Cors: '*' Resources: ImplicitApiFunction: Type: AWS::Serverless::Function Properties: CodeUri: s3://sam-demo-bucket/member_portal.zip Handler: index.gethtml Runtime: nodejs12.x Events: GetHtml: Type: Api Properties: Path: / Method: get ExplicitApi: Type: AWS::Serverless::Api Properties: StageName: Prod
Примечание : Это решение работает только тогда, когда вы создаете API с нуля. Если API был создан ранее, и пользователь добавляет OpenApiversion: '2.0'
Для этого это не удаляет сцену «сцены». Это должно быть добавлено с самого начала. Также этот пример для Yaml того же может быть применен для формата JSON.
Если вам нравится мой блог, пожалуйста, как статья, она побудит меня написать больше таких проблем, ориентированных на проблемы. Поделитесь своими ценными предложениями, я ценю ваши честные отзывы!. Если у вас есть какой -либо вопрос о том, что может связаться со мной по моей ручке в Твиттере @aviboy2006
Ссылка :
https://github.com/aws/serverless-application-model/blob/master/tests/translator/input/api_with_open_api_version.yaml#l3 https://github.com/aws/serverless-application-model/issues/191#issuecomment-551051431
Оригинал: «https://dev.to/aws-builders/how-to-prevent-aws-sam-from-creating-the-default-stage-in-api-gateway-stage-2o2g»