Ошибка шаблона CloudFormation. Встроенные функции Fn :: Sub не указывают ожидаемые аргументы. - PullRequest
0 голосов
/ 15 апреля 2019

Часть шаблона Cloudformation, относящаяся к функции лямбда ниже. Ожидается, что я смогу использовать функцию Sub для добавления в тему SNS, предоставленную пользователем при создании стека.

"GetApiKeyValueLambdaFunction": {
    "Type": "AWS::Lambda::Function",
    "Properties": {
      "Code": {
        "ZipFile": {"Fn::Sub":[
            {
                "Fn::Join": ["\n", [
                  "import json",
                  "import boto3",
                  "client = boto3.client('apigateway')",
                  "sns_client = boto3.client('sns')",
                  "def lambda_handler(event, context):",
                  "    response = client.get_api_key(",
                  "        apiKey=event['apiKeyId'],",
                  "        includeValue=True",
                  "    )",
                  "    response_message = {'key_name' : response['name'], 'key_value' : response['value']}",
                  "    sns_client.publish(",
                  "        TargetArn='/${__snstopic__}',",
                  "        Message=json.dumps({'default': json.dumps(response_message,indent=1)}),",
                  "        MessageStructure='json'",
                  "    )",
                  "    return {",
                  "        'statusCode': 200,",
                  "        'body': response['value']}"
                          ]   ] 
                      },
                {
                    "__snstopic__":{"Ref" : "SnsOutputTopic"}
                }
                ]}
      },
      "Handler": "index.lambda_handler",
      "Runtime": "python3.6",
      "Timeout": 30,
      "Role": {
        "Fn::GetAtt": [
          "CustomLambdaExecutionRole", "Arn"
        ]
      }
    }
}

Однако проверка шаблона завершается с ошибкой:

4/15/2019, 13:20:22 - Шаблон содержит ошибки .: Ошибка шаблона: Одна или несколько встроенных функций Fn :: Sub не указывают ожидаемый аргументы. Укажите строку в качестве первого аргумента и необязательный второй аргумент для указания сопоставления значений для замены в строке

Мне интересно, есть ли определенный порядок использования Fn Sub и Fn Join вместе? Но я немного потерян здесь.

1 Ответ

0 голосов
/ 18 апреля 2019

Нет необходимости использовать sub и объединяться. вот фрагмент кода (я только что преобразовал его в yaml)

GetApiKeyValueLambdaFunction:
  Type: AWS::Lambda::Function
  Properties:
    Code:
      ZipFile:
        !Sub |
          import json, boto3
          client = boto3.client('apigateway')
          sns_client = boto3.client('sns')
          def lambda_handler(event, context):
            response = client.get_api_key(apiKey=event['apiKeyId'], includeValue=True)
            response_message = {'key_name' : response['name'], 'key_value': response['value']}
            sns_client.publish( TargetArn='/${! Ref SnsOutputTopic}', Message=json.dumps({'default': json.dumps(response_message,indent=1)}), MessageStructure='json')
            return { 'statusCode': 200, 'body': response['value'] }
    Handler: index.lambda_handler
    Runtime: python3.6
    Timeout: 30
    Role:
      Fn::GetAtt:
      - CustomLambdaExecutionRole
      - Arn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...