如何收集grep并在aws配置集中使用它

时间:2017-10-13 09:51:44

标签: amazon-web-services grep yaml amazon-cloudformation

在我的aws Cloud Formation cfn configset中,我有一个命令,可以将环境密钥设置为apache所属的用户组的名称,因为它可能是apache或www-data,具体取决于发行版。

这样的事情:

Metadata:
  AWS::CloudFormation::Init:
    configSets:
      joomla:
        - "set_permissions"
        - "and_some_more..."

    configure_cfn:
      files:
        /etc/cfn/hooks.d/cfn-auto-reloader.conf:
          content: !Sub |
            [cfn-auto-reloader-hook]
            triggers=post.update
            path=Resources.EC2.Metadata.AWS::CloudFormation::Init
            action=/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource EC2 --configsets joomla --region ${AWS::Region}
          mode: "000400"
          owner: root
          group: root

.....

    set_permissions:  
      commands:
        01_01_get_WebServerGroup:
          env:
          #webserver group might be apache or www-data depending on the distro
            WebServerGp: 
              command: "ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'"

但是,当我启动此堆栈时,configsets进程暂时停止,并且我在cfn_init.log中出现如下错误:

  

文件   “/usr/lib/python2.7/dist-packages/cfnbootstrap/command_tool.py”,行   80,申请       引发ToolError(u“%s未指定'command'属性,这是必需的”%name)ToolError:01_01_get_WebServerGroup   不指定'command'属性,这是必需的

这是在configset命令中捕获和使用grep结果的首选方法吗?有没有更好的办法?我该怎么做才能解决cfn_init.log中抛出的错误?

好吧,我想我可以创建参数和映射元素以在启动时捕获发行版类型,然后相应地设置webserver组,但我真的想了解如何将env:key设置为来自cli的响应。 / p>

1 个答案:

答案 0 :(得分:1)

您的代码问题是这一行WebServerGp

command必须与env相同,commands名称下,01_01_get_WebServerGroup。所以,它必须是这样的:

commands:
    01_01_get_WebServerGroup:
      env: ..
      command: ..

如果要使用grep的结果,可以将它们放在变量上并稍后使用。 您可以使用command\n行下指定多个命令来执行命令。

请检查以下代码。

command: "result=(ps ef | grep ...)\n echo $result\n ..."

如果你有很长的命令,你可以使用Fn::Join作为command的值。