Amazon web services 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

我对AWS SAM和设置API网关配置有问题。我正在尝试做几件事:

  • 将API网关配置为在标头中需要API密钥
  • 按照我的配置文件中的定义创建我自己的阶段
  • 未创建我的文件中定义的API网关模型
  • 目前,API网关已设置并链接到我的lambda函数,但在上述两个要求中失败。下面是我的文件:template.yaml和swagger.yaml

    模板yaml

    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,使用自己生成的招摇过市方式,生成隐式API
    SAMnfeedS3API

    还要注意的是,在解决重复密钥问题后,还需要从
    事件中引用API,行如下:

    事件:
    SAMnfeedS3API:
    类型:Api
    特性:
    路径:/vdp\U群集
    方法:获取
    RestApiId:!参考SAMnfeedS3API##添加此行
    

    另请参阅我前面的答案。

    该模板正在为我生成语法错误。你确定你在这里复制的是正确的吗?嘿@Alexarvey,感谢你的帮助。这是因为我用“XXXXX”替换了我的帐户ID。如果你把它改成你的,应该可以用。另外,lambda函数的资源部分发生了变化,让我来解决这个问题,谢谢您的回复。那个愚蠢的语法错误是事情不起作用的部分原因,并引导我走上了修复所有格式错误的正确道路。我也遇到了这个问题:不幸的是,解决方法是使用内联或s3 bucket。你会发现我的博客系列很有用