AWS SAM FindInMap не заполняет переменную - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь получить простой шаблон SAM для динамического заполнения переменных среды с помощью встроенной функции! FindInMap.Я следовал многим примерам, включая документацию AWS, но безуспешно.По какой-то причине функция не будет заполнять переменные окружения, используя ее, даже если все кажется правильным.Он просто установит переменную в пустую строку.

Вы можете видеть из кода ниже, что я использую внутри него функцию! Ref, но безуспешно пытался жестко закодировать параметры функции.Вы также заметите, что функция находится в разделе Global, и вы можете подумать, что она не работает, потому что она есть и не функционирует как окружающая среда, но я пробовал оба варианта, но ни один из них не работал.Вы также заметите, что я заполняю переменную среды с именем STAGE, которая работает правильно, и задаю для нее значение "local".

Я проверяю функцию, выполняя sam start local-api и выводя переменные среды вответ.

Любые предложения будут очень полезны.

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: "Test Server"

Parameters:
  Environment:
    Type: String
    Default: local
    AllowedValues:
      - local
      - test
      - prod

Mappings:
  EnvParams:
    local:
      stage: "local"
      databaseUrl: "mongodb://localhost:32768/test"

Globals:
    Function:
        Timeout: 500
        Runtime: nodejs8.10
        Environment:
          Variables:
            STAGE: !Ref Environment
            DB_URL: !FindInMap [EnvParams, !Ref Environment, databaseUrl]

Resources:
    ArticlesGetFunction:
        Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
        Properties:
            CodeUri: src/articles/
            Handler: index.getById
            Events:
                HelloWorld:
                    Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
                    Properties:
                        Path: /api/article/
                        Method: get

Outputs:
    HelloWorldApi:
      Description: "API Gateway endpoint URL for Prod stage for Hello World function"
      Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"

    HelloWorldFunction:
      Description: "Hello World Lambda Function ARN"
      Value: !GetAtt HelloWorldFunction.Arn

    HelloWorldFunctionIamRole:
      Description: "Implicit IAM Role created for Hello World function"
      Value: !GetAtt HelloWorldFunctionRole.Arn

1 Ответ

0 голосов
/ 10 декабря 2018

Похоже, !FindInMap пока не поддерживается в локальной отладке.Вот соответствующая проблема GitHub: https://github.com/awslabs/aws-sam-cli/issues/476

Чтобы установить и протестировать переменные среды в SAM CLI, вы можете использовать опцию --env-vars.!FindInMap также поддерживается при развертывании через CloudFormation, вы можете протестировать эту функцию, развернув простую лямбда-функцию и выполнив для нее тестовый запрос.

...