Amazon web services AWS SAM模板无法为API网关创建配置
我对AWS SAM和设置API网关配置有问题。我正在尝试做几件事:Amazon web services AWS SAM模板无法为API网关创建配置,amazon-web-services,aws-api-gateway,aws-sam-cli,aws-sam,Amazon Web Services,Aws Api Gateway,Aws Sam Cli,Aws Sam,我对AWS SAM和设置API网关配置有问题。我正在尝试做几件事: 将API网关配置为在标头中需要API密钥 按照我的配置文件中的定义创建我自己的阶段 未创建我的文件中定义的API网关模型 目前,API网关已设置并链接到我的lambda函数,但在上述两个要求中失败。下面是我的文件:template.yaml和swagger.yaml 模板yaml AWSTemplateFormatVersion:'2010-09-09' 转换:AWS::Serverless-2016-10-31 说明:> sa
AWSTemplateFormatVersion:'2010-09-09'
转换:AWS::Serverless-2016-10-31
说明:>
sam-nfeed-s3
#有关Globals的更多信息:https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
全球:
功能:
超时:60
应用程序编程接口:
端点配置:区域
资源:
SAMnfeedS3API:
类型:AWS::Serverless::Api
特性:
舞台名称:阿尔法
定义URI:./swagger.yaml
资源:
SAMnfeedS3Lambda:
类型:AWS::Serverless::Function
特性:
CodeUri:测试函数sam/
处理程序:nfeed_vdp_clusters.lambda_处理程序
运行时:python3.6
角色:arn:aws:iam::XXXXXXX:Role/Lambda
活动:
SAMnfeedS3API:
类型:Api
特性:
路径:/vdp\U群集
方法:获取
环境:
变量:
测试:测试
产出:
SAMnfeedS3API:
描述:“用于暂存环境的API网关端点URL”
值:!Sub“https://${ServerlessRestApi}.execute api.${AWS::Region}.amazonaws.com/Staging/vdp_clusters”
SAMnfeedS3Lambda:
说明:“Lambda函数ARN”
值:!GetAtt SAMnfeedS3Lambda.Arn
昂首阔步
---
昂首阔步:“2.0”
信息:
标题:!参考AWS::StackName
基本路径:“/alpha”
计划:
-“https”
x-amazon-apigateway-api-key-source:“标题”
路径:
“/vdp_集群”:
获取:
消耗:
-应用程序/json
生产:
-应用程序/json
参数:
-名称:x-api-key
在:标题
必填项:true
类型:字符串
响应:
200:
说明:“200响应”
模式:
$ref:“#/definitions/Empty”
x-amazon-apigateway-integration:
uri:arn:aws:apigateway:${aws::Region}:lambda:path/2015-03-31/functions/arn:aws:lambda:${aws::Region}:XXXXXXXXX:function:${SAMnfeedS3Lambda.arn}/invocations
响应:
违约:
状态代码:“200”
httpMethod:“POST”
类型:aws_代理
安全:
-api_键:[]
证券定义:
api_密钥:
类型:“apiKey”
名称:“x-api-key”
在:“标题”
定义:
空的:
类型:“对象”
标题:“空模式”
$schema:“http://json-schema.org/draft-04/schema#"
正如在我的招摇过市和模板文件中所定义的那样,应该为网关创建“alpha”阶段,但不会显示任何内容。“空”模型和api密钥要求也不会出现。任何帮助都将不胜感激。问题是您在模板中复制了
资源
键
我建议始终在SAM模板上使用该实用程序,因为它可以检测到SAM validate
无法始终检测到的YAML格式问题。以下是我得到的:
▶ Yamlint sam应用程序/template.yaml
sam app/template.yaml
...
18:1映射中密钥“资源”的错误复制(密钥重复)
如果随后查看由sam build
步骤创建的packaged.yml
文件,您会注意到您定义的API将丢失。这是因为Python中的dict不可能包含重复的键。当Python YAML库在中读取文件时,您指定的第二个Resources
块将覆盖第一个块
然后,SAM根据您在Events
中指定的API,而不是您(认为您)提供的API,使用自己生成的招摇过市方式,生成隐式APISAMnfeedS3API
还要注意的是,在解决重复密钥问题后,还需要从事件中引用API,行如下:
事件:
SAMnfeedS3API:
类型:Api
特性:
路径:/vdp\U群集
方法:获取
RestApiId:!参考SAMnfeedS3API##添加此行
另请参阅我前面的答案。该模板正在为我生成语法错误。你确定你在这里复制的是正确的吗?嘿@Alexarvey,感谢你的帮助。这是因为我用“XXXXX”替换了我的帐户ID。如果你把它改成你的,应该可以用。另外,lambda函数的资源部分发生了变化,让我来解决这个问题,谢谢您的回复。那个愚蠢的语法错误是事情不起作用的部分原因,并引导我走上了修复所有格式错误的正确道路。我也遇到了这个问题:不幸的是,解决方法是使用内联或s3 bucket。你会发现我的博客系列很有用