Часть шаблона 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 вместе? Но я немного потерян здесь.