我的 params.json 输入中有一部分用于一组步骤函数,并且我想修改一些参数以包含在输入参数中呈现的日期时间。
"Predictor": {
"PredictorName": "normal_name_/*DATETIME HERE*/",
"ForecastHorizon": 181,
. . .
},
Run Code Online (Sandbox Code Playgroud)
我目前正在通过修改函数第一步中的输入参数来完成此操作,但是这是有问题的,因为每次运行它时,它都会重新渲染日期时间,并且我想“锁定”日期,就像步骤一样函数执行已创建。这可能吗?
该 API 没有什么特别的,但我有一个无服务器函数 POST API,它需要一个授权标头进行验证,然后写入数据库。
例如:
curl --location --request POST 'https://myserver.server.com/api/endpoint' \
--header 'Authorization: Bearer blahblahblahblah'
Run Code Online (Sandbox Code Playgroud)
在 Vercel 预览分支中,我能够使其正常工作,并且Authorization标头按预期传递到我的 API。当我在生产中对此进行测试时,Authorization标头将从请求中剥离(通过记录原始请求标头来确定)。预览版和生产版在标题方面有什么区别Authorization?我需要做什么才能在生产中转发标头?
任何帮助将不胜感激。提前致谢!
我正在尝试使用 chrome-aws-lambda by node.js lambda 函数从 HTML 生成 pdf。我使用本手册创建了一个图层。另外,我尝试在我的函数中使用现有层,但总是收到错误:Cannot read property 'puppeteer' of undefined。我的处理程序看起来像:
import chromium from 'chrome-aws-lambda';
export const handler: Handler = async (event: AppsyncEvent) => {
...
try {
browser = await chromium.puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath,
headless: chromium.headless
});
....
} finally {
....
}
}
Run Code Online (Sandbox Code Playgroud)
serverless.yml 中的 webpack 设置
webpack:
webpackConfig: ../webpack.config.js
includeModules:
packagePath: '../package.json'
forceInclude:
- source-map-support
forceExclude:
- aws-sdk
- chrome-aws-lambda
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
module.exports = { …Run Code Online (Sandbox Code Playgroud) amazon-web-services node.js aws-lambda serverless chrome-aws-lambda
我正在尝试无服务器,但我没有运气能够serverless-offline使用serverless-dynamodb-local. 我的设置非常少,需要 3 分钟才能重现,我是这样做的:
sls create -t aws-nodejs-typescript --path folder-namenpm inpm install --save serverless-dynamodb-localnpm install serverless-offline --save-devsls dynamodb install
现在我更新serverless.ts文件
plugins: [
'serverless-esbuild',
'serverless-dynamodb-local',
'serverless-offline'
],
Run Code Online (Sandbox Code Playgroud)
customDynamoDB 配置,例如 custom: {
esbuild: { ... },
dynamodb: {
stages: ['dev'],
start: {
migrate: true
}
}
Run Code Online (Sandbox Code Playgroud)
resources: {
Resources: {
usersTable: {
Type: 'AWS::DynamoDB::Table',
Properties: { …Run Code Online (Sandbox Code Playgroud) typescript serverless-framework serverless serverless-offline amazon-dynamodb-local
在将无服务器 api 部署到 AWS lambda 期间,我收到如下错误消息:
错误:无法创建托管资源:服务员 StackCreateComplete 失败:服务员遇到终端故障状态:对于表达式“Stacks[].StackStatus”,我们匹配预期路径:“ROLLBACK_COMPLETE”至少一次
解决方案是什么以及如何解决这个问题?
amazon-web-services aws-cloudformation aws-code-deploy serverless aws-amplify
我遇到了无服务器错误:
Resolver associated with data sources从serverless.yml配置文件进行构建时:
# serverless.yml
...
mappingTemplates:
- dataSource: Wallet
type: Query
field: walletFromId
request: "_dynamo-get-wallet.txt"
response: "_generic-result-response.txt"
- dataSource: Wallet
type: Query
field: walletsFromUser
request: "_dynamo-get-wallets-from-user.txt"
response: "_generic-result-response.txt"
- dataSource: Wallet
type: Mutation
field: registerWallet
request: "_dynamo-put-wallet.txt"
response: "_generic-result-response.txt"
dataSources:
- type: AMAZON_DYNAMODB
name: Wallet
description: 'Wallet DataSource'
config:
tableName: "${self:custom.stage}-Wallet"
serviceRoleArn: "arn:aws:iam::${self:custom.accountId}:role/${self:custom.appSync.serviceRole}"
...
Run Code Online (Sandbox Code Playgroud)
我也有一个schema.graphql:
type Query {
# query the wallet with given id and get the output with detail info
walletFromId(walletId: String!): Wallet! …Run Code Online (Sandbox Code Playgroud) 我已经使用Lambda和SQS设置了一个小型的无服务器应用程序。在我来说,我想触发一个拉姆达每一次消息被添加到SQS队列。
我的serverless.yml中的功能
functions:
collectGame:
handler: js/collect.collectGame
memorySize: 128
timeout: 10
events:
- sqs:
arn:
Fn::GetAtt:
- gameRequestQueue
- Arn
- http:
method: post
cors:
origin: "https://my-api-url.com"
path: get/game/{id}
private: true
request:
parameters:
paths:
id:true
Run Code Online (Sandbox Code Playgroud)
我通过一次向队列发送31条消息来测试该过程,但意识到只有9个Lambda被执行(通过查看cloudwatch日志)。我查看了队列,可以确认队列中已填充所有消息,并且在触发9个Lambda之后可以确认队列为空。
我希望有31个Lambda死刑,但事实并非如此。有人知道消息未触发我的Lambda的潜在原因吗?
我正在编写供内部使用的API,并且这是我第一次使用无服务器框架。我正在Node.js中编写Lambda函数,并使用AWS API Gateway进行连接。
在某些情况下,我想返回一个自定义错误消息,而我试图编写一个允许我执行此操作的函数。现在,每当Lambda进程失败时,我都会从API收到一条标准消息。在代码中,如果我尝试使用杀死进程process.exit(1),即使我已经使用callback()以下命令返回了错误,也会收到一般错误:
{
"message": "Internal server error"
}
Run Code Online (Sandbox Code Playgroud)
如果不使用process.exit(1),我会callback()在日志中看到通过错误返回的错误,但是该过程继续进行,最终超时:
{
"message": "Endpoint request timed out"
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种使用该callback()方法返回错误的方法,但是到目前为止,我还没有成功。我试过这种方法:
async function return_error(callback, context, error, returnCode){
console.error("FATAL ERROR: ", error);
let ErrorObj = {
errorType : "InternalServerError",
httpStatus : 500,
requestId : context.awsRequestId,
errorMessage : error
}
callback(JSON.stringify(ErrorObj));
process.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
async function return_error(callback, error, returnCode){
console.error("FATAL ERROR: ", error);
callback({
isBase64Encoded: false,
statusCode: returnCode,
headers: { 'Content-Type': 'application/json' …Run Code Online (Sandbox Code Playgroud) node.js aws-lambda aws-api-gateway serverless-framework serverless
我正在使用Cognito,API网关和授权者。授权者配置为缓存5分钟以提高性能。我觉得这是一个不错的功能。
我知道授权者是将身份验证逻辑放在一个地方的好方法,并且应用程序可以假定用户已被授权。但是,我对此表示怀疑。
渗透测试报告建议,一旦注销,令牌就不能使用。因此,为了安全起见,我不应该启用授权者缓存吗?这也意味着所有经过身份验证的API都要经过一个lambda授权者的开销...
同样从编码的角度来看,使用很难进行端到端测试的授权者真的是一个好主意吗?我可以将lambda函数作为一个单元进行测试。但是对我来说更重要的是它们已连接到正确的API。我目前无法看到可以轻松测试的方法。
另一个问题是查看代码,我再也无法轻易分辨出需要什么授权……我必须查看应该附加哪个授权者(例如CloudFormation),然后查看lambda代码本身。
使用授权者有什么好处吗?或实际上最佳做法是什么?
我一直在研究在Google Cloud Run中运行Docker容器的新选项,但是,似乎没有关于是否应在Cloud run上运行MySQL的建议,显然,我知道它不是Web服务,并且我在GCP的官方Google文档中了解到,Google可能只是告诉人们请使用Cloud SQL(他们的SQL产品),但我没有在网上找到有关“在云运行中运行mysql”的任何建议,所以我想在这里问。冷启动的启动时间会降低解决方案的性能吗?(假设使用存储桶存储东西)
serverless ×10
aws-lambda ×4
node.js ×2
amazon-sqs ×1
aws-amplify ×1
aws-appsync ×1
aws-sam ×1
graphql ×1
json ×1
mysql ×1
next.js ×1
python ×1
typescript ×1
vercel ×1