我正在开发一个无服务器的无需项目,需要在本地测试lambda函数.
我正在使用serverless invoke local -f {function_name}命令来测试不请求任何路径或查询参数的API调用.
我的问题是如何使用此命令将任何路径或查询参数传递给函数?
示例无服务器描述
getFoodDetails:
handler: handler.getFoodDetails
events:
- http:
method: get
path: /foods/{food_id}
cors: true
request:
parameters:
paths:
food_id: true
Run Code Online (Sandbox Code Playgroud) 我有两个关于 AWS SAM 和部署的问题。
\n我\xe2\x80\x99m 阅读文档并检查这样的示例,并且我\xe2\x80\x99m 仍然不太确定如何使用我的 SAM 模板单独部署到staging和production环境。是否像部署一个具有新名称(例如sam deploy \xe2\x80\x94stack-name my-app-staging和 )的新堆栈一样简单sam deploy \xe2\x80\x94stack-name my-app-production?
在下面的例子中,我有一个问题。如果我的 SAM 模板包含具有三个可能值的Parameters名称MyEnvironment,则部署如何知道在部署堆栈时使用这三个值中的哪个值?就像我会怎么说使用值stagingor production?这是我部署时会自动询问的问题还是我必须在 CLI 上提供的问题?
何时应使用参数存储来保存配置,何时应使用 AppConfig?例如,如果我必须在运行时更改日志级别,是否应该将其存储在 SSM 或 Appconfig 中?
优缺点都有什么?这两者有什么区别,特别是在具有 lambda 函数的无服务器应用程序的上下文中?
app-config amazon-web-services aws-ssm aws-parameter-store aws-serverless
在Mac上运行,我使用aws-nodejs模板创建了一个基本的无服务器服务:
serverless create --template aws-nodejs --path TestService
Run Code Online (Sandbox Code Playgroud)
之后我使用以下命令添加无服务器本地:
npm install serverless-dynamodb-local
serverless dynamodb install
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我都无法开始使用dynamodb-local.我跑的时候
serverless dynamodb start
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error: spawn java ENOENT
at _errnoException (util.js:992:11)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
at onErrorNT (internal/child_process.js:372:16)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)
Run Code Online (Sandbox Code Playgroud)
跑步java --version给我以下信息:
Java 10.0.2 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我正在使用Node 8.11.4和无服务器1.30.1.Aws-sdk也已安装,我已经设置了我的个人资料.
谢谢
amazon-web-services node.js amazon-dynamodb serverless-framework aws-serverless
背景:我对“无服务器”概念很陌生。我正在创建一个拾取和放置应用程序。基本上,应用程序将从 40 个队列中使用/选取消息,并将这些消息发送/放置在单个传出 FIFO 队列中(以维持顺序)。该逻辑需要大约 10 个工作线程/线程在不同队列上并行运行。
请不要建议 lambda。它不适合我的用例。
我计划在 AWS ECS + fargate 中创建此应用程序。我想知道当我在 java 应用程序中使用 Fargate 来创建这 10 个线程时会出现任何问题吗?
使用fargate(这是一个无服务器概念)时多线程有什么问题吗?
multithreading amazon-web-services amazon-ecs aws-fargate aws-serverless
我的目标是 尝试编写一个(单个)SAM 模板来获取由 Api 网关事件触发的 Lambda 函数。
我想要有多个 API 阶段(例如“dev”、“testing”、“prod”),并且希望每个阶段都映射到具有相同名称的 Lambda 别名。
我不想在每次部署时生成新的 lambda 版本,并且我喜欢手动设置每个 lambda 别名要使用的 lambda 版本。当然,“dev”别名意味着指向 $LATEST 代码版本。
我尝试了什么以及我得到了什么
我对经典的“hello_world”模板进行了如下修改。现在,当第一次部署(例如,“开发”)时,一切似乎都按预期工作。 但是,如果我尝试部署到“测试”阶段,则此新阶段的 API 会响应,而“开发”阶段的 API 将停止响应。
我缺少什么?
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
zzzz
Sample SAM Template for zzzz
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 3
Parameters:
StageAliasName:
Description: stage / alias name to be used in this deploy
Type: String
AllowedValues:
- prod
- stage
- dev
- v1
Default: dev
Resources:
ApiGatewayApi: …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda aws-sam-cli aws-serverless aws-sam
我刚刚开始使用 SAM 使用 AWS 无服务器并遇到以下问题:
SAM invoke 似乎找不到我的 lambda 处理程序正在导入的 python 模块,但我可以以其他方式导入该模块。
该结构我的项目是:
根目录/
我在 python3.6 虚拟环境中工作,我已经使用安装工具安装了我的 python 包(mymodulename):
python setup.py develop
Run Code Online (Sandbox Code Playgroud)
因此,如果我在虚拟环境中冻结 pip,我会看到:
Pillow==6.0.0
PyPDF2==1.26.0
reportlab==3.5.20
mymodulename==0.5.0
Run Code Online (Sandbox Code Playgroud)
另外如果我去:
cd root-dir/aws/sam/
python
>>> import mymodulename
Run Code Online (Sandbox Code Playgroud)
这成功了。所以它在python路径上。
但是当我在本地调用 sam 时,即:
sam local invoke MyAWSServiceFunction --event ../sam/test/test_event.json
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
2019-05-02 09:19:17 Found credentials in shared credentials file: ~/.aws/credentials
2019-05-02 09:19:18 Invoking app.lambda_handler (python3.6)
Fetching lambci/lambda:python3.6 Docker container image......
2019-05-02 …Run Code Online (Sandbox Code Playgroud) 我一直在为下面的错误而苦苦挣扎。我已经尝试了很多教程和 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 serverless(LAmbda、API GW 和 DynamoDB),但在开发人员测试期间,他们的“Postman”实用程序遇到了以下错误:
{
"message": "Authorization header requires 'Credential' parameter.
Authorization header requires 'Signature' parameter.
Authorization header requires 'SignedHeaders' parameter.
Authorization header requires existence of either a 'X-Amz-Date' or a 'Date'
header.
Authorization=xxxxxxxxxxxxxxxxxxxx"
}
Run Code Online (Sandbox Code Playgroud)
我已经检查了cloudwatch日志,但没有发现任何内容,我认为这意味着请求没有到达API端点,我不知道为什么。
实际上,我需要找出这个错误是否是由于 Postman 参数或 api 端点而发生的。
PS Lambda代码是使用Python开发的
请指教。
我正在尝试在 AWS 无服务器平台上部署我的 Laravel 应用程序,我在我的 Laravel-mix 中使用动态导入和代码拆分来编译资产,要执行此操作我按照bref 包文档中的步骤安装了所需的图书馆按照指示,我还将我的公共目录与我的 s3 存储桶同步
npm run prod
aws s3 sync public/ s3://<bucket-name>/ --delete --exclude index.php
Run Code Online (Sandbox Code Playgroud)
并将我的.env文件配置为:
MIX_ASSET_URL=https://<bucket-name>.s3.amazonaws.com
ASSET_URL=https://<bucket-name>.s3.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
接下来我将我的blade文件配置为:
<script src="{{ asset('nits-assets/js/app.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)
我的webpack.mix.js文件有:
const mix = require('laravel-mix')
const webpack = require('webpack');
const ASSET_URL = process.env.ASSET_URL + "/";
mix.js('resources/js/app.js', 'public/nits-assets/js')
.postCss('resources/sass/app.css', 'public/nits-assets/css', [
require("tailwindcss"),
])
.webpackConfig({
output: {
chunkFilename: 'nits-assets/chunks/[name].[contenthash].js',
publicPath: ASSET_URL
},
resolve: {
symlinks: false,
alias: {
NitsModels: path.resolve(__dirname, 'Models'),
},
},
plugins: [ …Run Code Online (Sandbox Code Playgroud) aws-serverless ×10
aws-lambda ×4
aws-sam ×2
amazon-ecs ×1
api-gateway ×1
app-config ×1
aws-fargate ×1
aws-sam-cli ×1
aws-ssm ×1
bref ×1
javascript ×1
laravel ×1
laravel-mix ×1
node.js ×1
python-3.x ×1
sam ×1
webpack ×1