AWS CLI를 사용하여 EC2 인스턴스의 AMI(Amazon Machine Image)를 생성하는 스크립트
사전 요구사항
- AWS CLI 설치 및 구성 (aws configure)
- AMI 생성 권한이 있는 IAM 사용자 또는 역할
- 대상 EC2 인스턴스 ID 확인
EC2 인스턴스 ID 확인
instance-search.sh 스크립트
#!/bin/bash
INSTANCE_STATE="${1:-running}"
echo "Querying EC2 instances in state: $INSTANCE_STATE..."
RESULT=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=$INSTANCE_STATE" \
--query 'Reservations[*].Instances[*].{
Name:Tags[?Key==`Name`]|[0].Value,
InstanceId:InstanceId,
Type:InstanceType,
PrivateIP:PrivateIpAddress,
PublicIP:PublicIpAddress,
Status:State.Name,
LaunchTime:LaunchTime
}' \
--output table)
if [[ -z "$RESULT" || "$RESULT" == "None" ]]; then
echo "No EC2 instances found in state: $INSTANCE_STATE"
else
echo "$RESULT"
fi
>> output <<

AMI 생성
create_ami.sh 스크립트
더보기
---
기본 AMI 생성 스크립트
vim create_ami.sh
#!/bin/bash
# 변수 설정
INSTANCE_ID="i-0123456789abcdef0" # 대상 인스턴스 ID
AMI_NAME="MyAMI-$(date +'%Y%m%d%H%M')" # 날짜 포함 AMI 이름
DESCRIPTION="AMI created from EC2 instance using AWS CLI on $(date)"
# AMI 생성 명령 실행
aws ec2 create-image \
--instance-id $INSTANCE_ID \
--name "$AMI_NAME" \
--description "$DESCRIPTION" \
--no-reboot
chmod +x create_ami.sh
./create_ami.sh
태그 지정
AMI_ID=$(aws ec2 create-image --instance-id $INSTANCE_ID --name "$AMI_NAME" --description "$DESCRIPTION" --no-reboot --output text)
aws ec2 create-tags --resources $AMI_ID --tags Key=Purpose,Value=Backup
---
#!/bin/bash
set -euo pipefail
# 함수: 사용법 출력
usage() {
echo "Usage: $0 <instance-id> <image-version> [--no-reboot]"
echo "例: $0 i-0123456789abcdef v1.2.3 --no-reboot"
exit 1
}
# 인자 처리
if [[ $# -lt 2 ]]; then
usage
fi
INSTANCE_ID="$1"
IMAGE_VERSION="$2"
NO_REBOOT="false"
if [[ "${3:-}" == "--no-reboot" ]]; then
NO_REBOOT="true"
fi
# 버전 형식 확인 (예: v1.2.3)
if ! [[ "$IMAGE_VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Error: version format invalid: $IMAGE_VERSION" >&2
usage
fi
# 이름 / 설명
CURRENT_DATE=$(date +'%Y%m%d')
IMAGE_NAME="prod-web-ami-${CURRENT_DATE}-${IMAGE_VERSION}"
IMAGE_DESC="AMI from instance ${INSTANCE_ID}, version ${IMAGE_VERSION}, date ${CURRENT_DATE}"
# AMI 생성
echo "Creating AMI from instance $INSTANCE_ID …"
AMI_ID=$(aws ec2 create-image \
--instance-id "$INSTANCE_ID" \
--name "$IMAGE_NAME" \
--description "$IMAGE_DESC" \
--no-reboot $NO_REBOOT \
--tag-specifications "ResourceType=image,Tags=[{Key=Name,Value=${IMAGE_NAME}},{Key=Version,Value=${IMAGE_VERSION}}]" "ResourceType=snapshot,Tags=[{Key=Name,Value=${IMAGE_NAME}}]" \
--query 'ImageId' --output text)
echo "AMI creation started. AMI ID: $AMI_ID"
# AMI 상태 대기
echo "Waiting for AMI to become available…"
while true; do
STATE=$(aws ec2 describe-images --image-ids "$AMI_ID" --query 'Images[0].State' --output text)
echo "Current AMI state: $STATE"
if [[ "$STATE" == "available" ]]; then
echo "AMI is available: $AMI_ID"
break
elif [[ "$STATE" == "failed" ]]; then
echo "AMI creation failed" >&2
exit 1
fi
sleep 10
done
# 결과 출력
echo "AMI 생성 완료: ID=$AMI_ID, 이름=$IMAGE_NAME"
# 여기서 오래된 AMI 정리 로직 또는 알림을 추가할 수 있음
AWS 웹 콘솔(Management Console)
- 이미지 > AMI
- Elastic Block Store > 스냅샷
'퍼블릭 클라우드' 카테고리의 다른 글
| [draft] AWSCLI(awscli) 설치 및 기타 도구 설정 (0) | 2025.11.16 |
|---|---|
| [draft] AWS CLI로 액세스 키(Access Key, Secret Access Key) 설정 (0) | 2025.11.16 |
| [draft] AWS RDS를 Percona XtraBackup을 사용하여 백업 및 복원하는 방법 (0) | 2025.11.16 |
| [draft] AWS IAM 사용자에게 MFA를 강제로 적용하는 방법 (0) | 2025.11.15 |
| [draft] Amazon Linux 2023에 MySQL 클라이언트를 설치하는 방법 (0) | 2025.11.15 |