Имя API всегда является именем стека в SAM - PullRequest
1 голос
/ 07 марта 2019

Я использую интерфейс командной строки AWS для развертывания шаблона SAM.

Имя API-интерфейса AWS устанавливается равным имени стека CloudFormation.Я ожидал, что API будет называться «Пользователи» на основе этого шаблона ниже.

Можно ли задать имя API?

Шаблон SAM:

  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: Users
      StageName: default

Обновление с дополнительной информацией (полный шаблон и команды CLI AWS, используемые для развертывания):

Шаблон:

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

Команды 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

1 Ответ

1 голос
/ 08 марта 2019

Использование свойства Name является правильным способом задания имени API.

Однако, я думаю, вы не уверены, что делает этот шаблон.Как вы уже написали, этот шаблон создает два API - «неявный API», а затем - API с именем «Users», который вы объявили явно.

Обратите внимание:

  • Неявный API берет свое имя от имени стека.(Похоже, это то, что вы наблюдаете.)

  • Явный API берет свое имя из свойства Name.

Если вы неЕсли вы не хотите создавать неявный API, а сами определите его явно - как это выглядит, - тогда вам просто нужно обратиться к нему:

  Events:
    GetEvent:
      Type: Api
      Properties:
        Path: /
        Method: post
        RestApiId: !Ref MyApi # Add this line

Это приведет к созданию единого API ибудет иметь имя «Пользователи».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...