首页 文章

AWS SAM FindInMap未填充变量

提问于
浏览
0

我试图获得一个简单的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 回答

  • 1

    看起来像 !FindInMap isn 't supported in local debugging yet. Here'是相关的GitHub问题:https://github.com/awslabs/aws-sam-cli/issues/476

    要在SAM CLI中设置和测试环境变量,可以使用 --env-vars 选项 . 通过CloudFormation部署时也支持 !FindInMap ,您可以通过部署简单的Lambda函数并针对它运行测试查询来测试此功能 .

相关问题