Aws lambda API名称始终是SAM中的堆栈名称

Aws lambda API名称始终是SAM中的堆栈名称,aws-lambda,amazon-cloudformation,aws-serverless,aws-sam,aws-sam-cli,Aws Lambda,Amazon Cloudformation,Aws Serverless,Aws Sam,Aws Sam Cli,我正在使用AWS CLI部署SAM模板 AWS Api名称被设置为与CloudFormation堆栈名称相同。根据下面的模板内容,我希望Api被称为“用户” 可以设置API名称吗 SAM模板: MyApi: 类型:AWS::Serverless::Api 特性: 名称:用户 StageName:默认值 使用其他信息更新(用于部署的完整模板和AWS CLI命令): 模板: AWST模板格式版本:2010-09-09 转换:AWS::Serverless-2016-10-31 资源: HelloF

我正在使用AWS CLI部署SAM模板

AWS Api名称被设置为与CloudFormation堆栈名称相同。根据下面的模板内容,我希望Api被称为“用户”

可以设置API名称吗

SAM模板:

MyApi:
类型:AWS::Serverless::Api
特性:
名称:用户
StageName:默认值
使用其他信息更新(用于部署的完整模板和AWS CLI命令):

模板:

AWST模板格式版本:2010-09-09
转换:AWS::Serverless-2016-10-31
资源:
HelloFunction:
类型:AWS::Serverless::Function
特性:
经办人:主要
运行时:go1.x
活动:
GetEvent:
类型:Api
特性:
路径:/
方法:邮寄
#RestApiId:!参考ApiGateway1
LambdaInvokePermission:
类型:AWS::Lambda::权限
特性:
函数名:!格塔特
-HelloFunction
-阿恩
操作:“lambda:InvokeFunction”
负责人:apigateway.amazonaws.com
SourceAccount:!参考'AWS::AccountId'
MyApi:
类型:AWS::Serverless::Api
特性:
名称:用户
StageName:默认值
端点配置:区域
定义机构:
昂首阔步:“2.0”
信息:
标题:“TestAPI”
路径:
/:
职位:
x-amazon-apigateway-integration:
uri:
Fn::Sub:arn:aws:apigateway:${aws::Region}:lambda:path/2015-03-31/functions/${HelloFunction.arn}/invocations
答复:{}
httpMethod:“POST”
类型:“aws_代理”
产出:
功能学习:
值:!GetAtt HelloFunction.Arn
出口:
姓名:HelloFunctionArn
CLI命令:

aws cloudformation包——模板文件template.yml --输出模板文件samtemplate.yaml--s3 bucket(bucketname) aws cloudformation部署--模板文件samtemplate.yaml --堆栈名称apisample堆栈--功能
使用Name属性是设置API名称的正确方法

但是,我认为您对该模板的作用感到困惑。正如您所写的,这个模板创建了两个API—隐式API,然后是您显式声明的名为“Users”的API

请注意:

  • 隐式API的名称取自堆栈名称。(这似乎就是你所观察到的。)

  • 显式API的名称取自name属性

如果您不想创建隐式API,而是自己显式定义它(似乎是这样),那么您只需要引用它:

事件:
GetEvent:
类型:Api
特性:
路径:/
方法:邮寄
RestApiId:!参考MyApi#添加此行

这将导致创建一个API,并将其命名为“Users”。

基于此代码片段,这是不可能的。它将按照您的期望创建一个名为Users的API。您必须在模板中的某个位置引用StackName。你能提供更多吗?@pyb,你移除的那些标签实际上是正确的。这是一个关于AWS SAM的问题,因为它指的是SAM资源类型之一?我想你知道你提供了SAM模板吗?抱歉@Alexarvey,我的错。我更新了问题以澄清我使用的是SAM模板。可耻的是,这就是问题所在。我只注意到一个API,但有两个。哦,这并不丢脸。这种隐式API的东西令人困惑。