我正试图部署一个AWS Lambda函数,当一个AVRO文件被写入现有的S3 bucket时,该函数会被触发。
我的 serverless.yml
配置如下。
service: braze-lambdas
provider:
name: aws
runtime: python3.7
region: us-west-1
role: arn:aws:iam::<account_id>:role/<role_name>
stage: dev
deploymentBucket:
name: serverless-framework-dev-us-west-1
serverSideEncryption: AES256
functions:
hello:
handler: handler.hello
events:
- s3:
bucket: <company>-dev-ec2-us-west-2
existing: true
events: s3:ObjectCreated:*
rules:
- prefix: gaurav/lambdas/123/
- suffix: .avro
当我运行 serverless deploy
我得到以下错误信息。
ServerlessError: An error occurred: IamRoleCustomResourcesLambdaExecution - API: iam:CreateRole User: arn:aws:sts::<account_id>:assumed-role/serverless-framework-dev/jenkins_braze_lambdas_deploy is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH.
我看到有些人提到Serverless需要... ... iam:CreateRole
因为CloudFormation的工作方式,但有谁能确认,如果我想使用云计算,这是否是唯一的解决方案?existing: true
? 除了使用旧的Serverless插件外,还有没有其他的方法来解决这个问题,在框架添加支持之前,使用的是旧的Serverless插件。existing: true
配置?
另外,什么是 1M5QQI6P2ZYUH
在 arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH
? 是一个随机的标识符吗?这是否意味着每次我尝试部署Lambda函数时,Serverless会尝试创建一个新的IAM角色?
对于运行 sls deploy
,我建议你使用具有管理员权限的角色用户政策。
如果你因为你的InfoSec团队或类似的原因而受到限制,那么我建议你让你的InfoSec团队看看 "AWS IAM Permission Requirements for Serverless Framework Deploy "的文档。这里有一个讨论它的好链接。https:/github.comserverlessserverlessissues1439。. 至少,他们应该增加 iam:CreateRole
就可以让你今天解封了。
现在我将解决你的个别问题。
有谁能确认,如果这是唯一的解决方案 如果我想使用。
existing: true
苹果和橘子。你的S3配置与你的错误信息无关。iam:CreateRole
必须添加到策略中,不管是谁在做什么。sls deploy
.
还有,什么是
1M5QQI6P2ZYUH
在arn:aws:iam::<account_id>:role/braze-lambdas-dev-IamRoleCustomResourcesLambdaExec-1M5QQI6P2ZYUH
? 是一个随机的标识符吗?这是否意味着每次我尝试部署函数时,serverless会尝试创建一个新的角色?
sls
不会每次都创建一个新角色。这个唯一的ID会被缓存,并在更新现有的堆栈时重复使用。