我正在尝试使用 csv writer 以写入模式打开 csv 文件,它可以在本地工作文件,但是当我尝试在 aws lambda 中执行相同操作时,它显示只读文件系统。我确信我正在以写入二进制模式打开。
下面是参考代码。
f = csv.writer(open('abc.csv','wb+'))
f.writerow(['botName','botVersion','utteranceString','count','distinctUsers','firstUtteredDate','lastUtteredDate','status'])
Run Code Online (Sandbox Code Playgroud)
以下是我收到的错误:
[Errno 30] Read-only file system: 'abc.csv' this is exception
Run Code Online (Sandbox Code Playgroud)
通过在文件路径中添加 /tmp/ 可以修复上面的编辑 1 错误,但我无法将 /tmp 中创建的 csv 文件移动到我使用下面代码的 s3 存储桶
s3_u.meta.client.upload_file( '/tmp/'+output_filename, 'codepipelinedev',k)
Run Code Online (Sandbox Code Playgroud)
这会在 s3 存储桶中生成空文件。如果我使用不存在的文件进行测试,它会抛出错误。当我在本地尝试相同的操作时,会使用文件中的预期数据创建 csv 文件。但在传输这些文件时,我在 S3 存储桶中收到空文件。
感谢您的帮助,提前致谢
我有两个 AWS Lambda 函数,函数 A 和函数 B,
这两个 Lambda 函数都位于无 VPC 中,因为它们都不需要任何 VPC 资源。
这两个 Lambda 函数都附加了 LambdaFull 访问角色。
我能够从本地调用并执行 Lambda B,
但无法从 Lambda A 调用或执行 Lambda B。
我需要同步行为 -
line 1 ..
line 2, invoke lambda, get a response,
line 3 to use the response from line 2
Run Code Online (Sandbox Code Playgroud)
以下是本地代码和 Lambda 代码 -
1. 本地 -
let AWS = require('aws-sdk');
let client = new AWS.Lambda({
region: "us-east-1"
});
let payload = {
"param1": "ABC",
"param2": 123
};
payload = JSON.stringify(payload); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个基于 API 网关/Lambda 的项目。请求流程如下:
sts.assumeRole()并成功生成accessKeyIdandsecretAccessKeyaccessKeyId/secretAccessKey尝试访问 S3 存储桶中的项目除了最后一步之外,该过程的每一步都正常工作(通过控制台日志确认)。当我尝试使用生成的凭据时,收到以下错误消息:
{
"message": "The AWS Access Key Id you provided does not exist in our records.",
"code": "InvalidAccessKeyId",
"region": null,
"time": "2019-07-19T22:05:05.817Z",
"requestId": "...",
"extendedRequestId": "...",
"statusCode": 403,
"retryable": false,
"retryDelay": 68.28400384749038
}
Run Code Online (Sandbox Code Playgroud)
我知道这强烈暗示 STS 有一些我不明白的东西,但我一直无法弄清楚是什么。(例如,当授权者 lambda 完成运行时,AWS 是否会取消分配生成的角色?)
为什么 AWS 会拒绝新生成的凭证对并报告此错误消息?
我设置了一个 Athena 数据库,指向包含 ALB 日志的 S3 存储桶,并且一切正常。我按名为 的列对表进行分区datetime,其想法是它的格式为YYYY/MM/DD.
我可以使用以下命令通过 Athena 控制台手动创建分区:
ALTER TABLE alb_logs ADD IF NOT EXISTS PARTITION (datetime='2019-08-01') LOCATION 's3://mybucket/AWSLogs/myaccountid/elasticloadbalancing/eu-west-1/2019/08/01/'
我创建了一个 lambda 每天运行以创建一个新分区,但这似乎不起作用。我使用 boto3 python 客户端并执行以下命令:
result = athena.start_query_execution(
QueryString = "ALTER TABLE alb_logs ADD IF NOT EXISTS PARTITION (datetime='2019-08-01') LOCATION 's3://mybucket/AWSLogs/myaccountid/elasticloadbalancing/eu-west-1/2019/08/01/'",
QueryExecutionContext = {
'Database': 'web'
},
ResultConfiguration = {
"OutputLocation" : "s3://aws-athena-query-results-093305704519-eu-west-1/Unsaved/"
}
)
Run Code Online (Sandbox Code Playgroud)
这似乎成功运行,没有任何错误,查询执行甚至返回了 QueryExecutionId 。但是,如果我SHOW PARTITIONS web.alb_logs;通过 Athena 控制台运行,它还没有创建分区。
我有一种感觉,这可能取决于权限,但是我已向 lambda 执行角色授予对 S3 上所有资源的完全权限以及对 Athena 上所有资源的完全权限,但它似乎仍然不起作用。
我正在创建一个 aws lambda 函数,它下载 s3 文件并根据每次收到的事件对其进行处理。但是我不想每次都从 s3 下载 s3 文件。谁能建议我如何只下载一次 s3 文件并处理传入事件,而不必每次都下载 s3 文件?
目前,即使我将代码从 lambdafunctionhandler 类的构造函数中的 s3 下载,它每次都会下载
如果您有任何代码参考或示例,请使用java。提前致谢
我正在使用 Boto3 检索并返回小型 dynamoDB 表中的所有数据。我的目标是从输出中删除 attributeTypes。
以下是我的输出:
{"Items": [{"PresidentialCandidate_ID": {"S": "Trump"}, "Vote": {"N": "47"}}, {"PresidentialCandidate_ID": {"S": "Stein"}, "Vote": {"N": "16"}}, {"PresidentialCandidate_ID": {"S": "Dwayne"}, "Vote": {"N": "1"}}, {"PresidentialCandidate_ID": {"S": "none"}, "Vote": {"N": "11"}}, {"PresidentialCandidate_ID": {"S": "Johnson"}, "Vote": {"N": "13"}}, {"PresidentialCandidate_ID": {"S": "Clinton"}, "Vote": {"N": "22"}}], "Count": 6, "ScannedCount": 6}
Run Code Online (Sandbox Code Playgroud)
我想要的输出:
{"Items":[{"PresidentialCandidate_ID":"Trump","Vote":47},{"PresidentialCandidate_ID":"Stein","Vote":16},{"PresidentialCandidate_ID":"Dwayne","Vote":1},{"PresidentialCandidate_ID":"none","Vote":11},{"PresidentialCandidate_ID":"Johnson","Vote":13},{"PresidentialCandidate_ID":"Clinton","Vote":22}],"Count":6,"ScannedCount":6}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
{"Items": [{"PresidentialCandidate_ID": {"S": "Trump"}, "Vote": {"N": "47"}}, {"PresidentialCandidate_ID": {"S": "Stein"}, "Vote": {"N": "16"}}, {"PresidentialCandidate_ID": {"S": "Dwayne"}, "Vote": {"N": "1"}}, {"PresidentialCandidate_ID": {"S": "none"}, "Vote": {"N": "11"}}, {"PresidentialCandidate_ID": {"S": "Johnson"}, "Vote": …Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用无服务器框架来创建和管理 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) 我对云空间相当陌生。作为我们当前项目的一部分,我们正在尝试在 Amazon S3 存储桶中创建数据湖。将会有另一个 S3 层,其中包含前一层发生的 CDC。架构团队建议使用 Talend 或 Streamsets。是否有其他方法可以将 CDC 从 S3 实施到另一个 S3 存储桶?
我目前这样做是为了从 lambda 函数启动 EC2 按需实例:
ec2 = boto3.resource('ec2', region_name='us-east-2')
instances = ec2.create_instances(
ImageId='ami-0c709cc4edbf9a8c0',
MinCount=1,
MaxCount=1,
KeyName="mykey",
InstanceType="m4.large",
IamInstanceProfile={'Arn': 'arn:aws:iam::231412431243:instance-profile/myimage'},
UserData=user_data_script
Run Code Online (Sandbox Code Playgroud)
我可以在此处添加一个属性来将其作为现货实例运行吗?
我无法区分私有子网和公共子网。
\n我创建了一个vpc并连接了子网,igw也连接到了路由表。那么,该网络不是公共子网吗?
\n正如我所料,公网似乎要与外界沟通,但根本没有沟通。
\n可以从 aws lambda 到 RDS 的连接 (vpc),但将文件上传到 s3 以及向 slack 发送消息都会发生超时。
\n我看过很多关于使用 vpc 端点的帖子,但是当我尝试设置它时
\n\n\n警告
\n当您使用终端节点时,\n受影响子网中的实例用于访问同一区域中的 AWS 服务的源 IP 地址将是私有 IP 地址,而不是公有 IP 地址。\n从受影响子网到 AWS 服务的现有连接\n使用公共 IP 地址的可能会被丢弃。确保在创建或修改端点时运行关键任务。
\n
那么现在ec2不是已经和s3断开了吗?那么服务有问题,无法设置。
\n在lambda vpc配置中,即使打开安全组的所有入站,也不会建立连接。
\n难道只有设置NAT的方法吗?
\nNAT 希望避免它,因为它的成本。
\n我的目标是与 VPC 上的 lambda 中的 rds、s3、slack 进行通信。
\namazon-s3 amazon-web-services amazon-rds amazon-vpc aws-lambda
aws-lambda ×10
amazon-s3 ×4
boto3 ×2
amazon-ec2 ×1
amazon-iam ×1
amazon-rds ×1
amazon-vpc ×1
aws-sts ×1
boto ×1
cdc ×1
java ×1
node.js ×1
python ×1
serverless ×1