我写了一些基本的js来列出FTP的文件,但我得到:
"在完成请求之前退出流程"
那是因为Lambda无法与FTP交互吗?
我正在使用jsftp btw.
这是我的设置:
我的代码:
// Require Serverless ENV vars
var ServerlessHelpers = require('serverless-helpers-js').loadEnv();
// Require Logic
var lib = require('../lib');
// Lambda Handler
module.exports.handler = function (event, context) {
lib.respond(event, function (error, response) {
return context.done(error, response);
});
};
Run Code Online (Sandbox Code Playgroud)
我的ftp lambda代码:
var JSFtp = require("jsftp");
module.exports.respond = function (event, cb) {
var ftp = new JSFtp({
host: "host",
user: "user",
password: "password"
});
ftp.auth(ftp.user, ftp.password, function(err, res) {
if (err) console.log(err);
else console.log(res); …Run Code Online (Sandbox Code Playgroud) 当我的网站托管在AWS S3上时,我想在无服务器架构中改进SEO(即,在搜索引擎上正确索引我的页面).
由于我正在使用JavaScript方法进行路由(类似于角度,但更简单),并获得动态内容来填充元标记,我发现一切对于没有JavaScript支持的抓取工具来说非常麻烦,比如Facebook.
我已经插入了默认元标记,当然,这些元标记加载得很好,但我需要更新的元标记.
我知道大多数人在服务器上或通过Prerender.io之类的东西使用预渲染,但我真的想找到一种在无服务器方法上有意义的替代方案.
我认为我已经弄清楚了,因为Open Graph元标记允许"指针"URL,如果需要,您可以在其中使用"仅元标记"HTML.所以我在考虑使用Lambda函数在GET请求中使用正确的元标记生成HTML响应.问题是因为Facebook刮刀没有JavaScript支持,我如何在GET请求上发送动态内容?
当我在serverless.yml文件中添加以下代码时
provider:
name: aws
runtime: python3.6
stage: dev
region: [REGION]
iamRoleStatements:
- Effect: "Allow"
Action:
- "s3:GetObject"
Resource: { "Fn::Join": ["", ["arn:aws:s3:::", { "Ref": [BUCKET NAME] }, "/*" ] ] }
Run Code Online (Sandbox Code Playgroud)
在部署时,我得到"CloudFormation模板无效:资源之间的循环依赖:"
我正在使用boto3和python3来获取在触发器事件之后上传到S3存储桶的私有文件,以便为该存储桶提供Lambda函数的权限.
amazon-s3 amazon-web-services amazon-iam aws-lambda serverless-framework
我目前在我的serverless.yml中有一些代码.
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:service}-${self:custom.stage}-uploads
visitsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:custom.visitsTable}
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: visitId
AttributeType: S
- AttributeName: comments
AttributeType: S
- AttributeName: attachments
AttributeType: S
- AttributeName: ph
AttributeType: N
- AttributeName: ch
AttributeType: N
KeySchema:
- AttributeName: userId
KeyType: HASH
- AttributeName: visitId
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
Run Code Online (Sandbox Code Playgroud)
我的目标是创建一个包含主键userId,排序键visitId的表,并包含注释,附件,ph&ch的字段.当我尝试时,sls deploy我得到以下错误.
无服务器错误---------------------------------------
发生错误:visitsTable - 属性AttributeDefinitions与表的KeySchema和二级索引不一致.
我在这做错了什么?
编辑:我试过的另一次尝试
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:service}-${self:custom.stage}-uploads …Run Code Online (Sandbox Code Playgroud) 我在serverless.yml文件中定义了以下资源.它非常适合为我所有不同的开发阶段创建资源.
resources:
Resources:
uploadBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:service}-${self:custom.stage}-uploads
visitsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: ${self:custom.visitsTable}
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
- AttributeName: visitId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
- AttributeName: visitId
KeyType: RANGE
ProvisionedThroughput:
ReadCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
WriteCapacityUnits: ${self:custom.dynamoDbCapacityUnits.${self:custom.stage}}
Run Code Online (Sandbox Code Playgroud)
问题是......如果我sls remove在删除数据库时这样做,它还会删除其他所有内容,包括lambda函数及其api网关端点,我需要保留它们,因为我已经为它们明确设置了策略. 如何告诉无服务器我只想删除数据库或S3或其他任何东西而不是其余的?
我试过的事情:
我在AWS上手动删除了,但是如果你这样做并且执行sls部署它不会再次创建数据库!所以不确定最好的方法来做到这一点......
整个Serverless.yml文件
service: mydomain-api
# Use serverless-webpack plugin to transpile ES6/ES7
plugins:
- serverless-webpack
- serverless-domain-manager
custom:
webpackIncludeModules: true
stage: ${opt:stage, self:provider.stage}
visitsTable: "${self:service}-visits-${self:custom.stage}"
domains:
prod: api.mydomain.com
staging: staging-api.mydomain.com
dev: dev-api.mydomain.com …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-lambda aws-api-gateway serverless-framework serverless
我按照这些说明创建了一个在Lambda中执行的基本Web scraper.我有编写selenium代码的经验,但没有使用Node JS.我让项目在Lambda中运行,但是当我尝试在本地编辑项目以执行我想要的selenium代码时,它不起作用.exports.handler我跑的时候没有任何东西被执行node index.js.我如何在本地执行此项目?谢谢!
我正在尝试确定对DynamoDB表的分区键使用二进制,数字还是字符串。我的应用程序是React.js / Node.js社交事件管理应用程序,其中存储在DynamoDB中的数据量的一半将用于存储项目和属性与其他项目和属性之间的关系。例如:用户的朋友,活动的参加者等。
因为架构是如此繁琐,并且由于DynamoDB项的最大大小只有400KB,并且出于性能和成本的原因,我担心密钥占用太多空间。就是说,我想使用UUID作为分区键。有众所周知的原因,对于多个节点分发新密钥的分布式无服务器应用程序,他们更喜欢UUID(或类似的熵级别,并且发生碰撞的可能性很小)。
因此,我认为我的选择是:
显然,开发人员的经验需要权衡。使用十六进制字符串最清晰,但最大。编码的字符串较小,但在日志记录,调试等过程中更难处理。Binary和Number比字符串更难,但最小。
我确定我不是第一个考虑这些折衷的人。是否有众所周知的最佳实践或启发式方法来确定应如何在DynamoDB中存储UUID密钥?
如果不是,那么我倾向于使用Binary类型,因为它是最小的存储,并且因为它的本机表示形式(作为base64编码的字符串)可以在人类需要查看和推理键的任何地方使用,包括查询,日志记录,和客户端代码。除了必须从一个转换到/ Buffer如果我使用DocumentClient,我错过了一些问题,在上面的列表中的其他选项之一的二进制类型或优势?
如果有问题,我正计划通过Lambda API进行对DynamoDB的所有访问,因此,即使需要进行转换或编组,也可以,因为我可以在我的API中进行操作。
顺便说一句,这个问题是一个已有 4年历史的问题(DynamoDB中的UUID数据类型)的续集,但是4年是一个快速发展的空间中的一个漫长的时间,因此我认为值得再次提出。
uuid amazon-web-services amazon-dynamodb serverless-framework aws-sdk-js
我需要配置 lambda viaserverless.yml以针对不同环境使用不同的配置并发。下面是我的 lambda 配置:
myLambda:
handler: src/lambdas
name: myLambda
provisionedConcurrency: ${self:custom.pc}
...
custom:
pc: ${env:PC}
Run Code Online (Sandbox Code Playgroud)
PC 值是从环境变量加载的。它适用于大于 0 的值,但我无法0在一种环境中设置值。我想要做的是禁用dev环境中的配置并发。
我已阅读此文档https://forum.serverless.com/t/conditional-serverless-yml-based-on-stage/1763/3,但它似乎对我的情况没有帮助。
如何provisionedConcurrency根据环境设置条件?
我有一个无服务器堆栈,将 API 部署到 AWS。我想使用存储在 Secrets Manager 中的 API 密钥来保护它。这个想法是在 SSM 中获取密钥的值,在部署时拉取它并将其用作我的 API 密钥。
无服务器.yml
service: my-app
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
...
apiKeys:
- name: apikey
value: ${ssm:myapp-api-key}
Run Code Online (Sandbox Code Playgroud)
据我所知,部署的 API Gateway 密钥应该与 SSM Secret 相同,但是当我在控制台中查看时,这两个值是不同的。我在忽略什么?也没有错误消息。
我正在开发一个部署到 AWS Lambda 的无服务器 Flask 应用程序。该程序使用密码学库(使用版本3.4.7)。在本地,程序运行良好,没有任何问题。但是,每当部署在 Lambda 上时,都会出现以下错误:
from cryptography.fernet import Fernet
File "/var/task/cryptography/fernet.py", line 16, in <module>
from cryptography.hazmat.primitives import hashes, padding
File "/var/task/cryptography/hazmat/primitives/padding.py", line 11, in <module>
from cryptography.hazmat.bindings._padding import lib
ImportError: /var/task/cryptography/hazmat/bindings/_padding.abi3.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
当使用“危险材料”模块中的一些必需功能时,会出现非常相似的错误:
File "/var/task/cryptography/hazmat/primitives/kdf/pbkdf2.py", line 28, in __init__
backend = _get_backend(backend)
File "/var/task/cryptography/hazmat/backends/__init__.py", line 23, in _get_backend
return default_backend()
File "/var/task/cryptography/hazmat/backends/__init__.py", line 14, in default_backend
from cryptography.hazmat.backends.openssl.backend import backend
File "/var/task/cryptography/hazmat/backends/openssl/__init__.py", line 6, in <module>
from …Run Code Online (Sandbox Code Playgroud) python amazon-web-services aws-lambda serverless-framework python-cryptography
aws-lambda ×6
amazon-s3 ×2
javascript ×2
node.js ×2
amazon-iam ×1
aws-sdk-js ×1
facebook ×1
ftp ×1
python ×1
seo ×1
serverless ×1
sftp ×1
uuid ×1