발단
토이프로젝트를 진행하면서 aws 예산 임계치를 벗어나는 값을 확인하게 되었다.
|
$0.00 per In-use public IPv4 address per hour for EC2 Free Tier |
153.497 Hrs
|
USD 0.00
|
|
$0.00 per In-use public IPv4 address per hour for EC2 Free Tier
|
151.514 Hrs
|
USD 0.00
|
|
$0.005 per Idle public IPv4 address per hour
|
0.075 Hrs
|
USD 0.00
|
|
$0.005 per In-use public IPv4 address per hour
|
552.658 Hrs
|
USD 2.76
|
per In-use public IPv4 address per hour 라는 동일한 항목에서 EC2 Free Tier 에 대해서는 청구되지 않았지만, 그 외에는 청구가 되었다. 내가 알기론 750시간까지가 ec2 프리티어 요금정책으로 알고 있는데, 약 150시간 정도가 측정된 이후에 왜 0.005달러씩 청구되도록 측정된건지..
확인해보니, 2024년 2월 1일부터 서비스 연결 여부에 관계없이 모든 탄력적 IP 주소(IPv4)에 대해 시간당 $0.005의 요금이 부과된다고 한다.
그런데 탄력적 ip를 통해 접근 주소를 고정하지 않으면 매번 주소가 달라지기 때문에 상당히 번거로움이 생길 것으로 예상된다. 이 부분을 간편하게 해결해보고자 한다.
과정
쉘스크립트를 통해 ssh에 접근할 때 항상 동일한 명령어를 통해 접근하도록 세팅하려 한다.
방법은 간단하다.
1. aws 계정 세팅
- aws iam에서 pem, key id, secret key를 생성해야 한다.
2. 쉘스크립트를 통해 aws 계정으로 인스턴스 정보 확인
- 인스턴스 정보에 접근할 수 있는 ip주소를 확인하고 ssh접근한다.
- 먼저 aws configure 세팅이 되어있어야 한다.
// 현재 세팅된 정보 확인
cat ~/.aws/credentials
[default]
aws_access_key_id = AKIAxxxxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[내가 별도로 세팅한 AWS_PROFILE]
aws_access_key_id = AKIAyyyyyyyyyyyyyyy
aws_secret_access_key = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
// aws 계정 세팅
nano ~/.aws/credentials
편집기를 통해 []에 내가 바로 이해하기 쉬운 프로필명을 입력하고 key id, secret key를 입력한다.
- 준비가 되었다면, 이제 접근하면 된다.
쉘스크립트는 다음과 같이 작성했다.
접근할 때에는 작성한 쉘 스크립트의 경로, 인스턴스명, pem파일경로, ssh접근유저이름(처음 default로는 amazon linux라면 ec2-user, ubuntu라면 ubuntu 로 세팅되어있을 것이다. ), credentials에 입력한 aws 프로필명을 알고있어야 한다.
#!/bin/bash
# 사용법: ./ec2-ssh.sh <INSTANCE_NAME> <KEY_PATH> [SSH_USER] [AWS_PROFILE]
# 예시: ./쉘스크립트경로.sh 인스턴스명 ./pem파일경로.pem ubuntu 프로필명
INSTANCE_NAME=$1
KEY_PATH=$2
SSH_USER=${3:-ec2-user}
AWS_PROFILE=${4:-default}
if [[ -z "$INSTANCE_NAME" || -z "$KEY_PATH" ]]; then
echo "Usage: $0 <INSTANCE_NAME> <KEY_PATH> [SSH_USER] [AWS_PROFILE]"
exit 1
fi
echo "🔍 Fetching public IP for instance with tag Name=$INSTANCE_NAME using profile $AWS_PROFILE..."
PUBLIC_IP=$(aws ec2 describe-instances \
--profile "$AWS_PROFILE" \
--region ap-northeast-2 \
--filters "Name=tag:Name,Values=$INSTANCE_NAME" "Name=instance-state-name,Values=running" \
--query "Reservations[*].Instances[*].PublicIpAddress" \
--output text)
if [[ -z "$PUBLIC_IP" ]]; then
echo "❌ 인스턴스가 확인되지 않음"
exit 1
fi
echo "✅ Found IP: $PUBLIC_IP"
echo "🚀 SSH 접근 시도..."
ssh -i "$KEY_PATH" "$SSH_USER@$PUBLIC_IP"
코멘트
당연하다는듯이 탄력적 ip세팅했다가 큰 금액은 아니지만 과금이 되었다. 생각해보면 aws에서 ip를 무료로 제공했던 것 자체가 너무 감사한거지,, 그렇지만 ip고정하지 않아도 불편하지 않도록 미리 잘 세팅해두면 번거로움은 없을 것 같다. (cicd에 대해서는 더 추가해야 할 것들이 생기긴 하겠지만,,)
aws에서 제공하는 cli를 통해 무궁무진하게 기능들을 확장할 수 있는 것 같다. 불편한 점이 생긴다면 그대로 불편을 누르기보다 해결하려고 기울여보아야겠다.
'개발 > cloud, server, network' 카테고리의 다른 글
| [ngrok | Jenkins] ci/cd 배포 과정에서 Jenkins까지 닿지 않을 때 (0) | 2023.12.23 |
|---|---|
| [JWT] refresh token 보안 강화 과정, Refresh token 인증전략 (0) | 2023.12.18 |
| [http] 405 (Not Allowed) 해결.. (0) | 2023.11.28 |
| [AWS | Lambda] 파일을 못찾는 에러 Cannot find module 'index' (0) | 2023.11.01 |
| [cors] 오랜만에 만난 CORS에러.. 설정 후에도 별도의 메세지 확인되는 경우 (0) | 2023.10.31 |