AWS SAM이 API 게이트웨이 단계에서 기본 "단계"를 생성하지 못하도록 방지하는 방법
4544 단어 cloudskillsawslearningdevops
리소스
AWS::Serverless::Api
및 변환AWS::Serverless-2016-10-31
에 대한 AWS SAM 문제StackOverflow와 이 문제가 여전히 존재하기 때문에 일시적인 해결 방법을 알려드리겠습니다. 먼저 문제가 무엇인지 설명하겠습니다.문제 설명 :
AWS Serverless API gateway using SAM 이 구성을 생성하는 동안 서버리스 코드 샘플과 함께 '프로덕션' 단계에 배포하지만 리소스를 생성하는 동안 아래 예에 따라 제공한 API 게이트웨이 아래에 두 단계를 생성하고 다른 하나는 기본 단계입니다. 따라서 자신의 스테이지를 생성하려는 경우 생성할 수 없습니다. 오류는
Stage already exists
입니다.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에 버그가 있습니다
StageName
. Prod와 같이 제공한 단계 이름과 함께 기본 단계를 생성합니다. 먼저 현재 항목을 삭제한 다음 이러한 변경 사항을 적용할 수 있습니다.이 문제를 해결하려면 YAML 파일에
OpenApiVersion: '2.0'
를 추가하는 두 가지 방법이 있습니다.해결 방법 1: 다음 속성
StageName
에서 이를 추가할 수 있습니다. 이 속성은 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 리소스에서 "StageName"을 사용하여 단계를 정의했는지 확인합니다. API 또는 람다 등과 같은 여러 리소스가 있는 경우 전역 수준이 됩니다.
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'
"Stage"단계가 제거되지 않습니다. 처음부터 추가해야 합니다. 또한 YAML에 대한 이 예제는 JSON 형식에도 동일하게 적용될 수 있습니다.내 블로그가 마음에 든다면 기사를 좋아해 주세요. 그런 문제 지향적인 블로그를 더 많이 쓰도록 격려해 줄 것입니다. 소중한 제안을 공유해 주세요. 솔직한 피드백에 감사드립니다!. 질문이 있으시면 내 트위터 핸들을 통해 저에게 연락할 수 있습니다.
참조 :
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
Reference
이 문제에 관하여(AWS SAM이 API 게이트웨이 단계에서 기본 "단계"를 생성하지 못하도록 방지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/how-to-prevent-aws-sam-from-creating-the-default-stage-in-api-gateway-stage-2o2g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)