Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 Can';t使用现有S3存储桶配置lambda和SNS_Amazon S3_Aws Lambda_Amazon Cloudformation_Amazon Sns - Fatal编程技术网

Amazon s3 Can';t使用现有S3存储桶配置lambda和SNS

Amazon s3 Can';t使用现有S3存储桶配置lambda和SNS,amazon-s3,aws-lambda,amazon-cloudformation,amazon-sns,Amazon S3,Aws Lambda,Amazon Cloudformation,Amazon Sns,我有一个现有的S3存储桶(它有一些lambda事件和SNS配置,这是我以前的同事已经创建的)。我想添加一个新的lambda事件,它将由另一个前缀中的PutObject触发 我一直在为其他现有的S3 bucket做这件事,没有任何问题。然而,现在有了这个S3 bucket,无论我尝试创建一个lambda(根据我正在阅读的一些AWS文档,在lambda控制台上这样做都会自动附加S3调用函数的策略。但是我也只是尝试手动添加S3调用lambda的权限)或SNS(我编辑了SNS策略以允许S3 bucket

我有一个现有的S3存储桶(它有一些lambda事件和SNS配置,这是我以前的同事已经创建的)。我想添加一个新的lambda事件,它将由另一个前缀中的PutObject触发

我一直在为其他现有的S3 bucket做这件事,没有任何问题。然而,现在有了这个S3 bucket,无论我尝试创建一个lambda(根据我正在阅读的一些AWS文档,在lambda控制台上这样做都会自动附加S3调用函数的策略。但是我也只是尝试手动添加S3调用lambda的权限)或SNS(我编辑了SNS策略以允许S3 bucket发送消息和接收消息),我得到了以下错误:

An error occurred when creating the trigger: Unable to validate the following destination configurations (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: KKBWYJGTVK8X8AYZ; S3 Extended Request ID: ZF3NOIqw8VcRYX6bohbYp7d0a+opDuXOcFRrn1KBn3vBVBIPuAQ/s7V+3vptIue1uWu6muIWBhY=; Proxy: null)
我已经遵循了我能找到的所有AWS链接,我甚至尝试遵循S3上现有lambda事件触发器的所有设置(前缀除外).然而,我仍然没有任何解决方案。我能想到的唯一区别可能是,背后有一个CloudFormation来链接所有现有的应用程序。然而,我认为s3 Bucket并不涉及

你能给我一些建议吗?非常感谢


更新:我刚刚测试了在另一个bucket上做同样的事情-使用相同的IAM角色,它可以工作。因此,我认为问题与bucket有关。

您能否与我们分享您的策略或任何以前用于达到您现在位置的Infra代码,对于任何人来说都很难找出这可能是什么原因。我将ld当然也建议通过AWS CloudFormation在AWS中设置资源,也许这是一个好的开始指南:

请比较以下定义Lambda函数权限的IAM策略

所需的权限包括:

  • 从源S3 bucket获取对象
  • 将调整大小的对象放入目标S3存储桶
  • 与CloudWatch日志相关的权限
{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“日志:PutLogEvents”,
“日志:CreateLogGroup”,
“日志:CreateLogStream”
],
“资源”:“arn:aws:logs:**”
},
{
“效果”:“允许”,
“行动”:[
“s3:GetObject”
],
“资源”:“arn:aws:s3:::mybucket/*”
},
{
“效果”:“允许”,
“行动”:[
“s3:PutObject”
],
“资源”:“arn:aws:s3:::mybucket已调整大小/*”
}
]
您还需要为Lambda配置执行角色

创建给函数访问AWS资源的权限的执行角色

创建执行角色

  • 在IAM控制台中打开角色页面
  • 选择创建角色
  • 创建具有以下属性的角色
  • 受信任的实体–AWS Lambda
  • 权限–awslambdas3策略
  • 角色名称–lambda-s3-Role

上述创建的策略具有该函数管理Amazon S3中的对象和将日志写入CloudWatch日志所需的权限。

Hi@Bruno,感谢您的回复。我担任的IAM角色有很多附加的策略,因此可能不容易在此处复制。我检查过它是否具有资源*的CloudWatch日志权限。此外,此IAM角色在所有S3存储桶上都有S3FullAccess,它与lambda.amazonaws.com有信任关系。我在帖子中提到的每个服务都在同一个帐户下。而且,完全相同的角色以前能够在同一S3存储桶上使用lambda创建S3事件触发器。从那时起,我没有更改IAM角色策略或信任实体的任何内容。并且r问题,如果我想使用CloudFormation,我可以在现有的S3存储桶上这样做吗?就CloudFormation而言,我已经有了一个CloudFormation,我可以在模板中添加一些东西吗?嗨,Peterll,我想如果你能以某种方式与我共享你的infra代码,它仍然会很有用。也许是指向临时存储库的链接。是的,你可以添加existing资源到CloudFormation模板,请参考: