terraform을 사용해보기 전에 기본 세팅이 필요하다. 기본 세팅을 해보자.
기본 세팅
- 전반적인 실습은 Cloud9에서 진행된다.
- Cloud9 작업 공간은 루트 계정 사용자가 아닌 관리자 권한이 있는 IAM 사용자가 빌드해야 한다.
- https://ukayzm.github.io/aws-create-iam-user/ 이 블로그에 잘 나와있으니 따라하면서 IAM 사용자를 만들어가보자
Cloud9 생성
- AWS 콘솔에 로그인
- 가장 가까운 Region 에서 여기-Cloud9 Home를 눌러서 Cloud9 을 시작
- Cloud9 환경 생성
- 환경 만들기 선택
- 이름을 지정
- 인스턴스 유형을 t2.micro 로 설정
- VPC 설정에서 서브넷은 a, c 중에 하나 선택
- 마지막으로 환경 만들기 를 선택
IAM 역할을 생성하여 Cloud9 인스턴스에 연결
- 이 링크를 사용하여 관리자 액세스 권한이 있는 IAM 역할을 생성
- AWS 서비스 및 EC2 가 선택 되었는지 확인하고 다음 을 클릭 하여 권한을 선택
- AdministratorAccess 가 선택 되었는지 확인
- 이름을 입력 하고 역할 생성 을 클릭
- 역할 수정을 하고 생성한 역할을 할당하기
- json 출력을 사용하기 위해 jq를 설치한다
sudo yum install -y jq
임시 자격 증명이 아직 없는지 확인하기 위해 기존 자격 증명 파일을 제거하고 Cloud9에 대한 AWS 관리형 임시 자격 증명 을 비활성화한다
aws cloud9 update-environment --environment-id $C9\_PID --managed-credentials-action DISABLE
rm -vf ${HOME}/.aws/credentials
현재 리전을 기본값으로 사용하여 aws cli를 구성해야 한다
echo "export AWS\_DEFAULT\_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region)" >> ~/.bashrc
echo "export AWS\_REGION=\\$AWS\_DEFAULT\_REGION" >> ~/.bashrc
echo "export AWS\_ACCOUNT\_ID=$(aws sts get-caller-identity --query Account --output text)" >> ~/.bashrc
source ~/.bashrc
AWS_REGION이 원하는 지역으로 설정되어 있는지 확인
test -n "$AWS\_REGION" && echo AWS\_REGION is "$AWS\_REGION" || echo AWS\_REGION is not set
bash_profile에 저장하자
echo "export AWS\_ACCOUNT\_ID=${AWS\_ACCOUNT\_ID}" | tee -a ~/.bash\_profile
echo "export AWS\_REGION=${AWS\_REGION}" | tee -a ~/.bash\_profile
aws configure set default.region ${AWS\_REGION}
aws configure get default.region
Cloud9 인스턴스에서 디스크 크기 늘리기
Cloud9이 생성될 때 디스크 크기는 default로 10G가 할당이 된다
실습할때 많이 부족할 것으로 예상되기 때문에 50G로 할당을 해준다
$ sudo vi resize.sh
#!/bin/bash
# Specify the desired volume size in GiB as a command line argument. If not specified, default to 20 GiB.
SIZE=${1:-20}
# Get the ID of the environment host Amazon EC2 instance.
INSTANCEID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
# Get the ID of the Amazon EBS volume associated with the instance.
VOLUMEID=$(aws ec2 describe-instances \
--instance-id $INSTANCEID \
--query "Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId" \
--output text)
# Resize the EBS volume.
aws ec2 modify-volume --volume-id $VOLUMEID --size $SIZE
# Wait for the resize to finish.
while [ \
"$(aws ec2 describe-volumes-modifications \
--volume-id $VOLUMEID \
--filters Name=modification-state,Values="optimizing","completed" \
--query "length(VolumesModifications)"\
--output text)" != "1" ]; do
sleep 1
done
#Check if we're on an NVMe filesystem
if [ $(readlink -f /dev/xvda) = "/dev/xvda" ]
then
# Rewrite the partition table so that the partition takes up all the space that it can.
sudo growpart /dev/xvda 1
# Expand the size of the file system.
# Check if we are on AL2
STR=$(cat /etc/os-release)
SUB="VERSION_ID=\"2\""
if [[ "$STR" == *"$SUB"* ]]
then
sudo xfs_growfs -d /
else
sudo resize2fs /dev/xvda1
fi
else
# Rewrite the partition table so that the partition takes up all the space that it can.
sudo growpart /dev/nvme0n1 1
# Expand the size of the file system.
# Check if we're on AL2
STR=$(cat /etc/os-release)
SUB="VERSION_ID=\"2\""
if [[ "$STR" == *"$SUB"* ]]
then
sudo xfs_growfs -d /
else
sudo resize2fs /dev/nvme0n1p1
fi
fi
169.254.169.254 ⇒ AWS의 하이퍼바이저 IP
메타데이터는 이 IP를 명시해야 됨
metadata → 속성값
⇒ 가상화에게 서버의 정보를 요청
$ sudo chmod 755 resize.sh
$ sudo ./resize.sh 50
디스크 정보를 보는 리눅스 명령어인 df -h 를 실행하여 / 디스크 용량이 50GB 가 되었는 지 확인한다.
$ df -h