如何创建仅限于一个TargetGroup的权限?

问题描述

如何创建仅限于一个TargetGroup的权限(授予调用某个lambda函数的权限)?

这听起来很简单,但问题有两个不同的并发症:

  • 在下面的示例中没有SourceArn: !Ref MyTargetGroup部分,我假设该权限将允许所有TargetGroup调用MyLambda,而不仅仅是我想要的(正确?)。
  • 我需要将DependsOn: LambdaInvokePermission保留在TargetGroup上,因为否则从头开始部署时启动有时会失败(如果TargetGroup恰好是在权限之前创建的,则会发生这种情况,因为这时TargetGroup没有权限调用lambda,整个启动将失败。
  • 通过在下面的示例中添加SourceArn: !Ref MyTargetGroup,我引入了循环依赖,这是不可行的。
  MyTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    DependsOn: LambdaInvokePermission
    Properties:
      HealthCheckEnabled: false
      targettype: lambda
      Targets:
        - Id: !GetAtt MyLambda.Arn

  LambdaInvokePermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !GetAtt MyLambda.Arn
      Action: lambda:InvokeFunction
      Principal: elasticloadbalancing.amazonaws.com
      SourceArn: !Ref MyTargetGroup

我还尝试给TargetGroup指定一个明确的名称,然后静态构造SourceArn(以避免模板中出现明确的循环依赖关系),但是由于TargetGroups always get some random string appended to the end of their ARN,它不起作用。

有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)