我创建了一个 node express 应用程序,它使用multer将图像上传到我的“assets-in”s3 存储桶。图像上传到 s3 后,图像处理 lambda 函数会获取图像并将其调整为另一个 s3 存储桶。
上传脚本:
var assetsBucketIn = new AWS.S3({
accessKeyId : "...",
secretAccessKey : "...",
region : "...",
params : {
Bucket : "..."
}
});
var uploadAssets = multer({inMemory : true});
var imgFieldSettings = [
{
name : 'uploadFiles',
maxCount : 7
}
];
router.post('/images', uploadAssets.fields(imgFieldSettings), (req, res, next) => {
...
uploadPromises = [];
for(let i = 0; i < req.files.uploadFiles.length; i++){
let params = {
Key : …Run Code Online (Sandbox Code Playgroud) 目前我们正在使用无服务器框架来更新我们的开发/测试环境,并手动管理我们的环境。例如。每次创建新环境时,我们都会手动创建 Elastic Beanstalk 应用程序和 RDS 实例。是否可以使用无服务器脚本自动化所有这些?或云形成?
amazon-web-services amazon-elastic-beanstalk serverless-framework
我遇到了这个问题,我有一个聊天服务器需要与托管在 aws 中的 lambda 服务进行通信,但云前端会引发以下错误。
BODY: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Bad request.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: h5kPdVnMXwh-P7e7mxQ5LL1gj9fAupp_MNAPxmxufI74W4WhE_MByw==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
Run Code Online (Sandbox Code Playgroud)
这就是我的请求在应用程序中的方式。
const options = {
hostname: 'xxx.uat.com',
port : '443',
path: '/qa/addMessage',
method: 'POST'
};
const req = http.request(options, (res) => {
}
Run Code Online (Sandbox Code Playgroud)
聊天 server.js …
amazon-ec2 amazon-web-services amazon-cloudfront serverless-framework
我从lambda函数(无框架工作服务器)到AWS中的S3服务的getObject访问存在问题。这是我的代码示例:
import boto3
import csv
def hello(event, context):
s3 = boto3.resource('s3')
bucket = s3.Bucket('myBucket')
obj = bucket.Object(key='MOCK_DATA.csv')
response = obj.get()
lines = response['Body'].read().split()
body = []
for row in csv.DictReader(lines):
body.append(row)
return body
Run Code Online (Sandbox Code Playgroud)
然后在我的serverless.yml中,我将全部访问权限授予了lambda
iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:*"
Resource:
- "arn:aws:s3:::myBucket"
Run Code Online (Sandbox Code Playgroud)
但是当我运行代码时,我收到错误:
START RequestId: a6c006b7-21e5-11e8-8193-c3378825927 Version: $LATEST
An error occurred (AccessDenied) when calling the GetObject operation: Access Denied: ClientError
Traceback (most recent call last):
File "/var/task/handler.py", line 5, in hello
response = obj.get()
File "/var/runtime/boto3/resources/factory.py", line 520, …Run Code Online (Sandbox Code Playgroud) python amazon-s3 amazon-web-services boto3 serverless-framework
我已经搜寻了很多东西,无法在我的一生中陷入无服务器状态,无法设置一个dynamodb触发器。
我用过:
- stream:
type: dynamodb
batchSize: 100
enabled: true
arn:
Fn::GetAtt:
- MyDynamoDbTable
- StreamArn
Run Code Online (Sandbox Code Playgroud)
我尝试了一个硬编码的arn,但没有发生任何可以在aws控制台中看到的事件。我是无服务器新手。如果您有任何指针,请发表。
我使用无服务器框架来部署 cloudFormation。我想在我用某些属性更新我的 DynamoDB 表后触发 lambda 来删除我的 S3 存储桶上的对象,例如。我的表有帐户、用户、图标,我只想要当我更新图标时,它会触发 Lambda 删除我在 S3 存储桶上的 iconObject。
当我阅读 AWS 上的文档时,dynamoDB 流事件的 eventName 似乎只有三个状态,REMOVE、MODIFY、INSERT。
AWS 文档 » Amazon DynamoDB » API 参考 » 数据类型 » Amazon DynamoDB 流 » 记录记录
我可以做如下吗?但是我怎么知道它更新图标而不是帐户或用户等其他属性?
if (this._record.eventName === 'MODIFY' && this._record.NewImage!== this._record.OldImage ){
return this._remove(this._record.dynamodb);
}
Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services amazon-dynamodb aws-lambda serverless-framework
我在无服务器/TypeScript 项目的 webpack 打包步骤中遇到内存问题。
我试过了:
从 npm 运行脚本调用以下命令
通过 bitbucket-pipelines.yml 直接调用以下命令。
node --max-old-space-size=4096 ./node_modules/.bin/serverless deploy
Run Code Online (Sandbox Code Playgroud)使用此命令可以在本地正常工作,但在 Bitbucket 管道中,我得到以下输出:
Serverless: Bundling with Webpack...
internal/child_process.js:323
throw errnoException(err, 'spawn');
^
Error: spawn ENOMEM
at _errnoException (util.js:1022:11)
at ChildProcess.spawn (internal/child_process.js:323:11)
at exports.spawn (child_process.js:502:9)
at Object.exports.fork (child_process.js:103:10)
at fork (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/fork.js:17:36)
at Farm.startChild (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/farm.js:106:16)
at Farm.processQueue (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/farm.js:279:10)
at Farm.<anonymous> (/opt/atlassian/pipelines/agent/build/node_modules/worker-farm/lib/farm.js:97:21)
at ontimeout (timers.js:475:11)
at tryOnTimeout (timers.js:310:5)
at Timer.listOnTimeout (timers.js:270:5)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! platform-state-machine-import@0.0.2 deploy: `node --max-old-space-size=4096 …Run Code Online (Sandbox Code Playgroud) 使用Serverless Framework部署AWS Lambda函数,Serverless创建(或接收)特定的URL端点字符串。我想在serverless.yml规范文件的另一部分中使用该字符串(作为变量)。
该URL端点是否可以作为in中的变量serverless.yml?关于与AWS相关的变量的无服务器框架文档
似乎无法回答这种情况。
详细信息:my serverless.yml包含provider:类似于以下内容的规范:
provider:
name: aws
runtime: python3.6
memorySize: 512
region: ${opt:region, 'eu-west-1'}
profile: ${opt:profile, 'default'}
stage: ${opt:stage, 'staging'}
Run Code Online (Sandbox Code Playgroud)
和以以下functions:内容开头的部分:
functions:
round-control:
name: ${self:provider.stage}-round-control
runtime: nodejs8.10
handler: round/control/app.lambdaHandler
events:
- http:
path: round/control
method: get
Run Code Online (Sandbox Code Playgroud)
之后
serverless deploy --profile [my-aws-profile]
sample-experiments-staging-round-control
据报道Lambda函数在端点可用
https://1a234bc5de.execute-api.eu-west-1.amazonaws.com/staging/round/control。
问题:Serverless中是否有一个包含该变量的变量1a234bc5de,或者1a234bc5de.execute-api甚至
包含1a234bc5de.execute-api.eu-west-1.amazonaws.com?(显然,如果我知道第一个,我也可以构造最后两个。)
使用该变量,我可以构造完整的URL端点,而该端点需要在serverless.yml文件的其他位置。
注意:这1a234bc5de不是动态生成的随机字符串-我当前的项目(每个阶段,每个区域)“固定”到相同的字符串。也许该字符串是在AWS Lambda或AWS API Gateway上生成的?
amazon-web-services aws-lambda aws-api-gateway serverless-framework
在无服务器中,我正在创建一个AWS::Lambda::PermissionCFN 资源,它允许 Cognito 调用自定义消息 Lambda 处理程序。
AWS::Lambda::Permission取决于 lambda。如何确保首先创建 lambda?
我已经尝试向CFN 资源添加一个DependsOn属性,但AWS::Lambda::Permission没有成功。
下面是我的 CFN 资源,它尝试向 Cognito 添加权限以调用 lambda:
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:invokeFunction
Principal: cognito-idp.amazonaws.com
FunctionName: arn:aws:lambda:${self:provider.region}:#{AWS::AccountId}:function:${self:service}-${self:provider.stage}-cognitoCustomMessage
SourceArn: arn:aws:cognito-idp:${self:provider.region}:#{AWS::AccountId}:userpool/${self:provider.environment.USER_POOL_ID}
Run Code Online (Sandbox Code Playgroud)
这是我的 lambda 在我的 lambda 中的样子serverless.yml:
cognitoCustomMessage:
handler: src/main/lambdas/users_handler.cognitoCustomMessage
Run Code Online (Sandbox Code Playgroud)
这是我的 lambda 在非常基本的层面上所做的:
cognitoCustomMessage(event, next) {
if (event.triggerSource === 'CustomMessage_ForgotPassword') {
// do stuff
}
return next(null, event);
}
Run Code Online (Sandbox Code Playgroud)
我从上面得到的错误是:
发生错误:CognitoCustomMessageLambdaFunction - 找不到函数:arn:aws:lambda:us-west-2:1234567890:my-service-dev-cognitoCustomMessage(服务:AWSLambdaInternal;状态代码:404;错误代码:ResourceNotFoundException;请求 ID:e2a98525 -5090-4d0f-a1f5-20610474f93b)。
如果我添加一个DependsOn:
UserPoolLambdaInvokePermission:
Type: AWS::Lambda::Permission
DependsOn: …Run Code Online (Sandbox Code Playgroud) aws-cloudformation amazon-cognito aws-lambda serverless-framework
在我的 AWS 项目中,我使用无服务器框架来部署 lambda 函数和 IAM 角色。
所以我创建了 6 个 lambda 函数,都使用下面相同的 IAM 角色:
functions:
auto-delete-identity:
handler: src/auto-delete-identity.handler
role: arn:aws:iam::123456789012:role/lambdaIAMRole
name: auto-delete-identity
auto-move-to-user-group:
handler: src/auto-move-to-user-group.handler
role: arn:aws:iam::123456789012:role/lambdaIAMRole
name: auto-move-to-user-group
auto-validate-user-creation:
handler: src/auto-validate-user-creation.handler
role: arn:aws:iam::123456789012:role/lambdaIAMRole
name: auto-validate-user-creation
auto-validation-user-email-modification:
handler: src/auto-validation-user-email-modification.handler
role: arn:aws:iam::123456789012:role/lambdaIAMRole
name: auto-validation-user-email-modification
hello-demo:
handler: src/hello-demo.handler
role: arn:aws:iam::123456789012:role/lambdaIAMRole
name: hello-demo
reset-user-password:
handler: src/reset-user-password.handler
role: arn:aws:iam::123456789012:role/lambdaIAMRole
name: reset-user-password
resources:
Resources:
lambdaIAMRole:
Type: "AWS::IAM::Role"
Properties:
RoleName: lambdaIAMRole
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Action:
- "sts:AssumeRole"
Effect: "Allow"
Principal:
Service:
- "lambda.amazonaws.com"
Policies: …Run Code Online (Sandbox Code Playgroud) amazon-web-services amazon-iam aws-lambda serverless-framework
aws-lambda ×5
amazon-s3 ×3
amazon-ec2 ×1
amazon-iam ×1
boto3 ×1
express ×1
node.js ×1
python ×1
serverless ×1
typescript ×1