- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
LocalStack 很简洁,但很难找到它的文档。我在访问连接到 Lambda 函数的 API Gateway 代理端点时遇到问题。
我唯一能想到的是,当我为网关进行放置集成时,我不确定如何处理凭证参数(假设这是 100% 本地的......我没有真正的 AWS 帐户)我正在使用)所以我暂时对其进行了评论:
aws --endpoint-url=http://localhost:4567 apigateway \
put-integration \
--region us-west-2 \
--rest-api-id 0091232159 \
--resource-id 3732709762 \
--http-method ANY \
--type AWS_PROXY \
--integration-http-method POST \
--uri arn:aws:lambda:us-west-2:000000000000:function:PostProposal \
#--credentials arn:aws:iam::123456789012:role/apigAwsProxyRole
我的同事发现了一个线程,听起来这可能是 LocalStack 中的一个错误:
https://github.com/atlassian/localstack/issues/129
无论如何,这是我执行 aws --endpoint-url=http://localhost:4567 apigateway get-resources --rest-api-id 0091232159
时 API 的样子:
{
"items": [
{
"id": "3312801A-ZA-Z6",
"path": "/",
"resourceMethods": {
"GET": {}
}
},
{
"id": "3732709762",
"parentId": "3312801A-ZA-Z6",
"pathPart": "{proxy+}",
"path": "/{proxy+}",
"resourceMethods": {
"GET": {},
"ANY": {
"httpMethod": "ANY",
"authorizationType": "NONE",
"methodIntegration": {
"type": "AWS_PROXY",
"httpMethod": "ANY",
"uri": "arn:aws:lambda:us-west-2:000000000000:function:PostProposal",
"integrationResponses": {
"200": {
"statusCode": 200,
"responseTemplates": {
"application/json": null
}
}
}
}
}
}
}
]
}
我的 Lambda 函数已全部设置完毕,并在我这样做时响应 200:
aws --endpoint-url=http://localhost:4574 lambda invoke --function-name PostProposal outfile.json
现在我只想 cURL 一个将触发 Lambda 的端点。
我找到了这个线程:https://github.com/localstack/localstack/issues/229,其中有一个 cURL 示例:
curl http://localhost:4567/restapis/35937034A-Z3/test/_user_request_/u-1234
另一个:https://bitbucket.org/atlassian/localstack/issues/4/how-to-create-api-gateway-deployments 具有:
curl http://localhost:4567/restapis/$api_id/v1/_user_request_/mypath
我知道我的 API ID,并且“v1”与我的“测试”阶段名称相关。我的端点位于根目录,所以我认为我不需要他有旁路的东西。
所以我尝试了像这样的 GET 和 POST 路径的所有不同变体:
curl http://localhost:4567/restapis/0091232159/test/_user_request_/
我收到了 404、500 和 {"message": "Unable to find integration for path ...
的各种回复。
我至少访问了 API Gateway 模拟服务器;当我执行 curl -vv 时,我看到:
* Connected to localhost (127.0.0.1) port 4567 (#0)
> GET /restapis/0091232159/test/_user_request_/ HTTP/1.1
> Host: localhost:4567
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
有什么想法吗?我只需要魔法之路!
最佳答案
您部署了 API 吗?我没有看到上面的命令。如果是,在浏览器中打开 http://localhost:4567/restapis 应该可以看到。
可以肯定的是,这里是在 Localstack 中使用 API Gateway 设置 lambda 的完整演练:
首先我们创建一个简单的 NodeJS Lambda:
const apiTestHandler = (payload, context, callback) => {
console.log(`Function apiTestHandler called with payload ${JSON.stringify(payload)}`);
callback(null, {
statusCode: 201,
body: JSON.stringify({
somethingId: payload.pathParameters.somethingId
}),
headers: {
"X-Click-Header": "abc"
}
});
}
module.exports = {
apiTestHandler,
}
将其放入名为 apiTestHandler.zip 的 zip 文件中并将其上传到 localstack:
aws lambda create-function \
--region us-east-1 \
--function-name api-test-handler \
--runtime nodejs6.10 \
--handler index.apiTestHandler \
--memory-size 128 \
--zip-file fileb://apiTestHandler.zip \
--role arn:aws:iam::123456:role/role-name --endpoint-url=http://localhost:4574
现在我们可以创建我们的 Rest-Api:
aws apigateway create-rest-api --region us-east-1 --name 'API Test' --endpoint-url=http://localhost:4567
这给出了以下响应:
{
"name": "API Test",
"id": "487109A-Z548",
"createdDate": 1518081479
}
利用我们在这里获得的 ID,我们可以询问其父 ID:
aws apigateway get-resources --region us-east-1 --rest-api-id 487109A-Z548 --endpoint-url=http://localhost:4567
回应:
{
"items": [
{
"path": "/",
"id": "0270A-Z23550",
"resourceMethods": {
"GET": {}
}
}
]
}
现在我们已经拥有了创建资源及其路径的一切:
aws apigateway create-resource \
--region us-east-1 \
--rest-api-id 487109A-Z548 \
--parent-id 0270A-Z23550 \
--path-part "{somethingId}" --endpoint-url=http://localhost:4567
回应:
{
"resourceMethods": {
"GET": {}
},
"pathPart": "{somethingId}",
"parentId": "0270A-Z23550",
"path": "/{somethingId}",
"id": "0662807180"
}
创建链接的 GET 方法需要我们在此处获得的 ID:
aws apigateway put-method \
--region us-east-1 \
--rest-api-id 487109A-Z548 \
--resource-id 0662807180 \
--http-method GET \
--request-parameters "method.request.path.somethingId=true" \
--authorization-type "NONE" \
--endpoint-url=http://localhost:4567
我们即将完成 - 最后要做的事情之一就是创建与已上传的 lambda 的集成:
aws apigateway put-integration \
--region us-east-1 \
--rest-api-id 487109A-Z548 \
--resource-id 0662807180 \
--http-method GET \
--type AWS_PROXY \
--integration-http-method POST \
--uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:000000000000:function:api-test-handler/invocations \
--passthrough-behavior WHEN_NO_MATCH \
--endpoint-url=http://localhost:4567
最后但并非最不重要的一点:将我们的 API 部署到我们想要的阶段:
aws apigateway create-deployment \
--region us-east-1 \
--rest-api-id 487109A-Z548 \
--stage-name test \
--endpoint-url=http://localhost:4567
现在我们可以测试它:
curl http://localhost:4567/restapis/487109A-Z548/test/_user_request_/HowMuchIsTheFish
回应:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 34 100 34 0 0 9 0 0:00:03 0:00:03 --:--:-- 9
{"somethingId":"HowMuchIsTheFish"}
我希望这会有所帮助。
提示 1:为了更方便使用,我建议安装 AWSCLI Local ( https://github.com/localstack/awscli-local ) - 使用此工具,您可以使用命令“awslocal”,而不必键入“--endpoint-url” = ...”对于每个命令
提示 2:如果您不想以后每次都手动定义上述步骤,我建议您使用无服务器框架 ( https://serverless.com/ ) 和 localstack 插件 ( https://github.com/temyers/serverless-localstack )。如果您需要这方面的帮助,我也可以为您提供简短的指南。
关于aws-lambda - 对于 LocalStack API Gateway Lambda 集成,我到底应该使用哪个路径进行 cURL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48236040/
Spring Cloud Greenwich puts spring-cloud-netflix-zuul处于维护模式,所以我正在尝试从 Zuul 迁移到 Spring Cloud Gateway。
有没有办法对 AWS API Gateway 服务使用基本身份验证而不是 AWS4-HMAC-SHA256 身份验证?我需要支持仅支持使用基本身份验证的 webhook 调用的系统。 最佳答案 您只需
Rails API 通常喜欢这样的数组查询参数: example.com?colors[]=cyan&colors[]=magenta&colors[]=yellow&colors[]=black 我
Here蓝图中说,API 网关将响应 401: Unauthorized。 我写了同样的raise Exception('Unauthorized')在我的 lambda 中,并且能够从 Lambda
在 documentation我确实看到了如何使用 Hystrix 实现超时,但我只想确保没有实现默认超时。 最佳答案 现在还有一个 chapter关于文档中的一般超时。可以设置全局超时和每条路由超时
我的资源/api 有一个方法 POST,它将主体代理到 Kinesis Firehose(然后代理到 ES)。同时我希望它触发一个 Lambda 函数。 我尝试添加一个额外的方法 ANY 来触发 La
Spring Cloud Gateway 真的很新 - 但它“似乎”很容易。我真的很苦恼的一个问题。我的要求是为路径添加前缀,检查头变量,根据该变量查找 URI,然后继续前进。 问题是 uri 总是下
我已经使用 Websocket 协议(protocol)创建了一个 API 网关。部署 API 后,我得到一个 WebSocket URL 和一个连接 URL。 例如 WebSocket URL:ws
我正在使用 AWS API Gateway 和 AWS Lambda 创建一个无服务器的 REST API。虽然已创建端点并与相应的 Lambda 函数链接,但下一步是添加身份验证层以通过电子邮件和密
我们开发了一个应用程序,它提供多种休息服务,并支持 Accept-Encoding header ,以通过 Content-Encoding:gzip header 值返回压缩内容。 此应用程序部署在
我正在开发 CloudFormation 模板来部署 API Gateway 资源,但在部署 (AWS::ApiGateway::Deployment) 和UsagePlan 资源方面遇到问题。这有点
我目前正在使用 AWS API Gateway 开发 API。我正在向我的客户发布一个 JSON Web token (JWT)。该 JWT 使用 secret 进行签名。我目前将 secret 存储
我下载了 .NET SDK对于 Payflow Gateway 并遵循 these instructions关于设置我的 Payflow Gateway 测试帐户,然后修改两行 DOSecureTok
我目前正在将 Amazon CloudSearch 与前端应用程序集成。由于已知的 CORS 问题,我也被迫使用 API 网关。 出现的问题是,前端 CloudSearch 库发送带有编码参数的 ur
我正在创建一个 LambdaRestApi在 CDK 中,我想同时启用 CORS 并使用 addProxy 方法添加任何代理。 我目前有以下 CDK 代码: const api = new Lam
我们可以使用 AWS API Gateway 使用双向 SSL 功能吗?我们希望在我们的实时流应用程序中使用 API Gateway 作为 kinesis 的代理。 下面是我的要求 客户端向 apig
我正在构建一个无服务器 react 应用程序,它使用 Cognito 进行登录/注销。该应用程序调用 API 网关,该网关配置为使用 Cognito 用户池作为自定义授权方。 我还构建了一个 lamb
我已经浏览了 Google Cloud API Gateway docs并搜索 the public issue tracker但一直无法以某种方式提及它。 我最接近的是this google gro
我正在尝试将使用 spring-cloud-starter-netflix-zuul 的网关迁移到 Spring Cloud Gateway,但我遇到了请求路由问题。 我浏览了以下有关为 Discov
我正在尝试设置我的 API 网关,以便它具有以下简单的方法响应: 我正在使用 CloudFormation,但总是遇到错误。我相信这很简单,但在花了几个小时阅读文档后我陷入了困境。这是我的方法资源(在
我是一名优秀的程序员,十分优秀!