我已使用 CloudFormation 语法在 API 网关资源上声明了一个 HTTP 代理方法(详细信息请参阅之前的文章。)
\n\n我正在尝试附加一个类型为“Request”的自定义授权者,它使用现有的 AWS Lambda 函数。无服务器文档有一个使用 CloudFormation 设置自定义授权者的不错示例。同时,无服务器离线 显然支持(源)请求范围的自定义授权者。
\n\n在创建以下无服务器模板时,我仔细交叉引用了AWS::ApiGateway::Resource和AWS::ApiGateway::Authorizer的相关 AWS CloudFormation 文档以及相关的无服务器文档。但到目前为止,我没有从无服务器离线获得预期的输出或行为获得预期的输出或行为。
\n\n当我启动以下无服务器配置时,不会为我的资源加载授权者。我没有看到我的serverless.yml文件中有什么错误或缺失。你有什么建议吗?提前致谢!
\xe2\x9e\x9c serverless-offline-attempt git:(master) \xe2\x9c\x97 npm start\n\n> @ start /Users/freen/src/apig/serverless-offline-attempt\n> ./node_modules/serverless/bin/serverless offline\n\nServerless: Starting Offline: dev/us-east-1.\n\nServerless: Routes defined in resources:\nServerless: ANY /upstream/{proxy*} -> http://upstream.company.cool/{proxy}\n\nServerless: Offline listening on http://localhost:3000\nRun Code Online (Sandbox Code Playgroud)\n\nserverless.yml以下模板文件包含 APIG 资源和授权者配置。
\n\n\xe2\x9e\x9c serverless-offline-attempt git:(master) \xe2\x9c\x97 npm start\n\n> @ start …Run Code Online (Sandbox Code Playgroud) aws-lambda aws-api-gateway serverless-framework serverless serverless-offline
我有一个正在生成并返回值的Lambda.此值可能会过期.因此我需要在返回之前检查值的有效性.由于生成非常昂贵(取自另一个服务),我想以某种方式存储该值.
存储这两个值(时间戳和相应值)的最佳实践是什么?
什么是最佳做法?什么是性能方面?
amazon-s3 amazon-web-services amazon-dynamodb aws-lambda serverless
我正在构建一个 React 应用程序,使用 API Gateway、lambda 和 cognito(基本上从https://serverless-stack.com教程开始)。我想为我的 DynamoDb 设置细粒度的访问控制(即通过基于登录用户限制对 DynamoDb 表的访问的 IAM 策略 - 如https://docs.aws.amazon.com/IAM/latest/UserGuide/ reference_policies_examples_dynamodb_rows.html )
AFAIK,一个 lambda 函数承担一个服务角色,如 serverless.yml 文件中定义的那样,它本身与附加到登录的 cognito 用户的 AIM 策略无关。我知道使用aim_authorizer,我可以获得登录用户的信息。
我的问题:是否可以让 lambda 代表给定的认知用户执行 AWS 调用,从而遵守附加到该用户的 IAM 策略?(有点类似于 serverless-stack 教程如何与 S3 交互)
欢迎所有建议。
我正在使用无服务器和无服务器 webpack。webpack配置非常简单:
const path = require('path');
const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: {
lambda: './lambda.js',
},
output: {
libraryTarget: 'commonjs',
path: path.join(__dirname, '.webpack'),
filename: '[name].js',
},
target: 'node',
externals: [nodeExternals()],
module: {
rules: [{
test: /\.js$/,
loader: 'babel-loader',
include: __dirname,
exclude: /node_modules/,
}, {
test: /\.json$/,
loader: 'json-loader',
}],
},
stats: "verbose",
};
Run Code Online (Sandbox Code Playgroud)
无服务器.yml:
plugins:
- serverless-webpack
- serverless-secrets-plugin
- serverless-plugin-split-stacks
- serverless-offline
custom:
webpack:
webpackConfig: ./webpack.config.js
stage: ${opt:stage, self:provider.stage}
provider:
name: aws
runtime: nodejs8.10
functions: …Run Code Online (Sandbox Code Playgroud) 我按照 webpack4 示例来设置配置:https : //github.com/serverless-heaven/serverless-webpack/tree/master/examples/babel-webpack-4 因为我收到错误“找不到模块源-地图支持/注册”。
我已经研究了已经创建的问题:
https://github.com/serverless-heaven/serverless-webpack/issues/357
https://github.com/serverless-heaven/serverless-webpack/issues/228
现在我的配置是:
.babelrc{
"comments": false,
"sourceMaps": "both",
"presets": ["env","stage-2"],
"plugins": ["source-map-support"]
}
Run Code Online (Sandbox Code Playgroud)
webpack.config.js:
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const slsw = require('serverless-webpack');
module.exports = {
entry: slsw.lib.entries,
mode: slsw.lib.webpack.isLocal ? 'development' : 'production',
output: {
libraryTarget: 'commonjs2',
path: path.join(__dirname, '.webpack'),
filename: '[name].js',
sourceMapFilename: '[file].map',
},
optimization: {
// We no not want to minimize our code.
minimize: false,
},
performance: {
// Turn off size warnings for …Run Code Online (Sandbox Code Playgroud) node.js webpack serverless serverless-webpack-plugin serverless-offline
我是webpack和无服务器的新手,所以如果这看起来微不足道,请原谅我.我从npm serverless-webpack复制了这些代码.
我尝试使用serverless webpack --out dist,但我的命令行无法识别webpack.如果我尝试serverless deploy <opts> <opt>,那么它编译并捆绑成.serverless但缺少必要的JS文件.
webpack.config.js
var path = require('path');
var slsw = require('serverless-webpack');
var nodeExternals = require('webpack-node-externals');
module.exports = {
context: path.resolve(__dirname, './src'),
entry: slsw.lib.entries,
target: 'node',
externals: [nodeExternals()],
output: {
libraryTarget: 'commonjs',
path: path.resolve(__dirname, '.webpack'),
filename: '[name].js',
},
module: {
rules: [
{
test: /\.jsx$/,
loader: ["babel-loader"],
include: __dirname,
exclude: /node_modules/
}
]
}
};
Run Code Online (Sandbox Code Playgroud)
Serverless.yml
service: hello-world
frameworkVersion: '>=1.2.0 <2.0.0'
provider:
name: aws
runtime: nodejs8.10 …Run Code Online (Sandbox Code Playgroud) 每当我尝试通过浏览器通过 POST 访问无服务器 lambda 函数时,我都会收到错误消息
对预检请求的响应未通过访问控制检查:请求的资源上不存在 >'Access-Control-Allow-Origin' 标头。
当它是一个/GET它工作正常我读过它是因为它没有发送飞行前请求。当我把它改成POST这个的时候就是失败了。
我正在运行的命令:
sam local start-api
我的 template.yaml 是:
...
Resources:
PropertiesFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: target/service-0.0.1-SNAPSHOT.jar
Handler: com.aws.PropertiesHandler::handleRequest
Runtime: java8
Events:
PropertiesApi:
Type: Api
Properties:
Path: /properties
Method: post
...
Run Code Online (Sandbox Code Playgroud)
如何在这些端点上启用 CORS?
amazon-web-services aws-lambda aws-api-gateway aws-sam-cli serverless
我有一个无服务器的 lambda函数,在其中我想触发(调用)一个方法而忘记它
我用这种方式做
// myFunction1
const params = {
FunctionName: "myLambdaPath-myFunction2",
InvocationType: "Event",
Payload: JSON.stringify(body),
};
console.log('invoking lambda function2'); // Able to log this line
lambda.invoke(params, function(err, data) {
if (err) {
console.error(err, err.stack);
} else {
console.log(data);
}
});
// my function2 handler
myFunction2 = (event) => {
console.log('does not come here') // Not able to log this line
}
Run Code Online (Sandbox Code Playgroud)
我注意到,直到并且除非我执行Promise returnin myFunction1,否则它不会触发myFunction2,但是不应该设置lambda InvocationType = "Event"意味着我们希望此操作被触发并忘记并且不关心回调响应吗?
我在这里想念什么吗?
非常感谢您的帮助。
javascript aws-lambda serverless aws-lambda-edge aws-serverless
目前,我正在研究将复杂的 Web 应用程序从 AWS 迁移到 GCP 的可能性和正确方法。将通用计算和网络服务从一个提供商映射到另一个提供商实际上没有问题,但我想知道 GCP 是否有类似于AWS Step Functions 的服务?我已经看过 Google Dataflow和 Google Cloud Tasks。第二个似乎是这样的,但我不确定它是否是最佳解决方案。
所以问题是谷歌的哪些服务提供了与 AWS Step Functions 相同的功能?如果没有这样的 - 那么你会推荐哪些服务的组合来实现分布式任务(主要是云功能)的有效编排。谢谢!
amazon-web-services web google-cloud-platform aws-step-functions serverless
免责声明:我承认这更像是一个广泛的最佳实践问题,而不是一个特定的编程问题,但是,我相信 SO 群是它的最佳受众。我知道这个类似的问题(我应该在无服务器应用程序中使用 Express.js 吗?),但答案似乎没有回答我的问题。
出于典型原因,我想将 Express.js 从 AWS Lightsail/EC2 迁移到无服务器,而 Lambda 是我的首选武器。但是,将整个框架连同其上的应用程序一起视为函数可能有点笨重,因此可能不适合在 AWS Lambda 或 Google/Azure Functions 上运行。虽然我确信这是可行的,但这是个好主意吗?这种设置不会降低效率并使处理诸如会话状态之类的事情变得复杂,最终会破坏无服务器功能的目的吗?
express aws-lambda azure-functions serverless aws-serverless
serverless ×10
aws-lambda ×6
webpack ×3
javascript ×2
node.js ×2
amazon-s3 ×1
aws-sam-cli ×1
express ×1
web ×1