首页 > 解决方案 > 如何重构 Ruby 块并将重复调用提取到方法中?

问题描述

cfndsl中,您可以像这样创建 AWS CloudFormation 模板:

CloudFormation do
  EC2_Instance(:Example) do
    ImageId 'ami-12345678'
    InstanceType 't1.micro'
  end
end

现实世界的模板通常要大得多,但这不是重点。

假设我有几十CloudFormation个共享相同的块EC2_Instance,每个块都有一个可能不同的ImageIdand InstanceType

如何将这种重复模式提取到方法中(例如ec2_instance),以便我可以将CloudFormation块重构为如下内容:

def ec2_instance(ami, type)
   # ???
end

CloudFormation do
  ec2_instance('ami-12345678', 't1.micro')
end

CloudFormation do
  ec2_instance('ami-90111213', 't2.small')
end

标签: rubyaws-lambdaclosuresamazon-cloudformation

解决方案


您可以重复使用相同的代码,但只需将 ImageId 和 InstanceType 替换为变量:

def ec2_instance(ami, type)
  EC2_Instance(:Example) do
    ImageId ami
    InstanceType type
  end
end

推荐阅读