我曾尝试使用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
我发现很难理解SAM模板和Cloudformation模板之间的区别.我知道SAM模板可用于定义像Lambda这样的无服务器应用程序,但是它如何使它与Cloudformation模板不同?语法不同吗?我仍然可以在cloudformation模板中指定Lambda定义.所以,我的问题是我为什么要关心SAM?不知道只是云形成模板就足够了吗?
amazon-web-services aws-cloudformation aws-lambda serverless-framework
我需要使用aws cognito userpool授权我的API端点.我可以手动完成,但我需要使用无服务器框架自动化授权部分.
无服务器框架是否支持aws cognito?
如果是这样,我们如何设置无服务器的aws-userpool?
amazon-web-services amazon-cognito aws-lambda aws-api-gateway serverless-framework
以从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
在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
我正在尝试为我的应用程序自动化部署管道.这是自动化架构,我想出了:

如您所见,我使用codePipeline和codeBuild来自动部署.我的后端基于无服务器框架,它在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个关于CodeBuild和Serverless的问题:
问题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
我使用无服务器框架将一个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)
但这没有任何作用.这个问题的文档基本上不存在,我尝试了很多搜索,所以我最后要在这里发帖寻求帮助.
我想在我的无服务器项目中使用多个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) 我正在尝试将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
我正在尝试开始学习无服务器/ 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)