【发布时间】:2019-11-14 20:27:15
【问题描述】:
我正在尝试构建 AWS CloudFormation 模板来创建 API 网关。
当我手动创建 API 网关时,我使用阶段变量将不同的 AWS 函数用于不同的阶段。
例如。我有一个名为 adminLogin 的阶段变量,
当 API 网关的阶段为 dev 时,adminLogin 的值为 -dev_adminLoginstage_adminLogin API 网关的阶段为 stage 时的值
CloudFormation 模板 sn-p -
test:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Name: 'test'
Body:
swagger: "2.0"
info:
version: "2019-04-11T02:29:18Z"
title: "Test"
basePath: !Ref "testEnv"
schemes:
- "https"
paths:
/admin/login:
post:
consumes:
- "application/json"
produces:
- "application/json"
responses:
'200':
description: "200 response"
schema:
$ref: "#/definitions/Empty"
x-amazon-apigateway-integration:
#uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${stageVariables.adminLogin}/invocations"
uri: !Join [
'', [
'arn:',
'aws:',
'apigateway:',
!Ref "AWS::Region",
':lambda:',
'path/2015-03-31/functions/',
'${stageVariables.adminLogin}',
'/invocations'
]
]
responses:
default:
statusCode: "200"
passthroughBehavior: "when_no_templates"
httpMethod: "POST"
contentHandling: "CONVERT_TO_TEXT"
type: "aws_proxy"
我在运行 cloudformation 模板时收到以下错误 -
Errors found during import: Unable to put integration on 'POST' for resource at path '/admin/login': Invalid lambda function
(Service: AmazonApiGateway;
Status Code: 400;
Error Code: BadRequestException;
问题肯定出在uri 属性上,
我都试过了 -
uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${stageVariables.adminLogin}/invocations"
和
uri: !Join ['', ['arn:','aws:','apigateway:',!Ref "AWS::Region",':lambda:','path/2015-03-31/functions/','${!stageVariables.adminLogin}','/invocations']]
参考 -
【问题讨论】:
标签: amazon-web-services amazon-cloudformation aws-api-gateway