我创建了一个python(使用boto3库)脚本来创建一个触发我的lambda函数的s3触发器。我首先必须在lambda上添加一个权限,该权限赋予s3 lambda:InvokeFunction权限。
response = client.add_permission(
FunctionName='string',
StatementId='string',
Action='string',
Principal='string',
SourceArn='string')
我的问题是关于StatementId。它说要给出一个独特的ID。如果我再次尝试再次运行,则会抱怨此ID已存在。
在Amazon Services中创建此StatementId的位置是什么?我希望能够使用boto(或cli)来删除和重新创建(或更新)它,以便我的脚本是幂等的。
答案 0 :(得分:1)
add_permission
方法实际上是在与Lambda函数关联的IAM策略中添加语句。要查看整个策略,请使用get_policy
方法。这将作为JSON文档返回整个策略,包括您通过add_permission
添加的任何单个语句。要删除单个语句,请使用remove_permission
,其中包含函数的名称和要删除的语句的statement_id
,这就是为什么statement_id必须是唯一的。
答案 1 :(得分:0)
如果在使用Terraform时遇到这种情况,可以完全省略statement_id,也可以指定一个statement_id_prefix,TF会生成唯一的Id。
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission