现在,我正在遵循无服务器堆栈团队准备的指南。他们正在使用React许多AWS功能,例如lambda和API getaway。为了练习它,我正在使用无服务器堆栈重写我的旧Express示例之一。
我还看到了一个名为 的库或工具aws-serverless-express。express这个库或工具允许您以这种形式运行您的应用程序serverless。
这将是一个奇怪的问题,但我想知道本机无服务器构建和无服务器快速之间的区别。
Cold start已经是劣势了。我知道这一点。除此之外,无服务器快递还有哪些负面或正面的方面?原生无服务器
有哪些消极或积极的一面?
我正在尝试部署一个 AWS Lambda 函数,当 AVRO 文件写入现有 S3 存储桶时,该函数会被触发。
我的serverless.yml配置如下:
service: braze-lambdas
provider:
name: aws
runtime: python3.7
region: us-west-1
role: arn:aws:iam::<account_id>:role/<role_name>
stage: dev
deploymentBucket:
name: serverless-framework-dev-us-west-1
serverSideEncryption: AES256
functions:
hello:
handler: handler.hello
events:
- s3:
bucket: <company>-dev-ec2-us-west-2
existing: true
events: s3:ObjectCreated:*
rules:
- prefix: gaurav/lambdas/123/
- suffix: .avro
Run Code Online (Sandbox Code Playgroud)
当我运行时serverless deploy,出现以下错误:
ServerlessError: An error occurred: IamRoleCustomResourcesLambdaExecution - API: iam:CreateRole User: arn:aws:sts::<account_id>:assumed-role/serverless-framework-dev/jenkins_braze_lambdas_deploy is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH.
Run Code Online (Sandbox Code Playgroud)
由于 CloudFormation 的工作原理,我看到一些提到需要无服务器,iam:CreateRole但如果我想使用,谁能确认这是否是唯一的解决方案existing: true?除了使用框架添加对配置的支持之前使用的旧无服务器插件之外,还有其他方法吗 …
amazon-iam serverless-framework serverless-plugins aws-serverless
我对 AWS 的了解不够,但我的公司要求我做一项工作,我猜 AWS Lambda 可以完美地完成这项工作。要求是我必须创建一个具有需要每天调用两次的端点的服务。我遵循的方法是通过 Visual Studio 创建一个无服务器 Web API,并为每个端点创建 API 网关端点。然后通过云监视事件添加一个触发器,每天运行两次,但每当触发该函数时,我都会收到此错误。
Object reference not set to an instance of an object.: NullReferenceException
at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction.MarshallRequest(InvokeFeatures features, APIGatewayProxyRequest apiGatewayRequest, ILambdaContext lambdaContext)
at Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction`2.FunctionHandlerAsync(TREQUEST request, ILambdaContext lambdaContext)
at lambda_method(Closure , Stream , Stream , LambdaContextInternal )
Run Code Online (Sandbox Code Playgroud) lambda triggers amazon-web-services asp.net-core-webapi aws-serverless
我有条件地创建 DynamoDb 表:
MyDynamoTable:
Type: AWS::DynamoDB::Table
Condition: IsDevAccount
Run Code Online (Sandbox Code Playgroud)
这是IsDevAccount使用输入参数定义的方式:
Conditions:
IsDevAccount: !Equals [ !Ref Stage, dev ]
Run Code Online (Sandbox Code Playgroud)
现在,我正在创建一个 Lambda 函数,该函数通过环境变量接受表名称(以及其他内容)作为输入。这也是有条件的。在函数的代码中,我将检查是否传递了表名(如果不满足条件则传递空)。如果是这样,我会在里面放一些东西。
但是,我不确定如何有条件地将策略模板应用于函数的角色。通常我会这样做:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Policies:
- DynamoDBWritePolicy:
TableName: !Ref MyDynamoTable
Run Code Online (Sandbox Code Playgroud)
如果由于不满足条件而未创建表(例如:在另一个帐户中),函数的执行角色会发生什么情况?我也可以有条件地应用此策略模板吗?
我不想做的是盲目地向帐户内的所有 DynamoDB 表授予写入权限。
我通过 AWS 无服务器应用程序模型 (SAM) 部署 AWS Lambda。我的一个 Lambda 函数使用 Numpy,我通过 @keithRozario 从 Klayers 的第 3 方层引用了它。我正在使用 Klayers-python38-numpy:16 但发现它在我今天部署后已被弃用,这使我的堆栈处于UPDATE_ROLLBACK_FAILED状态。
Stack actions -> Continue update rollback一项建议是从 AWS 控制台使用;我尝试过但没有成功。另一种解决方案是删除堆栈。但是,这将是我第一次删除堆栈,我想知道的是: 如果我通过控制台删除堆栈,当我重新部署它时,我的堆栈会被重新创建吗?我已经寻找了我的问题的答案,但我只找到了删除堆栈中资源的参考。
我还想知道的是,我的堆栈是 AWS CodePipeline 中许多堆栈中的第一个堆栈,如果我删除堆栈,我的管道仍然可以工作吗?此外,当我继续处理管道中的后续堆栈时,我还会遇到失败的堆栈吗?
最后,计划是在重新部署时更新到 Klayers-python38-numpy:19。
编辑:根据@marcin
问题是已经部署在我的堆栈中的 Klayers-python38-numpy:16 不再可用。今天早上我尝试对代码进行更改,但我的管道在该CreateChangeSet步骤中失败了。我假设,该层不再可用的事实是我的堆栈无法回滚的原因。
我的管道如下所示:
{
"pipeline": {
"name": "my-pipeline",
"roleArn": "arn:aws:iam::123456789:role/my-pipeline-CodePipelineExecutionRole-4O8PAUJGLXYZ",
"artifactStore": {
"type": "S3",
"location": "my-pipeline-buildartifactsbucket-62byf2xqaa8z"
},
"stages": [
{
"name": "Source",
"actions": [
{
"name": "SourceCodeRepo",
"actionTypeId": {
"category": "Source",
"owner": "ThirdParty",
"provider": "GitHub",
"version": "1" …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 ApiGatewayRestApi 设置为环境变量。我在尝试使用“sls deploy”进行部署时收到以下错误:
CloudFormation 模板无效:模板格式错误:模板的资源块中未解析的资源依赖项 [ApiGatewayRestApi]。
这是 serverless.yml 文件:
service: upranklytoolsApi
frameworkVersion: '2 || 3'
provider:
name: aws
runtime: nodejs12.x
region: us-east-1
stage: dev
apiGateway:
minimumCompressionSize: 1024
environment:
RestApiId:
Ref: ApiGatewayRestApi
iamRoleStatements:
- Effect: "Allow"
Action:
- "dynamodb:DescribeTable"
- "dynamodb:PutItem"
- "dynamodb:Get*"
- "dynamodb:Scan*"
- "dynamodb:Query"
- "dynamodb:UpdateItem"
- "dynamodb:DeleteItem"
- "dynamodb:BatchWriteItem"
- "lambda: InvokeFunction"
- "lambda: InvokeAsync"
- "dynamodb:ConditionCheckItem"
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-ranktrackerTable-${self:provider.stage}
- Effect: Allow
Action:
- cognito-idp:CreateUserPool
- cognito-idp:DeleteUserPool
- cognito-idp:UpdateUserPool
- cognito-idp:DescribeUserPool
Resource: '*'
custom:
serverless-offline:
port: …Run Code Online (Sandbox Code Playgroud) 我在初始页面加载时经常遇到看似随机的错误。我认为问题与 Vercel Serverless Functions 有关。
\n\nVercel 的完整日志:
\n[GET] /\n14:54:19:39\n2022-07-21T12:54:19.426Z 3a175b6b-396b-45d5-b1a1-46072201cd6a ERROR Unhandled Promise Rejection \n{"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"FetchError: request to \nhttps://api-eu-central-1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: \nClient network socket disconnected before secure TLS connection was \nestablished","reason":{"errorType":"FetchError","errorMessage":"request to https://api-\neu-central-1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: Client \nnetwork socket disconnected before secure TLS connection was \nestablished","code":"ECONNRESET","message":"request to https://api-eu-central-\n1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: Client network socket \ndisconnected before secure TLS connection was \nestablished","type":"system","errno":"ECONNRESET","stack":["FetchError: request to \nhttps://api-eu-central-1.graphcms.com/v2/cl2k6hi1809a401xk4hd3h5zj/master failed, reason: \nClient network socket disconnected before secure TLS connection was established"," at \nClientRequest.<anonymous> (/var/task/index.js:7892:18)"," …Run Code Online (Sandbox Code Playgroud) 我不断收到此错误,但我不知道是什么原因引起的。
我有一个根据条件发布到另一个API的API,但是在包装API中遇到此错误。
这是代码...
handler.js
'use strict';
const axios = require('axios');
module.exports.thumbnailWrapperAPI = (event, context, callback) => {
const incomingData = JSON.parse(event.body);
if(incomingData.source.includes('png') || incomingData.source.includes('jpg')){
const newLocal = 'some endpoint...';
// call image resizing API...
axios.post(newLocal,{
source: incomingData.source,
target: incomingData.target,
width: incomingData.width
})
.then(response => callback(null,response))
.catch(error => callback(error))
} else if(incomingData.source.includes('html')) {
// handle HTML
} else {
//...
};
};
Run Code Online (Sandbox Code Playgroud)
serverless.yaml
service: thumbnailWrapperAPI
provider:
name: aws
runtime: nodejs8.10
region: eu-west-1
functions:
thumbnailWrapperAPI:
handler: handler.thumbnailWrapperAPI
events:
- http:
path: generatethumbnail/ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用yaml模板创建一个AWS cloudformation堆栈。目标是为某些通知创建一个sns主题。我想输出主题arn,以便仅指定主题arn就可以为该主题订阅多个功能。
但是,当我尝试从aws控制台创建堆栈时遇到错误:
“模板验证错误:模板错误:资源NotificationsTopic不支持Fn :: GetAtt中的属性类型Arn”
对于s3存储桶,dynamodb表,我所做的工作完全相同,而且一切正常,但是由于某种原因,对于SNS主题,我无法获得ARN。
我想避免在订阅的所有函数中对主题arn进行硬编码。因为如果有一天ARN主题发生更改,那么我将需要更改所有功能,而我想将主题arn导入所有功能中并使用它。这样,如果将来由于任何原因我有一个新的arn主题,我将无需进行任何修改。
这是模板:
Parameters:
stage:
Type: String
Default: dev
AllowedValues:
- dev
- int
- uat
- prod
Resources:
NotificationsTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: !Sub 'notifications-${stage}'
Subscription:
- SNS Subscription
TopicName: !Sub 'notifications-${stage}'
Outputs:
NotificationsTopicArn:
Description: The notifications topic Arn.
Value: !GetAtt NotificationsTopic.Arn
Export:
Name: !Sub '${AWS::StackName}-NotificationsTopicArn'
NotificationsTopicName:
Description: Notifications topic name.
Value: !Sub 'notifications-${stage}'
Export:
Name: !Sub '${AWS::StackName}-NotificationsTopicName'
Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-sns aws-cloudformation aws-serverless
我正在使用无服务器框架在AWS上部署带有http端点的lambda。这可以正常工作并返回API网关端点。
我想知道端点URL在什么情况下会更改。我需要URL保持不变,知道删除和重新部署服务将更改URL。
在其他情况下,URL会更改吗?
aws-cloudformation aws-lambda serverless-framework serverless-plugins aws-serverless
aws-serverless ×10
aws-lambda ×4
node.js ×2
amazon-iam ×1
amazon-sns ×1
aws-sam ×1
express ×1
graphql ×1
lambda ×1
serverless ×1
svelte ×1
triggers ×1
vercel ×1