gpt4 book ai didi

amazon-web-services - aws ApiGateway 部署到特定阶段

转载 作者:行者123 更新时间:2023-12-04 07:36:54 25 4
gpt4 key购买 nike

我使用此配置部署到“Prod”阶段:

"ApiGatewayApi":
{
"Type": "AWS::Serverless::Api",
"Properties": {
"StageName": "Prod",
"Name" : "MainGateway",
...

我想将不同的代码部署到“Stage”阶段。我尝试将“StageName”更改为“Stage”,但收到此错误:“舞台已经存在”。

如何将不同的代码部署到不同的阶段?

最佳答案

该解决方案基于 YAML 格式,同样也可以用于 JSON 格式。

每当您创建 StageName 时,SAM 中就会出现一个错误,它会创建默认的 Stage 以及您提供的阶段名称(如 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 或 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',则它不会删除“Stage”阶段。需要从头开始添加。AWS::Serverless::Api 是一个非常简单的实现,无法在 SAM 下管理多阶段,最好使用 AWS::ApiGateway::RestApi 和多个 >AWS::ApiGateway::Stage 引用 RestApi 资源。

引用:

关于amazon-web-services - aws ApiGateway 部署到特定阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67697117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com