jhu*_*tas 4 aws-cloudformation aws-lambda aws-sam-cli aws-serverless aws-sam
我正在使用 AWS CLI 部署 SAM 模板。
AWS Api 名称设置为与 CloudFormation 堆栈名称相同。我希望根据下面的模板内容将 Api 称为“用户”。
可以设置API名称吗?
SAM 模板:
MyApi:
Type: AWS::Serverless::Api
Properties:
Name: Users
StageName: default
Run Code Online (Sandbox Code Playgroud)
使用其他信息进行更新(用于部署的完整模板和 AWS CLI 命令):
模板:
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::Serverless-2016-10-31
Resources:
HelloFunction:
Type: AWS::Serverless::Function
Properties:
Handler: main
Runtime: go1.x
Events:
GetEvent:
Type: Api
Properties:
Path: /
Method: post
#RestApiId: !Ref ApiGateway1
LambdaInvokePermission:
Type: AWS::Lambda::Permission
Properties:
FunctionName: !GetAtt
- HelloFunction
- Arn
Action: 'lambda:InvokeFunction'
Principal: apigateway.amazonaws.com
SourceAccount: !Ref 'AWS::AccountId'
MyApi:
Type: AWS::Serverless::Api
Properties:
Name: Users
StageName: default
EndpointConfiguration: REGIONAL
DefinitionBody:
swagger: "2.0"
info:
title: "TestAPI"
paths:
/:
post:
x-amazon-apigateway-integration:
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${HelloFunction.Arn}/invocations
responses: {}
httpMethod: "POST"
type: "aws_proxy"
Outputs:
FunctioArn:
Value: !GetAtt HelloFunction.Arn
Export:
Name: HelloFunctionArn
Run Code Online (Sandbox Code Playgroud)
CLI 命令:
aws cloudformation package --template-file template.yml
--output-template-file samtemplate.yaml --s3-bucket (bucketname)
aws cloudformation deploy --template-file samtemplate.yaml
--stack-name apisample-stack --capabilities CAPABILITY_IAM
Run Code Online (Sandbox Code Playgroud)
使用 Name 属性是设置 API 名称的正确方法。
但是,我认为您对这个模板的作用感到困惑。正如您所编写的,此模板创建了两个 API - “隐式 API”,然后是您显式声明的名为“Users”的 API。
注意:
隐式 API 的名称取自堆栈名称。(这似乎就是你所观察到的。)
显式 API 从 Name 属性中获取其名称。
如果您不想创建隐式 API,而是想自己显式定义它(看起来就是这种情况),那么您只需要引用它:
Events:
GetEvent:
Type: Api
Properties:
Path: /
Method: post
RestApiId: !Ref MyApi # Add this line
Run Code Online (Sandbox Code Playgroud)
这将导致创建一个 API,其名称为“Users”。
| 归档时间: |
|
| 查看次数: |
3403 次 |
| 最近记录: |