EC2 인스턴스의 UserData를 이용하여 EFS를 마운트해 보기

EC2 인스턴스의 UserData를 이용하여 EFS를 마운트해 보는 방법을 정리해 봤습니다.
2023.11.17

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 EC2 인스턴스의 UserData를 이용하여 EFS를 마운트해 보는 방법을 정리해 봤습니다.

현재 EFS를 생성한 상태이며 EC2 인스턴스에 마운트하지 않은 상태입니다.

EFS 생성 방법에 대해서는 아래 블로그를 참고해 주세요.

콘솔에서 UserData 사용

먼저 EC2 콘솔 화면에서「인스턴스 시작」을 클릭합니다.

EC2 인스턴스 생성 화면에서「스토리지 구성」카테리고리를 통해 EFS를 추가할 수 있습니다.

  • 파일 시스템에는「EFS」를 선택합니다.
  • 공유 파일 시스템에는 마운트할 EFS를 선택하고, 마운트 지점을 입력합니다.
    • /mnt/efs/fs1 디렉토리가 생성되며 fs1이 루트 지점이됩니다.
  • 스크립트 연결에 체크를 하면, 자동으로 UserData가 입력됩니다.
    • 별도로 EFS의 보안 그룹을 생성해서 관리한다면 보안 그룹 자동 생성 및 연결은 체크할 필요 없습니다.

UserData를 확인해 보면, 자동으로 스크립트가 생성된 것을 확인할 수 있습니다.

[ec2-user@ip-10-0-141-145 /]$ df -h mnt/efs/fs1
Filesystem Size Used Avail Use% Mounted on
127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/efs/fs1

상기 스크립트가 입력된 상태로 EC2 인스턴스를 생성하고, EFS 마운트 여부를 확인해 보면, 성공적으로 마운트된 것을 확인할 수 있습니다.

CloudFormation에서 UserData 사용

CloudFormation에서도 UserData를 사용할 수 있습니다.

Resources:
  WebEC2:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref EC2AMI
      InstanceType: !Ref InstanceType
      KeyName: !Ref EC2KeyPair
      DisableApiTermination: false
      BlockDeviceMappings:
        - DeviceName: /dev/sda1
          Ebs:
            VolumeSize: 600
            VolumeType: gp3
      SecurityGroupIds:
        - sg-xxxxxx
      SubnetId: subnet-xxxxxx
      UserData:
        Fn::Base64: |
          #cloud-config
          package_update: true
          package_upgrade: true
          runcmd:
            - yum install -y amazon-efs-utils
            - apt-get -y install amazon-efs-utils
            - yum install -y nfs-utils
            - apt-get -y install nfs-common
            - file_system_id_1=fs-xxxxxx
            - efs_mount_point_1=/mnt/efs/fs1
            - mkdir -p "${efs_mount_point_1}"
            - test -f "/sbin/mount.efs" && printf "\n${file_system_id_1}:/ ${efs_mount_point_1} efs tls,_netdev\n" >> /etc/fstab || printf "\n${file_system_id_1}.efs.ap-northeast-3.amazonaws.com:/ ${efs_mount_point_1} nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0\n" >> /etc/fstab
            - test -f "/sbin/mount.efs" && grep -ozP 'client-info]\nsource' '/etc/amazon/efs/efs-utils.conf'; if [[ $? == 1 ]]; then printf "\n[client-info]\nsource=liw\n" >> /etc/amazon/efs/efs-utils.conf; fi;
            - retryCnt=15; waitTime=30; while true; do mount -a -t efs,nfs4 defaults; if [ $? = 0 ] || [ $retryCnt -lt 1 ]; then echo File system mounted successfully; break; fi; echo File system not available, retrying to mount.; ((retryCnt--)); sleep $waitTime; done;

상기 CloudFormation 코드를 통해 EC2 인스턴스 생성 및 UserData를 통해 EFS를 마운트할 수 있습니다.

CloudFormation 코드 작성이 끝났다면, CloudFormation 스택을 생성합니다.

[ec2-user@ip-10-0-130-77 /]$ df -h mnt/efs/fs1
Filesystem Size Used Avail Use% Mounted on
127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/efs/fs1

마지막으로 EC2 인스턴스로 접속해, 확인해 보면 성공적으로 마운트된 것을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 kis2702@naver.com로 보내주시면 감사하겠습니다.