我找不到任何显示如何执行此操作的文档,因此我尽力弄明白(这不是常见的用例)吗?我已经设置了我的资源以使用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
我期待使用API Gateway和Lambda构建API业务流程层.
对于我的基本用例,我希望在Lambda中有一个Python脚本,它只会从客户端(在本例中为移动应用程序)中继API网关收到的请求,并将外部HTTPS服务作为后端调用.
我的问题是:我们的移动客户端今天使用客户端证书与我们的HTTPS端点通信.如何在新的API Gateway + Lambda设置中拦截该客户端证书?
就像在标题中一样.我尝试使用云形成将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) 我想从执行角色有权执行该 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 的角色,然后提取可用于签署请求的密钥。
在发送数据之前,我使用 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
我正在使用AWS API Gateway开发一个"微服务"应用程序,使用Lambda或ECS进行计算.现在的问题是服务之间的通信是通过API网关的API调用.这感觉效率低,安全性低于可能.有没有办法让我的微服务以更高效和安全的方式相互交谈?像某种方式直接在私人网络内谈话?
我想到的一种方法是多层API网关.
但是通过这种方式,我需要在2级API中"复制"我的路线......这似乎并不理想.我在想也许用{proxy+}.所以任何东西/payment/{proxy+}都转到支付API网关等等 - 还有2级API网关......但这似乎是我能做的最好的?
也许有更好的方法?
amazon-web-services amazon-ecs microservices aws-lambda aws-api-gateway
尝试发布到我在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) 我想将我的 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 失败:内部转换失败。
任何指示/建议?
我指的是以下链接 -
此处可以使用来自根堆栈的 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
我一直在为下面的错误而苦苦挣扎。我已经尝试了很多教程和 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
我正在使用 AWS Lambda 和 API Gateway 构建无服务器应用程序。为了防止 DDOS 攻击执行大量请求并花费我很多钱,我设置了一个带有请求配额的使用计划(例如 10K 请求/月)。这需要调用者将 API 密钥作为标头传递。
这看起来效果很好,但我还需要为此服务启用 CORS。为此,我需要允许未经授权的 OPTIONS 请求(“CORS 预检”请求),因为浏览器不支持在那里发送任何特殊标头。但后来我似乎找不到强制执行配额的方法,我又回到了原点:这些请求的数量不受控制可能会花费不可预见的金额。有什么办法可以排除这种可能性吗?
aws-api-gateway ×10
aws-lambda ×4
javascript ×2
amazon-ecs ×1
aws-sam ×1
cors ×1
json ×1
sam ×1
signing ×1