aws와 gcp 의 cli 사용환경 및 가상자원생성을 쉘 스크립트로화 하기
aws cli 사용 환경 만들기
필요정보
- aws cli 버전 2 설치 가이드 https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html
- sudo 권한 을 가진 계정 정보
프로세스
1) aws cli 설치 파일 다운로드
2) unzip 이용해 다운로드 받은 설치 파일 압축 해제
3) aws/install 명령어를 이용하여 cli를 설치
4) 설치가 끝나면 aws cli 버전을 확인
스크립트 생성
[root@shell 13.Cloud-Public]# cat 13.1\ install_awscli.sh
#!/bin/bash
# curl을 사용하여 awscli 패키지 다운로드
echo "awscli download"
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# 다운로드 받은 패키지 압축해제
echo "unzip awscliv2.zip"
unzip awscliv2.zip
# 설치 프로그램 실행
#압축 해제되면 홈디렉토리에 설치된 ./aws/install을 실행
#aws 설치 디렉토리 경로와 비이너리 위치 경로를 설정 설정, 버전확인
echo "install aws cli"
sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin
# 설치 확인
aws --version
결과
...
inflating: aws/dist/cryptography-3.3.2-py3.8.egg-info/AUTHORS.rst
inflating: aws/dist/cryptography-3.3.2-py3.8.egg-info/RECORD
install aws cli
You can now run: /usr/local/bin/aws --version
aws-cli/2.2.29 Python/3.8.8 Linux/3.10.0-1062.el7.x86_64 exe/x86_64.centos.7 prompt/off
[root@shell 13.Cloud-Public]#
##################################################################################
aws cli 이용한 인스턴스 만들기
aws cli는 json 형식으로 결과를 출력
필요한 정보
- aws 인증 정보
- cli를 이용한 aws ec2인스턴스 생성 가이드 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-ec2-instances.html
- 이미지 정보 조회 명령어 : aws ec2 describe-images
- 인스턴스 타입 조회 명령어 : aws ec2 instance-types
- 키페어 조회 명령어 : aws ec2 describe-key-pairs
- 보안 그룹 조회 명령어 : aws ec2 describe-security-groups
- 서브넷 조회 명령어 : aws ec2 describe-subnets
- 인스턴스 생성 명령어 : aws ec2 run-instances
스크립트 생성
- 보안에 안전한 셀 스크립트를 생성하기 위해서는 명령어를 실행하기 위한 파라미터값을 셀 스크립트 실행자로부터 입력 받도록 구현
- 명령어를 통해 자신의 계정에 등록된 자원 정보를 보고, 필요한 정보를 선택하여 인스턴스를 생성하는 스크립트로 개발
[root@shell 13.Cloud-Public]# cat ec2.sh
#!/bin/bash
# 인증
aws configure
# 이미지 정보 입력
read -p "Input image id : " imageid
# 인스턴스 타입 정보 입력
#json 타입으로 결과를 가져오기때문에 instance type과 t2로 시작하는 목록을 보여주고
#read명령어로 입력받음
echo "== Instance Type List =="
aws ec2 describe-instance-types | grep InstanceType | grep t2
read -p "Input instance type : " instancetype
# 키페어 정보 입력
#keypair ID 만 추출하고 그중 하나를 read -p 명령어로 입력받음
echo "== Key Pair List =="
aws ec2 describe-key-pairs | grep KeyName
read -p "Input key-pair name : " keyname
# 보안그룹 정보 입력
# describe-security-groups로 명령어 조회하고 json결과에 groupname과 groupid를 grep으로 검색
#read -p 로 securitygroup ID를 입력받음
echo "== Security Group List =="
aws ec2 describe-security-groups | grep -e GroupName -e GroupId
read -p "Input security group id : " securitygrpid
# 서브넷 정보 입력
# describe-subnets로 조회하고 subnetID와 CidrBlock 항목을 grep으로 검색
# read 명령어로 서브넷 ID를 입력받음
echo "== Subnet List =="
aws ec2 describe-subnets | grep -e SubnetId -e CidrBlock
read -p "Input subnet id : " subnetid
# EC2 인스턴스 생성
#입력받은 정보들을 이용하여 aws ec2 run-instance명령어를 이용하여 다음과 같이 인스턴스를 생성
aws ec2 run-instances \
--image-id $imageid \
--count 1 \
--instance-type $instancetype \
--key-name $keyname \
--security-group-ids $securitygrpid \
--subnet-id $subnetid
결과
[root@shell 13.Cloud-Public]# sh ec2.sh
AWS Access Key ID [****************]: key-id 입력
AWS Secret Access Key [****************]: secret key 입력
Default region name [ap-northeast-2]:
Default output format [json]:
Input image id : ami-0a0de518b1fc4524c
== Instance Type List ==
"InstanceType": "t2.large",
"InstanceType": "t2.2xlarge",
"InstanceType": "t2.micro",
"InstanceType": "t2.medium",
"InstanceType": "t2.xlarge",
"InstanceType": "t2.nano",
"InstanceType": "t2.small",
Input instance type : t2.micro
== Key Pair List ==
"KeyName": "exam-key",
"KeyName": "stgw",
Input key-pair name : exam-key
== Security Group List ==
"GroupName": "security-group-for-inbound-nfs-d-nurajxxugfis",
"GroupId": "sg-01204be845",
"GroupName": "ec2-SG",
"GroupId": "sg-05cb65e02",
"GroupName": "default",
"GroupId": "sg-f0ba",
"GroupId": "sg-f0ba98",
Input security group id : sg-05cb65e02
== Subnet List ==
"CidrBlock": "172.31.32.0/20",
"SubnetId": "subnet-f9a5bfb5",
"Ipv6CidrBlockAssociationSet": [],
"CidrBlock": "172.31.16.0/20",
"SubnetId": "subnet-2622405d",
"Ipv6CidrBlockAssociationSet": [],
"CidrBlock": "172.31.48.0/20",
"SubnetId": "subnet-3072856f",
"Ipv6CidrBlockAssociationSet": [],
"CidrBlock": "172.31.0.0/20",
"SubnetId": "subnet-2dd46546",
"Ipv6CidrBlockAssociationSet": [],
Input subnet id : subnet-f9a5bfb5
{
"Groups": [],
"Instances": [
{
"AmiLaunchIndex": 0,
"ImageId": "ami-0a0de518b1f",
"InstanceId": "i-0eea26bde3e4",
"InstanceType": "t2.micro",
"KeyName": "exam-key",
"LaunchTime": "2021-08-17T03:47:59+00:00",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone": "ap-northeast-2c",
"GroupName": "",
"Tenancy": "default"
},
"PrivateDnsName": "ip-172-31-36-226.ap-northeast-2.compute.internal",
"PrivateIpAddress": "172.31.36.226",
"ProductCodes": [],
"PublicDnsName": "",
"State": {
"Code": 0,
"Name": "pending"
},
"StateTransitionReason": "",
"SubnetId": "subnet-f9a5",
"VpcId": "vpc-0e0",
"Architecture": "x86_64",
"BlockDeviceMappings": [],
"ClientToken": "46f5ff4f-9759-4a8e-b04",
"EbsOptimized": false,
"EnaSupport": true,
"Hypervisor": "xen",
"NetworkInterfaces": [
{
"Attachment": {
"AttachTime": "2021-08-17T03:47:59+00:00",
"AttachmentId": "eni-attach-0d84383f",
"DeleteOnTermination": true,
"DeviceIndex": 0,
"Status": "attaching",
"NetworkCardIndex": 0
},
"Description": "",
"Groups": [
{
"GroupName": "ec2-SG",
"GroupId": "sg-05cb6516b"
}
],
"Ipv6Addresses": [],
"MacAddress": "0a:46:9c:94:19:4e",
"NetworkInterfaceId": "eni-0ee8ec",
"OwnerId": "851474811695",
"PrivateDnsName": "ip-172-31-36-226.ap-northeast-2.compute.internal",
"PrivateIpAddress": "172.31.36.226",
"PrivateIpAddresses": [
{
"Primary": true,
"PrivateDnsName": "ip-172-31-36-226.ap-northeast-2.compute.internal",
"PrivateIpAddress": "172.31.36.226"
}
],
"SourceDestCheck": true,
"Status": "in-use",
"SubnetId": "subnet-f9b5",
"VpcId": "vpc-0e065",
"InterfaceType": "interface"
}
],
"RootDeviceName": "/dev/xvda",
"RootDeviceType": "ebs",
"SecurityGroups": [
{
"GroupName": "ec2-SG",
"GroupId": "sg-05cb60416b"
}
],
"SourceDestCheck": true,
"StateReason": {
"Code": "pending",
"Message": "pending"
},
"VirtualizationType": "hvm",
"CpuOptions": {
"CoreCount": 1,
"ThreadsPerCore": 1
},
"CapacityReservationSpecification": {
"CapacityReservationPreference": "open"
},
"MetadataOptions": {
"State": "pending",
"HttpTokens": "optional",
"HttpPutResponseHopLimit": 1,
"HttpEndpoint": "enabled"
},
"EnclaveOptions": {
"Enabled": false
}
}
],
"OwnerId": "851695",
"ReservationId": "r-0892326971b"
}
서브넷은 ap-northeast-2c 으로 선택
인스턴스 생성
이슈 :
An error occurred (Unsupported) when calling the RunInstances operation: Your requested instance type (t2.micro) is not supported in your requested Availability Zone (ap-northeast-2b). Please retry your request by not specifying an Availability Zone or choosing ap-northeast-2a, ap-northeast-2c.
[root@shell 13.Cloud-Public]#
이런문구가 나온다면 az 존이 c인지 b인지 확인해야함. 안되면 c로 선택되어 있는 subnet을 사용해보기
'shell_script' 카테고리의 다른 글
centos8 firewall nat 세팅 (추가/삭제) 스크립트 (0) | 2021.09.01 |
---|---|
shell - centos7-minimal 버전 초기 세팅 스크립트 (0) | 2021.08.18 |
shell - 패스워드 생성 법칙 적용 (0) | 2021.08.11 |
shell - 환경변수 설정 (0) | 2021.08.07 |
shell - system 관련 스크립트 (0) | 2021.08.02 |