标签: serverless-framework

我如何使用aws lambda将文件写入s3(python)?

我曾尝试使用lambda函数将文件写入S3,然后测试显示"成功",但我的S3存储桶中没有出现任何内容.发生了什么?有人能给我一些建议或解决方案吗?非常感谢.这是我的代码.

import json
import boto3

def lambda_handler(event, context):

string = "dfghj"

file_name = "hello.txt"
lambda_path = "/tmp/" + file_name
s3_path = "/100001/20180223/" + file_name

with open(lambda_path, 'w+') as file:
    file.write(string)
    file.close()

s3 = boto3.resource('s3')
s3.meta.client.upload_file(lambda_path, 's3bucket', s3_path)
Run Code Online (Sandbox Code Playgroud)

python lambda amazon-s3 amazon-web-services serverless-framework

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

SAM模板和Cloudformation模板之间的区别

我发现很难理解SAM模板和Cloudformation模板之间的区别.我知道SAM模板可用于定义像Lambda这样的无服务器应用程序,但是它如何使它与Cloudformation模板不同?语法不同吗?我仍然可以在cloudformation模板中指定Lambda定义.所以,我的问题是我为什么要关心SAM?不知道只是云形成模板就足够了吗?

amazon-web-services aws-cloudformation aws-lambda serverless-framework

15
推荐指数
3
解决办法
3563
查看次数

Cognito用户池授权程序使用无服务器框架

我需要使用aws cognito userpool授权我的API端点.我可以手动完成,但我需要使用无服务器框架自动化授权部分.

无服务器框架是否支持aws cognito?

如果是这样,我们如何设置无服务器的aws-userpool?

amazon-web-services amazon-cognito aws-lambda aws-api-gateway serverless-framework

14
推荐指数
3
解决办法
7412
查看次数

如何在CloudWatch中将值传递给Lambda函数?

以从CloudWatch计时器处理ping的方式包装函数的最佳方法是什么?例如,采用下面的lambda函数:

export const fn = (event, context, callback) => {
  const { year, make, model, } = event.queryStringParameters

  return otherFn({ year, make, model, })
    .then(res => response(callback, res))
    .catch(err => console.log(err))
}
Run Code Online (Sandbox Code Playgroud)

如果我ping函数,它将会出错,因为CloudWatch请求中没有queryStringParameters.从技术上讲,这仍然可以保持Lambda函数的温暖(这是我的目标),但我不想有一个不必要的错误列表.

我注意到CloudWatch允许您包含(可能)传递给Lambda函数的输入:

配置输入

包装上面的函数以便它可以接受ping的最聪明的方法是什么?理想情况下它看起来像这样:

export const fn = (event, context, callback) => {
  if (event.ping) return ping(callback) // the ping function is an import to stay DRY
  const { year, make, model, } = event.queryStringParameters

  return otherFn({ year, make, model, })
    .then(res => response(callback, res))
    .catch(err => console.log(err))
} …
Run Code Online (Sandbox Code Playgroud)

lambda amazon-web-services amazon-cloudwatch aws-lambda serverless-framework

14
推荐指数
1
解决办法
8291
查看次数

"sls dynamodb start"抛出了生成java ENOENT

在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

14
推荐指数
2
解决办法
3461
查看次数

具有无服务器框架的AWS codeBuild/codePipeline

我正在尝试为我的应用程序自动化部署管道.这是自动化架构,我想出了: 自动化架构

如您所见,我使用codePipelinecodeBuild来自动部署.我的后端基于无服务器框架,它在kick sls deploy命令上部署lambda函数.这就是我没有使用codeDeploy进行传统部署的原因.buildspec.yml文件看起来像这样:

version: 0.1

phases:
  install:
    commands:
      – apt-get -y update
      – npm install -g serverless@1.9.0
  build:
    commands:
      – cd nj2jp/serverless && npm install
  post_build:
    commands:
      – serverless deploy –verbose

artifacts:
  files:
    – serverless.yml
  discard-paths: yes
Run Code Online (Sandbox Code Playgroud)

现在,我有3个关于CodeBuildServerless的问题:

问题1:该命令sls deploy取决于一个名为config.ymldb password的秘密.此文件不会被检入git.您认为config.yml在codeBuild中包含的最佳方式是什么?

问题2: 如果我们必须使用codeDeploy部署传统的EC2应用程序,则可以使用AWS完成回滚.在无服务器的情况下,我们不使用codeDeploy,无服务器也支持回滚功能.我们如何在codePipeline中利用无服务器回滚? …

amazon-web-services aws-lambda aws-codepipeline serverless-framework aws-codebuild

13
推荐指数
1
解决办法
2561
查看次数

在Lambless.yml中将Lambda函数分配给特定的VPC ID

我使用无服务器框架将一个Python lambda函数部署到AWS.在我的serverless.yml文件中,我已经定义了一个我需要部署到具有特定ID的VPC的功能,因为只有VPC具有从lambda函数发出一些与业务相关的请求所需的网络连接.

  customer_callback:
    vpc:
      subnetIds:
        - subnet-something
    handler: myservice/event_stream.customer_callback
Run Code Online (Sandbox Code Playgroud)

在文档中,上面的示例是他们提到的将函数附加到VPC的方法:

https://serverless.com/framework/docs/providers/aws/guide/functions/

但是,该功能根本没有部署到VPC,例如我最终得到:

在此输入图像描述

我试过像这样直接指定VPC ID:

  customer_callback:
    vpc:
      id: vpc-something
    handler: myservice/event_stream.customer_callback
Run Code Online (Sandbox Code Playgroud)

但这没有任何作用.这个问题的文档基本上不存在,我尝试了很多搜索,所以我最后要在这里发帖寻求帮助.

amazon-web-services aws-lambda serverless-framework

13
推荐指数
1
解决办法
3556
查看次数

如何在无服务器框架中为多个dynamodb表定义iamrolestatements的资源?

我想在我的无服务器项目中使用多个dynamodb表.如何在iamrolestatements中正确定义多个资源?

我有一个例子 serverless.yml

service: serverless-expense-tracker
frameworkVersion: ">=1.1.0 <2.0.0"

provider:
  name: aws
  runtime: nodejs6.10
  environment:
    EXPENSES_TABLE: "${self:service}-${opt:stage, self:provider.stage}-expenses"
    BUDGETS_TABLE: "${self:service}-${opt:stage, self:provider.stage}-budgets"

  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:Query
        - dynamodb:Scan
        - dynamodb:GetItem
        - dynamodb:PutItem
        - dynamodb:UpdateItem
        - dynamodb:DeleteItem
      Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:table/${self:provider.environment.EXPENSES_TABLE}"
      # what is the best way to add the other DB as a resource

functions:
  create:
    handler: expenseTracker/create.create
    events:
      - http:
          path: expenses
          method: post
          cors: true

  list:
    handler: expenseTracker/list.list
    events:
      - http:
          path: expenses
          method: get
          cors: true

  get: …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb serverless-framework

13
推荐指数
2
解决办法
4403
查看次数

错误:"在使用带有node.js的Lambda中的AWS X射线时,无法从上下文获取当前子/段"

我正在尝试将AWS X射线实施到我当前的项目中(使用Node.js和Serverless框架).我试图将X射线连接到我的lambda函数之一,我遇到了问题

Error: Failed to get the current sub/segment from the context.
    at Object.contextMissingRuntimeError [as contextMissing] (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:21:15)
    at Object.getSegment (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:92:45)
    at Object.resolveSegment (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:73:19).....
Run Code Online (Sandbox Code Playgroud)

代码如下:

import { DynamoDB } from "aws-sdk";
import AWSXRay from 'aws-xray-sdk';

export const handler = async (event, context, callback) => {

    const dynamo = new DynamoDB.DocumentClient({
        service: new DynamoDB({ region })
    });

    AWSXRay.captureAWSClient(dynamo.service);

    try {
        // call dynamoDB function 
    } catch(err) {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

对于这个问题,我使用的解决方案来自 https://forums.aws.amazon.com/thread.jspa?messageID=821510褆

我试过的另一个解决方案来自https://forums.aws.amazon.com/thread.jspa?messageID=829923ꧣ

代码就像

import AWSXRay from 'aws-xray-sdk';
const AWS = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda serverless-framework aws-xray

13
推荐指数
2
解决办法
2359
查看次数

运行无服务器部署的简单 lambda 时找不到模块“处理程序”

我正在尝试开始学习无服务器/ lambda,因此我创建了一个简单的 lambda 并使用无服务器部署它,效果很好。

然而,当我想测试 lampbda 的端点时,我得到了答案502。当我查看日志时,它告诉我它找不到没有handler任何意义的模块......

这是日志:

{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module 'handler'\nRequire stack:\n- 
/var/runtime/UserFunction.js\n- /var/runtime/index.js",
 "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module 'handler'",
"Require stack:",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
"    at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
"    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
"    at Object.<anonymous> (/var/runtime/index.js:43:30)",
"    at Module._compile (internal/modules/cjs/loader.js:1158:30)",
"    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)",
"    at Module.load (internal/modules/cjs/loader.js:1002:32)",
"    at Function.Module._load (internal/modules/cjs/loader.js:901:14)",
"    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)",
"    at internal/main/run_main_module.js:18:47"
]
}
Run Code Online (Sandbox Code Playgroud)

aws-lambda serverless-framework

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