标签: aws-api-gateway

如何将Cognito与生成的Javascript SDK一起使用?

我找不到任何显示如何执行此操作的文档,因此我尽力弄明白(这不是常见的用例)吗?我已经设置了我的资源以使用IAM身份验证,设置CORS等.然后我部署了它,并下载了生成的SDK.

在客户端,我使用AWS.CognitoIdentityCredentials中的凭据和apigClientFactory.newClient.当我尝试发布到我的资源时,我收到403错误响应,没有正文.

响应标头包含: x-amz-ErrorType: UnrecognizedClientException

这个错误可能来自其他一些AWS服务(它们会像那样冒泡)吗?如果是这样,我怎么知道哪一个?还有什么可能导致错误?

我正在使用测试测试客户端的代码如下所示:

function onFacebookLogin(fbtoken) {
  // get cognito credentials
  AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:abcd6789-1234-567a-b123-12ab34cd56ef',
    Logins: {'graph.facebook.com': fbtoken}
  });
  AWS.config.credentials.get(function(err) {
    if (err) {return console.error('Credentials error: ', err);}

    /* I'm assuming that this is what I use for accessKey and secretKey */
    var credentials = AWS.config.credentials;
    apigClient = apigClientFactory.newClient({
      accessKey: credentials.accessKeyId,
      secretKey: credentials.secretAccessKey
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

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

11
推荐指数
1
解决办法
1536
查看次数

AWS API Gateway和AWS Lambda - 处理客户端证书

我期待使用API​​ Gateway和Lambda构建API业务流程层.

对于我的基本用例,我希望在Lambda中有一个Python脚本,它只会从客户端(在本例中为移动应用程序)中继API网关收到的请求,并将外部HTTPS服务作为后端调用.

我的问题是:我们的移动客户端今天使用客户端证书与我们的HTTPS端点通信.如何在新的API Gateway + Lambda设置中拦截该客户端证书?

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

11
推荐指数
1
解决办法
3954
查看次数

如何将API网关与SQS集成

就像在标题中一样.我尝试使用云形成将API网关方法与SQS集成.我缺少的是SQS的正确URI.如果你们中的任何人已经这样做了,那么URI应该是什么样的?

我想出了类似的东西,但不知道在哪里放置SQS ARN

"arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage"
Run Code Online (Sandbox Code Playgroud)

以下是该方法的完整配置:

PostMethod:
    Type: "AWS::ApiGateway::Method"
    Properties:
      ApiKeyRequired: "true"
      HttpMethod: "POST"
      ResourceId: !Ref "SomeResource"
      RestApiId: !Ref "SomeRestApi"
      Integration:
        IntegrationHttpMethod: "POST"
        IntegrationResponses:
        - StatusCode: 200
        Type: "AWS"
        Uri: "arn:aws:apigateway:${AWS::Region}:sqs:action/SendMessage"
Run Code Online (Sandbox Code Playgroud)

如果你与lambda函数集成,这里是一个URI的例子:

arn:aws:apigateway:us-west-2:lambda:path//2015-03-31/functions/arn:aws:lambda:us-west-2:123412341234:function:function_name/invocations
-
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation aws-api-gateway

11
推荐指数
2
解决办法
7083
查看次数

如何从执行角色有权这样做的 AWS Lambda 调用 AWS_IAM 授权的 API 网关终端节点?

我想从执行角色有权执行该 API 网关的执行 AWS Lambda 调用授权设置为 AWS_IAM 的 AWS API 网关端点。

在此处输入图片说明

无论如何,我是否可以使用我的 Lambda 的当前执行角色对 API Gateway 的 HTTPS 请求进行签名?

编辑:

查看http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html,我可以使用 SDK 调用 AssumeRole 来承担有权执行 Api Gateway 的角色,然后提取可用于签署请求的密钥。

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

11
推荐指数
1
解决办法
5765
查看次数

Kinesis Firehose 在没有分隔符逗号的情况下将 JSON 对象放入 S3

在发送数据之前,我使用 JSON.stringify 到数据,它看起来像这样

{"data": [{"key1": value1, "key2": value2}, {"key1": value1, "key2": value2}]}
Run Code Online (Sandbox Code Playgroud)

但是一旦它通过 AWS API Gateway 并且 Kinesis Firehose 将它放入 S3,它看起来像这样

    {
     "key1": value1, 
     "key2": value2
    }{
     "key1": value1, 
     "key2": value2
    }
Run Code Online (Sandbox Code Playgroud)

JSON 对象之间的分隔符逗号不见了,但我需要它来正确处理数据。

API 网关中的模板:

#set($root = $input.path('$'))
{
    "DeliveryStreamName": "some-delivery-stream",
    "Records": [
#foreach($r in $root.data)
#set($data = "{
    ""key1"": ""$r.value1"",
    ""key2"": ""$r.value2""
}")
    {
        "Data": "$util.base64Encode($data)"
    }#if($foreach.hasNext),#end
#end
    ]
}
Run Code Online (Sandbox Code Playgroud)

json amazon-web-services amazon-kinesis aws-api-gateway amazon-kinesis-firehose

11
推荐指数
1
解决办法
6284
查看次数

如何使用AWS API Gateway + Lambda/ECS谈话开发微服务?

我正在使用AWS API Gateway开发一个"微服务"应用程序,使用Lambda或ECS进行计算.现在的问题是服务之间的通信是通过API网关的API调用.这感觉效率低,安全性低于可能.有没有办法让我的微服务以更高效和安全的方式相互交谈?像某种方式直接在私人网络内谈话?

我想到的一种方法是多层API网关.

  • 1个公共API网关
  • 每个微服务1个私有API网关.并且每个微服务可以在专用网络内"直接"调用另一个微服务

但是通过这种方式,我需要在2级API中"复制"我的路线......这似乎并不理想.我在想也许用{proxy+}.所以任何东西/payment/{proxy+}都转到支付API网关等等 - 还有2级API网关......但这似乎是我能做的最好的?

也许有更好的方法?

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

11
推荐指数
2
解决办法
1544
查看次数

AWS API Gateway:匿名用户无权执行API

尝试发布到我在API网关中创建的API:

{
    "Message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: arn:aws:execute-api:us-west-2:***********:jrr7u1ekrr/v0/POST/user"
}
Run Code Online (Sandbox Code Playgroud)

如何更新CloudFormation中的策略以使POST端点公开可用?我在声明带有AWS::ApiGateway::RestApi资源类型的API 。

API政策属性为:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": "execute-api:/*/POST/user"
        }
    ]
} 
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation aws-api-gateway

11
推荐指数
3
解决办法
9190
查看次数

AWS SAM:嵌套堆栈,从根堆栈引用 API 网关

我想将我的 SAM 应用程序拆分为多个部分。

我想在根堆栈中创建一个 API ( AWS::Serverless::Api )。

我正在我的子堆栈中创建 lambda 函数,我想在其中提供从根堆栈到 API 事件的 API 引用。

这可行吗?我没有找到任何从根堆栈访问 API 到子堆栈的好例子?

我尝试使用以下模板 -

parenttemplateapi:
    Type: AWS::Serverless::Application
    Properties:
      Location:
        ApplicationId: arn:aws:serverlessrepo:us-east-1:account_id:applications/parent-template
        SemanticVersion: 1.0.0



HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python2.7
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Method: get
            Path: /hello
            RestApiId: !GetAtt parenttemplateapi.Outputs.ServerlessGW-restApiId
Run Code Online (Sandbox Code Playgroud)

当我尝试部署此模板时,出现以下错误 -

错误:无法为堆栈创建变更集:子模板,例如:Water ChangeSetCreateComplete 失败:Water 遇到终端故障状态状态:FAILED。原因:转换 AWS::Serverless-2016-10-31 失败:内部转换失败。

任何指示/建议?

我指的是以下链接 -

https://aws.amazon.com/blogs/compute/annoucing-nested-applications-for-aws-sam-and-the-aws-serverless-application-repository/

此处可以使用来自根堆栈的 API 网关 ID (AWS::ApiGateway::RestApi) 吗?

https://dev.to/grahamcox82/building-a-larger-serverless-application-part-3-modular-monorepos-3mon

这可以使用无服务器框架来实现吗?

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

11
推荐指数
1
解决办法
554
查看次数

修复 AWS API 网关不存在的 CORS“响应预检...”标头并放大

我一直在为下面的错误而苦苦挣扎。我已经尝试了很多教程和 stackoverflow 答案,但没有一个解决方案可以解决我的问题。

从源“ http://localhost:3000 ”访问 XMLHttpRequest at ' https://xxx '已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否 'Access-Control-Allow-Origin ' 请求的资源上存在标头。

我正在使用 SAM 无服务器来创建我的 api。

模板.yaml:

Globals:
  Function:
    Timeout: 10
  Api:
    Cors:
      AllowMethods: "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
      AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
      AllowOrigin: "'*'"
Run Code Online (Sandbox Code Playgroud)

我的 lambda 函数: 我的 GET 响应和 OPTIONS 响应都返回以下标头:

headers: {
  "Access-Control-Allow-Headers": "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'",
  "Access-Control-Allow-Origin": "'*'",
  "Access-Control-Allow-Methods": "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'"
}
Run Code Online (Sandbox Code Playgroud)

我的 API 使用放大进入我的 ReactJs 应用程序:

API.get(apiName, path, {
   headers: {
      "Access-Control-Allow-Origin": "*",
      // "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with",
      // "Access-Control-Allow-Methods": "OPTIONS,POST,GET,PUT,DELETE",
      // 'Content-Type': 'application/json'
   }
})
Run Code Online (Sandbox Code Playgroud)

我已经在我的 template.yaml、我的 lambda 函数和我的 reactJs 项目中尝试了 Access-Control-Allow-Headers、Access-Control-Allow-Methods …

javascript sam aws-cloudformation aws-api-gateway aws-serverless

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

如何使用 AWS API Gateway 为 CORS 预检请求设置配额

我正在使用 AWS Lambda 和 API Gateway 构建无服务器应用程序。为了防止 DDOS 攻击执行大量请求并花费我很多钱,我设置了一个带有请求配额的使用计划(例如 10K 请求/月)。这需要调用者将 API 密钥作为标头传递。

这看起来效果很好,但我还需要为此服务启用 CORS。为此,我需要允许未经授权的 OPTIONS 请求(“CORS 预检”请求),因为浏览器不支持在那里发送任何特殊标头。但后来我似乎找不到强制执行配额的方法,我又回到了原点:这些请求的数量不受控制可能会花费不可预见的金额。有什么办法可以排除这种可能性吗?

amazon-web-services cors aws-api-gateway

11
推荐指数
1
解决办法
444
查看次数