IT/AWS

[AWS] aws cli로 새로운 launch template version 생성하기

반응형

Intro

aws cli로 새로운 launch template version을 생성하기 위해서는 몇가지 작업이 필요합니다.

  • 이전 version의 데이터를 가져와야 한다
  • 업데이트가 필요한 데이터 (e.g. ami image id, user data, security group id 등등)로 변경해줘야 한다

launch template 관련 aws cli 명령어 찾기

우선 aws cli를 사용하기 위해 아래 cli문서를 잘 참고해 보도록 합시다.

https://docs.aws.amazon.com/cli/latest/reference/

aws cli를 제공하는 옵션을 모두 암기하는 경우는 드물기 때문에 문서를 참고하여 그때그때 필요한 옵션을 체크 하는데요. 해당 사이트에 왼쪽 카테고리 Available Services 를 선택하면 원하는 리소스 리스트가 나오게 됩니다.

우리는 오늘 launch template 관련 작업을 해야하기 때문에 lauch template를 검색합니다. 그런데 안나오죠. 방법은 2가지 입니다.

  • aws 콘솔을 많이 사용해본 사람은 통밥으로 ec2에 있겠구나 를 떠올릴 수 있습니다. ec2를 클릭하여 launch template을 검색합니다. (잘 나옵니다)
  • cli 문서 사이트 왼쪽에 Quick Search로 launch template을 검색합니다. (사실 이게 더 빠릅니다.)

그러면 본격적으로 오늘 사용해볼 create-launch-template-version 명령어를 알아보도록 하겠습니다.

aws ec2 create-launch-template-version 명령어 사용하기

aws cli문서를 확인해보면 어쩌구 저쩌구 막 나오고 하단 부분에 Example이 나옵니다. 실제로 어떻게 쓰는지 보여주는 예시이기 때문에 이게 가장 중요합니다.

  • example
aws ec2 create-launch-template-version --launch-template-id lt-0abcd290751193123 --version-description WebVersion2 --source-version 1 --launch-template-data '{"ImageId":"ami-c998b6b2"}'

자 나왔네요 --launch-template-data 사실 오늘의 진짜 주인공입니다. 이 옵션에 새롭게 만드는 launch template 정보를 json 형식으로 모두 넣어 주어야 합니다. aws console에서 처럼 create new version을 하면 이전 데이터를 쭉 가져오기 때문에 원하는 부분만 넣어주면 되는거아니야? 할 수 있겠지만. 안타깝게도 아닙니다.

그래서 우리는 2가지 작업을 해줘야 합니다. 첫번째 이전 버전의 launch-template-data 를 가져와야한다. 두번째 가져온데이터에서 원하는 데이터로 변경해줘야한다.

이전버전의 launch-template-data 를 가져오기

아래와 같이 원하는 lt id와 version을 입력하면 원하는 데이터가 나옵니다. 여기서 우리는 LaunchTemplateData 부분만 가져올 겁니다. 이 값이 위의 aws ec2 create-launch-template-version 에서 사용할 옵션 --launch-template-data 부분 입니다.

aws ec2 describe-launch-template-versions --launch-template-id lt-0abcd29075119312 --versions 12

자 근데 기존 LaunchTemplateData 의 데이터가 json형식이 너무 길어서 한줄로 입력할 수 없을 겁니다. 그러면 이 부분을 아래와 같이 json 파일로 만들어버리면됩니다.

  • launch-template-data.json
{
  "KeyName": "kp-us-east",
  "ImageId": "ami-6057e21a",
  "InstanceType": "t2.small",
  "NetworkInterfaces": [
      {
          "SubnetId": "subnet-7b16de0c",
          "DeviceIndex": 0,
          "Groups": [
              "sg-7c227019"
          ]
      }
  ]
}

원하는 데이터로 어떻게 변경

똑똑한 우리 엔지니어들은 스크립트를 자동화하기위해 data를 손으로 직접 바꾸는 것이 아니고 sed명령어를 통해서 data를 변경할 겁니다.

sed -i "s/ami-6057e21a/ami-999b21r/g" > launch-template-data.json

드디어 마지막

아니 근데 --launch-template-data 옵션에 어떻게 file로 입력하냐구요. 걱정마세요 다됩니다.

aws ec2 create-launch-template-version --launch-template-id $lt_id --launch-template-data file://launch-template-data.json

끝.

반응형