从Terraform导出随机生成的字符串

时间:2018-01-10 21:20:32

标签: chef terraform

上下文

我正在进行两阶段部署

  1. 使用terraform

  2. 创建EC2实例和RDS实例
  3. 使用厨师配置EC2实例

  4. 问题:

    假设我使用Terraform在AWS中创建RDS实例,如下所示:

    void permute_next(vector<int>& v)
    {
      if (v.size() < 2)
        return;
    
      if (v.size() == 2)
      { 
        int tmp = v[0];
        v[0] = v[1];
        v[1] = tmp;
        return;
      }
    
      // Step 1: find first ascending-ordered pair from right to left
      int i = v.size()-2;
      while(i>=0)
      { 
        if (v[i] < v[i+1])
          break;
        i--;
      }
      if (i<0) // vector fully sorted in descending order (last permutation)
      {
        //resort in ascending order and return
        sort(v.begin(), v.end());
        return;
      }
    
      // Step 2: swap v[i] with next higher element of remaining elements
      int pos = i+1;
      int val = v[pos];
      for(int k=i+2; k<v.size(); k++)
        if(v[k] < val && v[k] > v[i])
        {
          pos = k;
          val = v[k];
        }
      v[pos] = v[i];
      v[i] = val;
    
      // Step 3: sort remaining elements from i+1 ... end
      sort(v.begin()+i+1, v.end());
    }
    

    我将如何:

    • 随机生成密码字符串(即上面使用的方法) 适当)

    • &#34;通行证&#34;以安全的方式将密码字符串转换为EC2实例上的db.properties文件(目前我将db.properties文件作为模板在厨师食谱中管理)

    • 以纯文本形式输入密码(对于手动数据库 故障排除和配置)。

1 个答案:

答案 0 :(得分:0)

天真的选择是在Terraform内的Chef配置器上使用attributes_json参数。这会导致密码在一些不幸的地方以明文形式存储,但最好将其存储在SSM Paramstore或S3之类的东西中,然后让Chef使用实例的IAM凭据来检索它。另外请记住,您可能不希望为该实例提供root帐户/密码,您希望为具有较低权限的应用程序创建用户。