我想按上面的标题中所述将文件上传到s3存储桶时,我想接收电子邮件,我使用的是无服务器,问题是我在s3上创建的事件仅在s3-aws控制台上通知我,并且不不知道如何在S3上配置cloudwatch事件以触发lambda。因此,如果有人知道如何使用cloudwatch触发S3上的事件,我将不知所措。这是我的代码:
import json
import boto3
import botocore
import logging
import sys
import os
import traceback
from botocore.exceptions import ClientError
from pprint import pprint
from time import strftime, gmtime
email_from = '*****@******.com'
email_to = '******@******.com'
#email_cc = '********@gmail.com'
email_subject = 'new event on s3 '
email_body = 'a new file is uploaded'
#setup simple logging for INFO
logger = logging.getLogger()
logger.setLevel(logging.INFO)
from botocore.exceptions import ClientError
def sthree(event, context):
"""Send email whenever a file is uploaded to S3"""
body = {}
status_code …Run Code Online (Sandbox Code Playgroud) amazon-s3 amazon-web-services python-2.7 amazon-ses serverless
我想知道在为无服务器计算创建函数时是否可以使用docker?
如果是这样,它会是什么样子?
如何指定函数处理程序?
有关此主题的任何文章或教程?
您如何在AWS-Lambda上下文中应用这些问题?任何细节?
谢谢.
我正在使用无服务器来运行lambda函数。
尝试执行时面临问题 sls invoke local --function myFunction
exports.myFunction = async (event) => {
^
SyntaxError: Unexpected token (
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
Run Code Online (Sandbox Code Playgroud)
无服务器配置看起来像这样。
serverless.yaml
service: myService
provider:
name: aws
runtime: nodejs8.10
stage: ${opt:stage, 'dev'}
region: eu-west-1
environment:
CUSTOM_ENV: ${opt:stage, 'dev'}
functions:
myFunction:
handler: index.myFunction
events:
- http:
cors: true
path: /{proxy+}
method: POST
plugins:
- serverless-offline
- serverless-webpack
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
const slsw = require("serverless-webpack");
const nodeExternals = require("webpack-node-externals");
const path = require('path');
module.exports …Run Code Online (Sandbox Code Playgroud) 在无服务器环境中,我的功能具有以下目录结构:
serverless.yml
functions -
stories -
create.js
get.js
Run Code Online (Sandbox Code Playgroud)
serverless.yml然后我的样子是这样的:
functions:
stories:
create:
handler: functions/stories/create.main
events:
- http:
path: stories/create
method: post
cors: true
authorizer: aws_iam
get:
handler: functions/stories/get.main
events:
- http:
path: stories/{id}
method: get
cors: true
authorizer: aws_iam
Run Code Online (Sandbox Code Playgroud)
但是,当我运行测试以检查创建时:serverless invoke local --function create --path mocks/create-event.json我得到以下错误:
Serverless Error ---------------------------------------
Function "create" doesn't exist in this Service
Run Code Online (Sandbox Code Playgroud)
我设法使一个函数看起来像这样:
functions:
stories:
handler: functions/stories/create.main
events:
- http:
path: stories/create
method: post
cors: true
authorizer: aws_iam
Run Code Online (Sandbox Code Playgroud)
由于我添加了get函数,因此我决定需要添加create和故事后的部件,但是无论我如何更改处理程序,这些函数似乎都不存在。
我尝试将路径更改为functions/stories/create/create.main无差异,是否有明显的缺失,我不允许在同一位置使用多个处理程序?
我正在看下面的 …
我正在学习AWS Lambda,并且担心同步实时请求。lambda具有“冷启动”的事实,对于处理GET请求来说听起来并不好。
假设用户正在使用该应用程序并执行GET HTTP请求以获取产品或产品列表,如果lambda处于睡眠状态,则将需要10秒钟来响应,我认为这不是可接受的响应时间。使用AWS Lambda进行经典(同步响应)API Rest是好还是不好的做法?
因此,我创建了一堆突变和查询,并将它们拼接在一起,这些工作并希望将身份验证引入到组合中。我添加了一个 HTTP 标头“x-token”来保存我的登录令牌,以便能够删除他们的工作或用户本身等内容。
const getMe = async req => {
const token = req.headers['x-token'];
if (token) {
try {
return await jwt.verify(token, "notSoSecret");
} catch (e) {
throw new AuthenticationError(
'Your session expired. Sign in again.',
);
}
}
};
const server = new ApolloServer({
typeDefs: schema,
resolvers,
formatError: error => {
// remove the internal sequelize error message
// leave only the important validation error
const message = error.message
.replace('SequelizeValidationError: ', '')
.replace('Validation error: ', '');
return {
...error, …Run Code Online (Sandbox Code Playgroud) 我尝试使用无服务器将 lambda 函数部署到 AWS。一切正常,但该函数无法执行,因为找不到两个文件(就是这么fs.readFileSync说的)。我将它们包含在 serverless.yml 中,并包含以下几行:
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: eu-central-1
package:
exclude:
- .env
include:
- src/config/push-cert.pem
- src/config/push-key.pemRun Code Online (Sandbox Code Playgroud)
当我查看上传到 S3 的 .zip 文件时,两个 .pem 文件都不包含在内。我已经尝试使用__dirnamelambda 函数获取完整的文件路径。我的webpack.config.js样子如下:
const path = require("path");
const nodeExternals = require("webpack-node-externals");
const slsw = require("serverless-webpack");
module.exports = {
entry: slsw.lib.entries,
target: "node",
node: {
__dirname: true
},
mode: slsw.lib.webpack.isLocal?"development":"production",
externals: [nodeExternals()],
output: {
libraryTarget: "commonjs",
// pay attention to this
path: path.join(__dirname, ".webpack"),
filename: "[name].js" …Run Code Online (Sandbox Code Playgroud)amazon-web-services webpack serverless-framework serverless aws-serverless
我在一家使用 Serverless 构建云原生应用程序和服务的公司工作。今天,我们将 DynamoDB 和 SQL 数据库与 AWS Aurora 结合使用。
我们希望将 DocumentDB 用于我们的下一个应用程序,但我们找不到有关 Serverless 和 AWS DocumentDB 的任何信息。Serverless 是否支持 AWS DocumentDB?如果没有,未来是否有计划支持它?
我正在学习如何使用无服务器框架来创建和管理 AWS 服务。我已经使用无服务器站点上的文档逐步部署了无服务器项目,但由于某种原因,我无法在 AWS 管理控制台中看到 DynamoDB 表。
我已检查我使用的 AWS 配置文件是否正确,当我从终端使用 cURL 时,我能够从表中发布和获取数据,并且能够在浏览器中查看这些端点上的数据,但我无法在 serverless.yml 文件之外的任何地方看到对创建的表的任何引用。这是为什么?请参阅下面的代码(完整的演示存储库位于此链接: https: //github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb)。
感谢您帮助学习这里的细微差别。谢谢!
org: justinbell714
app: jb-test-from-docs
service: serverless-rest-api-with-dynamodb
frameworkVersion: ">=1.1.0 <2.0.0"
provider:
name: aws
runtime: nodejs10.x
environment:
DYNAMODB_TABLE: ${self:service}-${opt:stage, self:provider.stage}
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.DYNAMODB_TABLE}"
functions:
create:
handler: todos/create.create
events:
- http:
path: todos
method: post
cors: true
list:
handler: todos/list.list
events:
- http:
path: todos
method: get
cors: …Run Code Online (Sandbox Code Playgroud) 我是使用无服务器框架的新手,我想创建三个不同的环境 dev、Qa、prod。如何在单个 serverless.yml 文件中创建?提供商是AWS。
在我的应用程序中,我将请求发送到getInitialPropsapi 端点(在 /api 文件夹中)。在本地主机中运行我的应用程序时,一切正常,因为它都在同一域(本地主机)下。
将我的应用程序成功部署到 aws lambda (使用serverless-next.js)后,这些请求不再有效。
原因是getInitialProps在服务器中运行时的主机头是myAppBucket.s3.us-east-1.amazonaws.com,但应用程序域是https://d25q7fh11ll2cg.cloudfront.net。请求myAppBucket.s3.us-east-1.amazonaws.com/api/users不起作用但起作用https://d25q7fh11ll2cg.cloudfront.net/api/users。https://d25q7fh11ll2cg.cloudfront.net/api/users但我运行时没有域数据(即) getInitialProps。
我不想将域作为环境变量。还有另一种解决方案吗?此外,直接调用处理程序函数getInitialProps也是有问题的,因为处理程序仅使用服务器端包。谢谢
我使用无服务器文件 + CloudFormation 在 AWS Athena 服务上创建表。
我的无服务器.yml:
...
CardBulkWorkgroup:
Type: AWS::Athena::WorkGroup
Properties:
Name: ${opt:stage}-${opt:client}-CardBulk
WorkGroupConfiguration:
ResultConfiguration:
OutputLocation: s3://${lower:${opt:stage}}-${lower:${opt:client}}-card-bulk-athena-result
CardBulkDatabase:
Type: AWS::Glue::Database
Properties:
CatalogId: !Ref AWS::AccountId
DatabaseInput:
Name: ${lower:${opt:stage}}_${lower:${opt:client}}_bulkcard
CardBulkTable:
Type: AWS::Glue::Table
Properties:
CatalogId: !Ref AWS::AccountId
DatabaseName: !Ref CardBulkDatabase
TableInput:
Name: card
StorageDescriptor:
Columns:
- Name: cardId
Type: int
- Name: metadata
Type: struct<orderId:string, convertVirtualToPhysicalErrors:string>
- Name: orderId
Type: string
- Name: errors
Type: string
Location: s3://${lower:${opt:stage}}_${lower:${opt:client}}-files/cards
InputFormat: org.apache.hadoop.mapred.TextInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
SerdeInfo:
SerializationLibrary: org.openx.data.jsonserde.JsonSerDe
Parameters:
"serialization.format": "1"
CardBulkAthenaBucketResult:
Type: AWS::S3::Bucket …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation amazon-athena serverless
serverless ×12
aws-lambda ×4
node.js ×2
amazon-s3 ×1
amazon-ses ×1
apollo ×1
async-await ×1
docker ×1
graphql ×1
javascript ×1
mongodb ×1
next.js ×1
python-2.7 ×1
sequelize.js ×1
webpack ×1