갑자기 잘 동작하던 dev 환경의 jenkins가 사망했다.
jenkins가 들어있는 ec2가 우리가 관리하는 aws가 아니라 외부 업체가 관리하는 aws안에 있는 상황이였는데 비밀번호가 만료돼서 aws 접속이 안돼서 메일을 보내야하는 상황이였다.
하지만 비밀번호 만료 메일을 보내도 답장이 오는데까지 시간이 걸려서 aws cli를 통해 해결해보기로 했다.
기존에 aws cli는 설치가 돼있는 상황이였다.
현재 configure가 설정되어 있어서 다른 configure를 세팅하면 다시 변경을 해줘야해서 임시 프로파일 설정을 해줬다.
export AWS_ACCESS_KEY_ID=your-access-key-id
export AWS_SECRET_ACCESS_KEY=your-secret-access-key
export AWS_REGION=ap-northeast-2
export를 통해서 현재 세션에만 적용되게끔 configure을 적용했다.
해당 설정은 아래의 명령어를 통해 적용이 됐는지 확인 가능하다.
aws configure list
이제 계정에 연결돼있는 ec2를 조회해 instance id를 알아내야 한다.
외부 업체에서 제공해준 사이트에 ec2 이름과 privete ip주소가 있으므로 이것을 활용해서 ec2를 찾아볼 것이다.
AWS 공식문서 에는 describe-instances라고 instance의 정보를 알려주는 기능이 있었다.
이것을 활용해 다음과 같이 명령어를 입력해준다.
aws ec2 describe-instances --filters "Name=network-interface.addresses.private-ip-address,Values=your-private-ip-address"
현재는 netwrok-interface와 연결된 private ip로 검색했지만 공식문서에 보면 filter를 적용하는 방법이 다양하므로 현재 상황에 맞게 검색을 하면 좋을 것 같다.
조회를 하면 아래와 같이 나온다.
{
"Reservations": [
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ami-id",
"InstanceId": "i-xxxxxxxxxxxxxxxxx",
"InstanceType": "t3.medium",
"LaunchTime": "2099-12-32T00:00:00+00:00",
"Monitoring": {
...
},
"Placement": {
...
},
"PrivateDnsName": "your-dns-name",
"PrivateIpAddress": "your-private-ip",
"ProductCodes": [],
"PublicDnsName": "",
"State": {
...
},
...
}
]
}
}
ec2의 instanceId를 찾았다!
참고로 전체 결과가 필요하지 않다면,
aws ec2 describe-instances --filters "Name=network-interface.addresses.private-ip-address,Values=your-private-ip-address" --query 'Reservations[*].Instances[*].InstanceId' --output text
query문을 사용해서 이런식으로 입력하면 터미널 결과에 instanceId만 추출할 수 있다.
재부팅은 의외로 간단하다.
aws ec2 reboot-instances --instance-ids i-xxxxxxxxxxxxxxxxx
이렇게 명령어를 입력하면 인스턴스가 재부팅이 된다.
aws console 로그인 없이 인스턴스를 성공적으로 재부팅했고, 작업의 딜레이 없이 (비밀번호 변경) 작업을 진행할 수 있었다!
aws cli로 여러가지를 생성 (ec2, key-pair, target-group 등)을 생성해봤지만, 재부팅 기능이 있는지 오늘 알았고 활용도가 높은 것 같다.
또한 dev 환경에서만 별도의 sh파일을 만들어 인스턴스 id만 추출하는 기능을 통해서 재부팅할 ip등의 변수를 받고, 해당 ec2를 재부팅하는 sh 파일을 만들어서 공유하면 팀원들의 개발이 더 편해질 것 같다는 생각이 들었다.