首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许云监视调用无服务器的lambda

允许云监视调用无服务器的lambda
EN

Stack Overflow用户
提问于 2019-03-06 15:15:32
回答 1查看 565关注 0票数 1

我的serverless.yml中有一个lambda函数。看起来是这样的:

代码语言:javascript
复制
functions:
  clean:
    handler: app.run
    events:
      - schedule: rate(2 hours)

它工作得很好,每隔两个小时就会给兰达打一次电话。当我在AWS控制台中添加新的rule并将新创建的lambda设置为目标时,它也可以工作。AWS和Serverless框架都在后台策略上创建了events.amazonaws.com服务可以invoke这个特定函数的策略。这项政策似乎是这样的:

代码语言:javascript
复制
{
         "Sid":"AWSEvents_rule_name_test",
         "Effect":"Allow",
         "Principal":{
            "Service":"events.amazonaws.com"
         },
         "Action":"lambda:InvokeFunction",
         "Resource":"arn:aws:lambda:eu-central-1:<account_id>:function:<lambda_name>",
         "Condition":{
            "ArnLike":{
               "AWS:SourceArn":"arn:aws:events:eu-central-1:<account_id>:rule/<rule_name>"
            }
         }
      }

我想通过编程来定义rule,而不需要维护这些权限。我所做的是创建规则,然后创建类似于docs https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/RunLambdaSchedule.html中描述的目标。如果没有许可步骤,它就无法工作。我希望在serverless.yml级别上具有通用权限,允许任何现有或尚未存在的规则调用lambda (因此我只关心规则和目标)。我指的是:“授予云监视权限以调用任何在我的帐户上定义的规则的lambda函数”。这将大大提高我的功能的可用性。

是否可以定义与AWS控制台(上面的代码)通常生成的策略相同的策略,但在serverless.yml文件中定义更多的通用策略?

更新:我最后尝试了下面的例子。它应该创建“通用”规则:

代码语言:javascript
复制
functions:
  clean:
    handler: app.run
    events:
      - schedule: rate(2 hours)
resources:
  Resources:
    cleanLambdaPermission:
      DependsOn:
        # This is how serverless converts function name. Has to be update accordingly when lambda gets renamed.
        - cleanLambdaFunction
      Type: AWS::Lambda::Permission
      Properties:
        FunctionName:
          "Fn::GetAtt": [ cleanLambdaFunction, Arn ]
        Action: "lambda:InvokeFunction"
        Principal: "events.amazonaws.com"
        SourceArn: "arn:aws:events:eu-central-1:<account_id>:rule"    

虽然它出现了,但是它没有工作,我的lambda从未被编程创建的规则调用,直到,我添加了显式SourceArn,它将一个规则完全映射到一个特定的函数。我还通过三个步骤进行了编程: 1.创建规则。2.制定目标。3.建立许可。

为了删除,我需要以相反的顺序进行。我没有发现(不允许通配符)是bug还是故意行为。

EN

回答 1

Stack Overflow用户

发布于 2019-03-07 01:28:48

是的,你可以使用外卡“*”来使它成为通用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55026399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档