首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CloudFormation中的数学运算

CloudFormation中的数学运算
EN

Stack Overflow用户
提问于 2016-01-09 20:35:21
回答 2查看 8.5K关注 0票数 10

是否可以在Cloudformation json模板中执行某种数学运算?

在我遇到的两个领域中,这将是有用的: 1.设置IOPS,它需要是磁盘大小的比率。2.设置RDS空闲存储空间的云监控告警。将其设置为磁盘大小的%会很有用。

EN

回答 2

Stack Overflow用户

发布于 2017-01-02 14:06:44

有两种常规解决方案可用于在Intrinsic Functions不支持的CloudFormation模板中执行自定义逻辑,例如数学运算:

1.自定义资源

编写一个Custom Resource来执行数学运算,将输入作为属性传递,输出作为值传递。下面是一个自包含的工作示例,它将Result: 13作为堆栈输出返回:

代码语言:javascript
复制
Resources:
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal: {Service: [lambda.amazonaws.com]}
          Action: ['sts:AssumeRole']
      Path: "/"
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
  AddFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        ZipFile: !Sub |
          var response = require('cfn-response');
          exports.handler = function(event, context) {
            var result = parseInt(event.ResourceProperties.Op1) + parseInt(event.ResourceProperties.Op2);
            response.send(event, context, response.SUCCESS, {Value: result});
          };
      Runtime: nodejs
  AddTest:
    Type: Custom::Add
    Properties:
      ServiceToken: !GetAtt AddFunction.Arn
      Op1: 8
      Op2: 5
Outputs:
  Result:
    Description: Result
    Value: !GetAtt AddTest.Value

2.模板预处理器

使用您选择的全功能模板语言/平台编写“源”模板,以生成有效的CloudFormation-template作为输出。您可以使用像troposphere这样功能齐全的特定于CloudFormation的库,但是编写一个简单的预处理器层来满足您的用例和编程语言/库的偏好也是非常简单的。

我现在选择的是embedded Ruby (ERB),主要是因为我已经熟悉它了。下面是一个使用嵌入式Ruby语法执行数学运算的示例template.yml.erb文件,该运算将Result: 13作为堆栈输出返回:

代码语言:javascript
复制
Resources:
  # CloudFormation stacks require at least one resource
  Dummy:
    Type: AWS::SNS::Topic
Outputs:
  Result:
    Description: Result
    Value: <%= 8 + 5 %>

要处理该模板,请运行cat template.yml.erb | ruby -rerb -e "puts ERB.new(ARGF.read, nil, '-').result" > template.yml,这将向template.yml写入以下支持CloudFormation的模板

代码语言:javascript
复制
Resources:
  # CloudFormation stacks require at least one resource
  Dummy:
    Type: AWS::SNS::Topic
Outputs:
  Result:
    Description: Result
    Value: 13
票数 14
EN

Stack Overflow用户

发布于 2016-01-12 04:09:58

我使用预处理系统取得了巨大的成功。通常,我会查看模板和变量数据,并根据这些数据做出决策。

这里有一篇关于这个问题的博客文章:

http://krogebry.blogspot.com/2014/12/cloudformation-discovery-and.html

在撰写本文时,我们遇到了许多VPC和非常复杂的帐户管理系统的问题。你所说的看起来可能是类似的思路,因为你有一些复杂的(和整洁的!)可能需要类似方法的需求。此外,编译这样的堆栈还有一个额外的好处,那就是能够根据您的用例强制执行某些规则(例如,在开发中没有0.0.0.0:22或没有IOPS>x阈值)。

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

https://stackoverflow.com/questions/34693526

复制
相关文章

相似问题

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