我有一个与我的云端分发相关联的 Lambda 函数。
我想在这个 egde@lambda 函数中访问一些 S3 Bucket 对象。我没有找到一种方法来做到这一点,也不知道什么是最好的方法来做到这一点并且有最小的延迟。
我不想使用对存储桶的 http 调用来访问存储桶对象,因为它会给云端响应带来一些延迟。
任何人都知道如何在边缘 lambda 函数中访问与我的云端分布相关的 S3 存储桶?
非常感谢。
我有一个与我的云端分发相关联的 Lambda 函数。
我想在这个 egde@lambda 函数中访问一些 S3 Bucket 对象。我没有找到一种方法来做到这一点,也不知道什么是最好的方法来做到这一点并且有最小的延迟。
我不想使用对存储桶的 http 调用来访问存储桶对象,因为它会给云端响应带来一些延迟。
任何人都知道如何在边缘 lambda 函数中访问与我的云端分布相关的 S3 存储桶?
非常感谢。
您需要向与您的 lambda 关联的 IAM 角色授予权限。来自AWS 文档:
每个 Lambda 函数都有一个与之关联的 IAM 角色(执行角色)。您在创建 Lambda 函数时指定 IAM 角色。您授予此角色的权限决定了 AWS Lambda 在担任该角色时可以执行的操作。
要从 lambda 读取和写入 S3 存储桶,您需要将 IAM 策略附加到与您的 lambda 关联的 IAM 角色。来自AWS 文档:
您可以通过创建策略并将它们附加到 IAM 身份(用户、用户组或角色)或 AWS 资源来管理 AWS 中的访问。策略是 AWS 中的一个对象,当与身份或资源相关联时,它定义了它们的权限。当委托人实体(用户或角色)提出请求时,AWS 会评估这些策略。策略中的权限决定了请求是被允许还是被拒绝。大多数策略作为 JSON 文档存储在 AWS 中。AWS 支持六种类型的策略:基于身份的策略、基于资源的策略、权限边界、组织 SCP、ACL 和会话策略。
使用此 IAM 策略授予对与您的 lambda 关联的 IAM 角色的访问权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account>:role/service-role/LAMBDA_ROLE_NAME"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::<bucket-name>",
"arn:aws:s3:::<bucket-name>/*"
]
}
]
}
OBS:<account>
和<bucket-name>
需要替换为正确的值。
之后,以下代码应该可以工作:
import aws from 'aws-sdk'
export default (event, context, callback) => {
const s3 = new aws.S3()
s3.getObject({
Bucket: 'name-of-bucket',
Key: 'my-key'
}, (err, data) => {
if (err) {
callback(err)
return
}
const objectData = data.Body.toString('utf-8')
console.log(objectData)
})
}