Skip to content

2조 셸 스크립트 미션

Park minji edited this page Jul 31, 2024 · 2 revisions

복습

SSH agent forwarding

  • local host 상의 ssh agent가 remote host에 있는 것처럼 접근하게 해주는 것
  • remote host1의 ssh client가 local host에 있는 키를 활용하여 remote host2에 ssh session을 invoke할 수 있음

References

Shell

Shell이란 무엇인가?

  • 커널과 사용자 간 인터페이스
  • shell은 키보드에서 입력을 받아 자식 프로세스를 exec으로 생성하고, 해당 자식 프로세스에서 명령을 실행
    • 자식 프로세스의 결과를 부모 프로세스인 쉘이 받음
      • echo $? 로 직전 결과 확인 가능
  • 환경 변수: 쉘을 사용할 때 필요한 값을 저장한 것
    • export ENV_NAME=ENV_VALUE 실행 시 해당 변수가 자식 프로세스까지 전파됨
    • source로 자식 프로세스에 설정된 환경 변수를 부모 프로세스까지 전파할 수 있음
      • source = .

Shell의 종류

  • Bash (Bourne Again Shell)
  • Zsh (Z Shell)
  • Ksh (Korn Shell)

미션 1 - bash 스크립트 작성

aws CLI 를 설치하고 인스턴스의 public IP를 알아낸다.

aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,PublicIpAddress,State.Name]" --output table

ec2 meta data v2 를 이용해서 인스턴스의 public IP를 알아낸다.

curl -s http://169.254.169.254/latest/meta-data/instance-id
curl -s http://169.254.169.254/latest/meta-data/public-ipv4
curl -s http://169.254.169.254/latest/meta-data/local-ipv4

웹훅을 이용해서 slack의 #infra 채널에 아래 내용을 메시지로 보낸다.

  • instance ID, public IP, private IP, 디스크 남은 용량, 메모리 사용량
AWS_REGION="ap-northeast-2"

get_public_ip_aws_cli() {  
	PUBLIC_IP_CLI=$(aws ec2 describe-instances \  
	--region $AWS_REGION \  
	--instance-ids $INSTANCE_ID \  
	--query "Reservations[0].Instances[0].PublicIpAddress" \  
	--output text)  
	echo "AWS CLI로 확인한 Public IP: $PUBLIC_IP_CLI"  
}

get_public_ip_metadata() {  
	PUBLIC_IP_METADATA=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4)
	echo "EC2 메타데이터로 확인한 Public IP: $PUBLIC_IP_METADATA"  
}

send_slack_message() {  
	INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
	PRIVATE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
	DISK_SPACE=$(df -h / | awk 'NR==2 {print $4}')  
	MEMORY_USAGE=$(free -m | awk 'NR==2 {printf "%.2f%%", $3*100/$2}') 
	MESSAGE="Instance ID: $INSTANCE_ID\nPublic IP: $PUBLIC_IP_METADATA\nPrivate IP: $PRIVATE_IP\n디스크 남은 용량: $DISK_SPACE\n메모리 사용량: $MEMORY_USAGE" SLACK_WEBHOOK_URL="YOUR_SLACK_WEBHOOK_URL"  
	curl -X POST -H 'Content-type: application/json' \  
	--data "{\"text\":\"$MESSAGE\"}" \  
	$SLACK_WEBHOOK_URL  
}

main() {  
	get_public_ip_aws_cli  
	get_public_ip_metadata  
	send_slack_message  
}
main

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally