标签: serverless-framework

将图像从 lambda 上传到 s3(损坏的文件)

我创建了一个 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)

amazon-s3 express aws-lambda serverless-framework

4
推荐指数
1
解决办法
2725
查看次数

serverless可以用来创建RDS实例吗?

目前我们正在使用无服务器框架来更新我们的开发/测试环境,并手动管理我们的环境。例如。每次创建新环境时,我们都会手动创建 Elastic Beanstalk 应用程序和 RDS 实例。是否可以使用无服务器脚本自动化所有这些?或云形成?

amazon-web-services amazon-elastic-beanstalk serverless-framework

4
推荐指数
1
解决办法
3586
查看次数

云前线:无法满足请求

我遇到了这个问题,我有一个聊天服务器需要与托管在 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

4
推荐指数
2
解决办法
2万
查看次数

从S3中读取的无服务器AWS(Python):访问被拒绝

我从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

4
推荐指数
1
解决办法
1234
查看次数

无服务器动态引擎流和触发器

我已经搜寻了很多东西,无法在我的一生中陷入无服务器状态,无法设置一个dynamodb触发器。

我用过:

- stream:
        type: dynamodb
        batchSize: 100
        enabled: true
        arn: 
          Fn::GetAtt:
            - MyDynamoDbTable
            - StreamArn
Run Code Online (Sandbox Code Playgroud)

我尝试了一个硬编码的arn,但没有发生任何可以在aws控制台中看到的事件。我是无服务器新手。如果您有任何指针,请发表。

amazon-dynamodb serverless-framework serverless

4
推荐指数
1
解决办法
3207
查看次数

仅更新某些属性时如何使用 DynamoDBStreamEvent 触发 Lambda

我使用无服务器框架来部署 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

4
推荐指数
1
解决办法
2632
查看次数

如何在 Typescript/Webpack 的 Bitbucket 管道中增加 NodeJS 堆(--max-old-space-size)?

我在无服务器/TypeScript 项目的 webpack 打包步骤中遇到内存问题。

我试过了:

  • “增加内存限制” npm 包无济于事
  • 从 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)

node.js typescript serverless-framework bitbucket-pipelines

4
推荐指数
1
解决办法
9575
查看次数

如何在Serverless Framework的`serverless.yml`文件中获取URL端点详细信息作为变量?

使用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

4
推荐指数
2
解决办法
1368
查看次数

您如何从 CFN 资源“依赖”一个 Lambda 函数?

在无服务器中,我正在创建一个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

4
推荐指数
2
解决办法
2327
查看次数

部署时出现 AWS Lambda 和 IAM 错误:Lambda 无法承担为该函数定义的角色

在我的 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

4
推荐指数
1
解决办法
1667
查看次数