标签: aws-api-gateway

AWS API Gateway:如何将IAM身份传递给Lambda函数?

我已经使用AWS API Gateway前端成功配置了对我的Lambda函数的IAM认证访问,但无法找到如何将IAM用户身份传递给我的Lambda函数.

我需要完全IAM用户身份,并且无法在调用IAM用户凭据下运行Lambda函数.我只需要在我的Lambda函数中调用IAM用户身份.

那有选择吗?

amazon-iam aws-lambda aws-api-gateway

15
推荐指数
1
解决办法
1万
查看次数

是否可以直接从API网关查询Amazon RDS实例?

我是API网关的新手,到目前为止我尝试的是一个非常强大的工具.对于我现在正在工作的项目,我们在RDS中使用PostgreSQL实例.我已经看到可以从API网关直接访问DynamoDB表,所以我想知道是否有办法为关系数据库这样做.所以我使用GET方法创建了一个资源并将其配置为连接到我的数据库,但我不确定我是否使用了正确的参数:

提供了有关目标后端的信息

所以我不确定每个设置字段中的参数.在AWS子域中,我编写了公共URL,就像我从我的pgAdmin客户端连接我一样(没有端口导致完整的结构未被接受,所以我知道我做的事情很糟糕).在此之前,我尝试使用我的RDS资源的ARN,但出现了此错误:

AWS ARN for integration must contains path or action
Run Code Online (Sandbox Code Playgroud)

对于执行角色,我使用策略创建了一个访问Postgres资源的角色.

阅读RDS文档我发现可以使用HTTP动词GET或POST以及名为Action的Query参数从RDS使用查询API,因此我试图弄清楚如何以这种方式放置查询语句:

基于HTTP查询的请求

但是当我测试方法时,这就是响应主体:

{
  "message": "AWS ARN for integration contains invalid action"
}
Run Code Online (Sandbox Code Playgroud)

这就是日志:

Execution log for request test-request
Sat Mar 19 15:27:17 UTC 2016 : Execution failed: AWS ARN for integration contains invalid action
Sat Mar 19 15:27:17 UTC 2016 : Method completed with status: 400
Run Code Online (Sandbox Code Playgroud)

我知道我做了很多错事,所以有人知道这是否真的可行以及怎么做,因为我还没有找到任何详细的教程.

amazon-web-services amazon-rds aws-api-gateway

15
推荐指数
1
解决办法
7365
查看次数

AWS API Gateway:传递所有参数

我在亚马逊中使用API​​网关作为后端api的简单代理.使用它的主要原因是:获取API密钥和身份验证,跟踪和处理"环境"的简单方法.

我的问题是,我们只想将所有查询参数,标题等传递给我们的后端并让它处理它.然后在回来的路上,我们想向客户回复我们服务的相应响应代码; 不必明确映射它们.据我了解,你几乎必须指定每个查询参数,如果参数改变或你添加更多,你需要更新你的API.在开发/测试期间,这对我们来说有点乏味.

有没有办法告诉Gateway只接受并传递任何查询参数,标题等,这样你就不必明确指定它们?响应状态代码的相同问题?

amazon-web-services aws-api-gateway

15
推荐指数
2
解决办法
6238
查看次数

如何使用无服务器创建API Key并将其分配给创建的stage-API?

我想用无服务器创建一个安全的APIG,在我目前的" s-fuction.json "我已经拥有:

"apiKeyRequired": true,
Run Code Online (Sandbox Code Playgroud)

在我的" s-resources-cf.json "中我已经拥有:

"AWSApiKey": {
  "Type": "AWS::ApiGateway::ApiKey",
  "Properties" : {
    "Description" : "ApiKey for secure the connections to the xxx API",
    "Enabled" : true
  }
}
Run Code Online (Sandbox Code Playgroud)

它正确地为lambda(包括CORS)和API Key创建了一个Lambda,一个APIG,但是我需要手动"分配"生成的APIG-Stage的密钥,你对我怎么能这样做有什么想法自动使用无服务器?

我从这里阅读了有关我想要的功能的AWS文档(似乎有可能):AWS CloudFormation API密钥

文档显示它可以通过以下方式完成:

"ApiKey": {
  "Type": "AWS::ApiGateway::ApiKey",
  "DependsOn": ["TestAPIDeployment", "Test"],
  "Properties": {
    "Name": "TestApiKey",
    "Description": "CloudFormation API Key V1",
    "Enabled": "true",
    "StageKeys": [{
      "RestApiId": { "Ref": "RestApi" },
      "StageName": "Test"
    }]
  }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何添加对无服务器自动创建的APIG的引用以及如何等待创建APIG.

amazon-web-services aws-api-gateway serverless-framework

15
推荐指数
1
解决办法
1411
查看次数

API网关+ Lambda + Python:处理异常

我在非代理模式下从API网关调用基于Python的AWS Lambda方法.我应该如何正确处理异常,以便使用部分异常设置适当的HTTP状态代码和JSON主体.

作为一个例子,我有以下处理程序:

def my_handler(event, context):
    try:
        s3conn.head_object(Bucket='my_bucket', Key='my_filename')
    except botocore.exceptions.ClientError as e:
        if e.response['Error']['Code'] == "404":
            raise ClientException("Key '{}' not found".format(filename))
            # or: return "Key '{}' not found".format(filename) ?

class ClientException(Exception):
    pass
Run Code Online (Sandbox Code Playgroud)

我应该抛出异常还是返回一个字符串?那我该如何配置集成响应?显然我有RTFM,但FM是FU.

python exception-handling aws-lambda aws-api-gateway

15
推荐指数
1
解决办法
9930
查看次数

AWS API Gateway base64Decode产生乱码二进制文件?

我正在尝试从AWS API Gateway方法返回1px gif.

由于现在支持二进制数据,我使用以下"集成响应"映射返回image/gif:

$util.base64Decode("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
Run Code Online (Sandbox Code Playgroud)

但是,当我在Chrome中查看此内容时,我会看到返回以下二进制文件:

在此输入图像描述

代替:

在此输入图像描述

任何人都可以帮助我理解为什么这是乱码和错误的长度?或者我能做些什么来返回正确的二进制文件?还有其他一些我总是可以返回这个1px gif而不使用base64Decode函数?

非常感谢,这给我带来了很大的痛苦!

编辑

这个变得陌生.看起来问题不在于base64Decode,而在于二进制的一般处理.我在这篇博客文章Stack Overflow问题之后添加了一个Lambda后端(之前我正在使用Firehose).我按照本文档页面将图像设置为binaryMediaType .

这让我可以通过Gateway API从Lambda传递以下图像/ bmp像素,它可以正常工作:

exports.handler = function(event, context) {

  var imageHex = "\x42\x4d\x3c\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x06\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00";
  context.done(null, { "body":imageHex });

};
Run Code Online (Sandbox Code Playgroud)

但是,以下代表图像/ png或图像/ gif的图像在通过时会出现乱码:

exports.handler = function(event, context) {

//var imageHex = "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\xff\xff\xff\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3b";
//var imageHex = "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\xff\xff\xff\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b";
  var imageHex = "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b\x0a"
  context.done(null, { "body":imageHex });

};
Run Code Online (Sandbox Code Playgroud)

这似乎与另一个Stack Overflow问题是同一个问题,但我希望这可以通过Gateway API二进制支持来解决.不幸的是,image/bmp对我的用例不起作用,因为它不能透明......

如果它可以帮助任何人,这是一个很好的工具,用于在base64和hex之间进行转换.

amazon-web-services aws-api-gateway

15
推荐指数
2
解决办法
1万
查看次数

如何使AWS api网关接受http而不是https

我有一个由API网关代理的Lambda函数.但是,API网关仅公开http s而不公开http.我到处搜索,但看起来像API网关是不可能接受http.

所以我的问题是如何将http客户端调用转换为https并发送到api网关?我问,因为我的客户端只能进行http调用,他们不会改变.

amazon-web-services aws-lambda aws-api-gateway

15
推荐指数
3
解决办法
4973
查看次数

然后回应继续使用AWS Lambda/API Gateway?

我目前有一个Web钩子,它正在调用AWS API Gateway - > AWS Lambda函数代理.我想让网络钩子更具响应性,并在继续处理Lambda时返回早期回复.

我继续从Lambda(Node v6.10)做了这个早期回复,但似乎没有提高响应能力.尽管已经有来自回调的响应,API网关是否在某种程度上等待Lambda完成执行?

另一个想法是从Lambda发布SNS通知并进行第二次Lambda侦听并继续处理,但如果有更简单的方法,则宁愿避免这种复杂化.

amazon-web-services aws-lambda aws-api-gateway

15
推荐指数
1
解决办法
3030
查看次数

没有为方法定义集成 - 选择将部署API的阶段

我正在使用AWS API Gateway和AWS Lambda.在尝试部署API时,我经常会遇到此类错误消息.错误消息表示选择部署阶段.但我仍然选择并尝试部署!但同样的错误发生!

弹出错误消息的屏幕截图

在这个API中,我有多个具有多种方法的资源.以前我成功地以相同的方式部署这个相同的API.但现在我无法部署它.

请有人帮我修理它.另外:我不使用AWS CLI工具,只使用AWS Web仪表板.

amazon-web-services aws-lambda aws-api-gateway

15
推荐指数
2
解决办法
6616
查看次数

使用 AWS CDK 部署多个 API Gateway 阶段

API网关有阶段的概念(如:devtestprod),并通过AWS控制台部署多个阶段是非常简单的。

是否可以使用 AWS CDK 定义和部署多个阶段?

我试过了,但到目前为止似乎不可能。以下是一个非常基本的堆栈示例,该堆栈构建了一个 API 网关RestApi来为 lambda 函数提供服务:

export class TestStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Define stage at deploy time; e.g: STAGE=prod cdk deploy
    const STAGE = process.env.STAGE || 'dev'

    // First, create a test lambda
    const testLambda = new apilambda.Function(this, 'test_lambda', {
      runtime: apilambda.Runtime.NODEJS_10_X,    
      code: apilambda.Code.fromAsset('lambda'),  
      handler: 'test.handler',
      environment: { STAGE }
    })

    // Then, create the API construct, …
Run Code Online (Sandbox Code Playgroud)

aws-api-gateway aws-cdk

15
推荐指数
1
解决办法
4001
查看次数