如何在CF模板中循环使用逗号分隔的值

时间:2019-05-22 05:50:01

标签: amazon-web-services amazon-dynamodb amazon-cloudformation

我应该将一个区域中的所有DDB表备份到另一区域。 我计划通过部署一个lambda来做到这一点,该lambda具有执行备份工作的逻辑,并且lambda具有一个CloudWatch事件触发器,该触发器基于cron表达式每24小时运行一次。

问题是我无法将表列表传递到CF模板并部署我的lambda。 CF错误退出。

现在,我打算将服务的表名作为逗号分隔的字符串而不是列表来传递,然后使用Fn::Split拆分名称然后触发。

TriggerDynamoDbBackupEventRule:
Type: 'AWS::Events::Rule'
Properties:
  Description : "cron expression to call dynamodb backup lambda"
  ScheduleExpression: !Join
    - ''
    - - cron(
      - !Ref ScheduleCronExpression
      - )
  Targets:
    - Arn: !GetAtt
        - LambdaDynamoDbBackup
        - Arn
      Input: !Split ["," , !Ref TableName]   
      Id: !Join ["-", [!Ref ApplicationName, "TriggerDynamoDbBackupEventRule"]]
  State: ENABLED
InvokeLambdaPermissionForTriggerDynamoDbBackupEventRule:
Type: 'AWS::Lambda::Permission'
Properties:
  Action: 'lambda:InvokeFunction'
  Principal: events.amazonaws.com
  FunctionName: !GetAtt
    - LambdaDynamoDbBackup
    - Arn
  SourceArn: !GetAtt
    - TriggerDynamoDbBackupEventRule
    - Arn

假设:

我有5个表,进行拆分时,我将得到1个表,Input,然后将触发规则。

但是问题是:

如何传递其余4个表名?我的意思是我必须运行某种循环,以便每次它选择表并运行规则。

无法弄清楚:

  1. 如果我尝试的方法正确与否。
  2. 如果正确,那么该如何做循环播放的东西?
  3. 如果没有,可以采取什么替代措施?

0 个答案:

没有答案