IaaS/퍼블릭클라우드

(AWS) cfn-signal, cfn-get-metadata, cfn-hup 이란?

armyost 2022. 2. 6. 08:11
728x90

cfn은 CloudFormation 헬퍼스크립트를 뜻한다. 

cfn은 CloudFormation을 다루는데 용이한 기능을 제공하는데, CF Stack으로 생성된 EC2 인스턴스내에서 CLI로 실행할 수 있다. 

 

1. cfn-signal이란?

cfn-signal 헬퍼 스크립트는 Amazon EC2 인스턴스가 성공적으로 생성 또는 업데이트되었는지 여부를 나타내도록 CloudFormation에 신호를 보냅니다. 

 

예시

AWSTemplateFormatVersion: 2010-09-09
Description: Simple EC2 instance
Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Metadata:
      'AWS::CloudFormation::Init':
        config:
          files:
            /tmp/test.txt:
              content: Hello world!
              mode: '000755'
              owner: root
              group: root
    Properties:
      ImageId: ami-a4c7edb2
      InstanceType: t2.micro
      UserData: !Base64
        'Fn::Join':
          - ''
          - - |
              #!/bin/bash -x
            - |
              # Install the files and packages from the metadata
            - '/opt/aws/bin/cfn-init -v '
            - '         --stack '
            - !Ref 'AWS::StackName'
            - '         --resource MyInstance '
            - '         --region '
            - !Ref 'AWS::Region'
            - |+

            - |
              # Signal the status from cfn-init
            - '/opt/aws/bin/cfn-signal -e $? '
            - '         --stack '
            - !Ref 'AWS::StackName'
            - '         --resource MyInstance '
            - '         --region '
            - !Ref 'AWS::Region'
            - |+

    CreationPolicy:
      ResourceSignal:
        Timeout: PT5M

 

 

2. cfn-get-metadata란?

cfn-get-metadata 헬퍼 스크립트를 사용하여 CloudFormation에서 메타데이터 블록을 가져와 표준으로 출력할 수 있습니다. 또한 키를 지정하는 경우 메타데이터 블록의 하위 트리를 인쇄할 수도 있습니다. 그러나 최상위 키만 지원됩니다.

예시
cfn-get-metadata --stack CfnHupDemo --resource WebServerHost --region eu-west-1

 

 

3. cfn-hup이란?

cfn-hup 헬퍼는 리소스 메타데이터의 변경 사항을 감지하고 변경 사항이 감지되면 사용자 지정 작업을 실행하는 데몬입니다. 

예시

  LaunchConfig:
    Type: "AWS::AutoScaling::LaunchConfiguration"
    Metadata:
      QBVersion: !Ref paramQBVersion
      AWS::CloudFormation::Init:
...
            /etc/cfn/hooks.d/cfn-auto-reloader.conf:
              content: !Sub |
                [cfn-auto-reloader-hook]
                triggers=post.update
                path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init
                action=/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}
                runas=root
              mode: "000400"
              owner: "root"
              group: "root