我有一个 lambda 函数,我想通过 HTTP 请求触发它。
当我单击add triggerlambda 函数时,我会得到一个 API Gateway API 设置:
method: ANY
Run Code Online (Sandbox Code Playgroud)
伟大的。现在,当查看此 lambda 函数时,我看到已配置触发器。
但是,我想将触发器限制为仅允许POST请求。
因此,我删除了 API Gateway 方法ANY,并POST在同一资源下创建了一个新方法,使用的集成类型为Lambda Function. 我选择了我的区域,果然,我现有的 lambda 函数会自动完成。
但是,当我查看triggerslambda 函数本身的选项卡时,它显示没有触发器。
我缺少什么?
我的Lambda函数通过create_instancesboto3模块创建EC2服务器。
我从早上就开始触发这个 Lambda,它创建实例的效果很好。但突然间,我不断收到这个奇怪的错误:
{
"stackTrace": [
[
"/var/task/processing.py",
54,
"lambda_handler",
"KeyName=keyname, SubnetId='subnet-<>', SecurityGroupIds=['sg-<>'])"
],
[
"/var/runtime/boto3/resources/factory.py",
520,
"do_action",
"response = action(self, *args, **kwargs)"
],
[
"/var/runtime/boto3/resources/action.py",
83,
"__call__",
"response = getattr(parent.meta.client, operation_name)(**params)"
],
[
"/var/task/botocore/client.py",
251,
"_api_call",
"return self._make_api_call(operation_name, kwargs)"
],
[
"/var/task/botocore/client.py",
537,
"_make_api_call",
"raise ClientError(parsed_response, operation_name)"
]
],
"errorType": "ClientError",
"errorMessage": "An error occurred (RequestExpired) when calling the RunInstances operation: Request has expired."
}
Run Code Online (Sandbox Code Playgroud)
发生了什么事?很确定这不是代码错误,因为从早上起就一直在运行相同的代码。
使用 Java AWS SDK,我创建了一个 lambda 函数来从 s3 存储桶读取 csv 文件。我已将存储桶公开,并且可以从任何浏览器轻松访问它和文件。为了测试它,我使用 lambda 控制台上的测试按钮。我只是使用 hello world 测试配置输入模板。
它失败了:
错误消息:指定的存储桶无效。(服务:Amazon S3;状态代码:400;错误代码:InvalidBucketName;请求 ID:XXXXXXXXXXXXXXX)
Lambda 函数和 s3 存储桶位于同一区域 (us-east-1)。
我已将 AmazonS3FullAccess 添加到 lambda_basic_execution 角色。
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();
Run Code Online (Sandbox Code Playgroud)
也尝试过
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
Run Code Online (Sandbox Code Playgroud)
然后打电话
S3Object s3object = s3Client.getObject(new GetObjectRequest(
bucketName, keyName));
Run Code Online (Sandbox Code Playgroud)
存储桶名称是:
https://s3.amazonaws.com/<allAlphaLowerCaseBucketName>
Run Code Online (Sandbox Code Playgroud)
键名是:
<allAlphaLowerCaseKeyName>.csv
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
我有一个场景,我需要从另一个 lambda 设置一个环境变量。第一个 lambda 是 s3 触发器,它将处理上传到 s3 的 csv。然后,它将通过生成附加时间戳的表名称在 Dynamo 中创建一个表。我希望能够使这个 lambda 设置另一个将使用新创建的表的 lambda 的环境变量。是否可以做到这一点?如果可以,我们如何在 NodeJs 中做到这一点?
我正在与Sequelizein合作node.js,想法是使用该Singleton模式。
阅读有关如何node使用模块缓存和一些单例示例的信息
我此时的文件是:
const DBManager = (function () {
// Instance stores a reference to the Singleton
let instance: any;
let db: string = null;
let user: string;
let password: string;
let host: string;
let sequelize: Sequelize.Sequelize;
function init(bdName: string) {
db = bdName;
user = process.env.MYSQL_DB_USERNAME || 'root';
password = process.env.MYSQL_DB_PASSWORD || 'root';
host = process.env.MYSQL_DB_HOST || 'localhost';
return {
open: () => {
sequelize = new Sequelize(db, user, …Run Code Online (Sandbox Code Playgroud) singleton node.js sequelize.js aws-lambda serverless-framework
我想创建一个计划事件来运行 Lambda,每1 分钟执行一次 api 调用(cron 行行为)。
此设置的警告是;外部 api 不可靠/缓慢,并且 api 调用有时可能持续超过1 分钟。
所以,我的问题是;给定设置和场景 - AWS 会运行另一个计划事件并在上一个执行完成之前执行 lambda 吗?即重叠?
如果是的话;有没有办法将计划的事件配置为不“重叠”?
我对此做了一些初步研究并发现了这篇文章: https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html
看起来可以在函数级别设置并发限制?这是实现不重叠的预定 lambda 执行的方法吗?即设置函数的并发限制为1?
我正在使用 AWS(一种呼叫中心,使用 Twilio)参与一个无服务器项目。我之前还建过另外 2-3 个小项目。不过,我现在正在使用无服务器框架。到目前为止我还没用过。所以我在 AWS 和 Serverless 方面都是新手。
我以某种方式关注下一个链接: https://serverless.com/blog/flask-python-rest-api-serverless-lambda-dynamodb/
所以我基本上使用这个Python依赖项:Flask、Twilio、boto3(用于AWS)。请参阅下面的requirements.txt。我卸载了一些软件包,但是可能有一些我可以清理的软件包:
boto3==1.9.84
botocore==1.12.84
certifi==2018.11.29
chardet==3.0.4
Click==7.0
docutils==0.14
Flask==1.0.2
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10
jmespath==0.9.3
lazy-object-proxy==1.3.1
MarkupSafe==1.1.0
pipdeptree==0.13.2
PyJWT==1.7.1
PySocks==1.6.8
python-dateutil==2.7.5
pytz==2018.9
requests==2.21.0
s3transfer==0.1.13
six==1.12.0
twilio==6.23.1
urllib3==1.24.1
Run Code Online (Sandbox Code Playgroud)
使用无服务器框架,我能够毫无问题地部署(无服务器部署)项目,直到安装了 boto3。但是,现在我超出了允许的依赖项大小并收到此错误:
An error occurred: AppLambdaFunction - Unzipped size must be smaller than 262144000 bytes (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Run Code Online (Sandbox Code Playgroud)
我被困在这个问题上。我想我可以用旧的方式解决它,而不使用无服务器框架(直接在AWS中),但我非常希望解决这个问题。
是否可以部分安装boto3?我的意思是,一种只安装我需要的模块的方法。
还有其他想法吗?
提前致谢。
python pip amazon-web-services aws-lambda serverless-framework
我正在运行多个 Greengrass 核心,它们将数据发送到 MQTT 流。我在 GGC 上部署了 Lambda,读取传入的 SerialPort 并将其推送到 Stream。
但现在我想检查哪个设备正在发送数据 - 我尝试用这个来检查主机名
import socket
host = socket.gethostname()
Run Code Online (Sandbox Code Playgroud)
但核心发送值“沙箱”,所以我认为 lambda 无权读取主机名。
SDK没有这方面的文档: https://github.com/aws/aws-greengrass-core-sdk-python
我想将数据推送到 mqqt 流,如下所示:
response = client.publish(
topic='customer/events/{DEVICE-ID or UID or ARN}/',
payload=jsonData.encode())
Run Code Online (Sandbox Code Playgroud) 我有一个下载文件的 AWS Lambda 函数。我已经读到我可以写入的唯一目录是/tmp目录,但是我仍然收到此错误。
[ERROR] OSError: [Errno 30] Read-only file system: '/home/sbx_user1051'
Traceback (most recent call last):
File "/var/lang/lib/python3.8/imp.py", line 234, in load_module
return load_source(name, filename, file)
File "/var/lang/lib/python3.8/imp.py", line 171, in load_source
module = _load(spec)
File "<frozen importlib._bootstrap>", line 702, in _load
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/var/task/lambda_function.py", line 9, in <module>
from kaggle.api.kaggle_api_extended import KaggleApi
File "/var/task/kaggle/__init__.py", line 19, …Run Code Online (Sandbox Code Playgroud) 我正在为我的移动游戏计划一个概念,并使用 AWS Lambda(或相同的 Firebase 函数)。机器人不能永久地向我的 Lambda 函数发出请求并仅通过向我的终端发送垃圾邮件来产生巨额成本吗?
亚马逊/谷歌是否有任何保护措施,或者你们将如何保护您的端点免受此类攻击?