AWS SAM FindInMap не заполняет переменную
Я пытаюсь получить простой шаблон 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
0 ответов
Это выглядит как !FindInMap
пока не поддерживается в локальной отладке. Вот соответствующая проблема GitHub: https://github.com/awslabs/aws-sam-cli/issues/476
Чтобы установить и протестировать переменные среды в SAM CLI, вы можете использовать --env-vars
вариант вместо !FindInMap
также поддерживается при развертывании через CloudFormation, вы можете протестировать эту функцию, развернув простую функцию Lambda и выполнив для нее тестовый запрос.
У меня была аналогичная ошибка из-за этого:
!FindInMap [EnvMap, !Ref Stage, dbpass] - correct
!FindInMap [EnvMap, !Ref Stage, dbpass] - error