http://docs.aws.amazon.com/ko_kr/cli/latest/userguide/installing.html
httphttps://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html
pip나 apt 에서는 aws cli v1 이 나온다. 직접 바이너리를 다운로드 받아서 aws cli -chap-getting-startedv2 를 설치한다.
Code Block |
---|
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
rm -rf aws/ awscliv2.zip |
Command Completion 활성화. 다음 내용을 .bashrc 등에 넣어줌. (https://github.com/aws/aws-cli/tree/v2)
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-completion.html
Code Block |
---|
$ pipcomplete install awscli -C aws_completer aws |
http://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-getting-started.html
Code Block |
---|
$ aws configure $ cat ~/.aws/config [default] region = ap-northeast-2 output = text $ cat .aws/credentials [default] aws_access_key_id = xxxxx aws_secret_access_key = xxxxxx |
...
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-multiple-profiles.html
두 개의 프로필이 있는 자격 증명 파일 설정
Code Block |
---|
$ cat ~/.aws/config [default] region=us-west-2 output=json [profile user2] region=us-east-1 output=text $ cat .aws/credentials [default] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY [user2] aws_access_key_id=AKIAI44QH8DHBEXAMPLE aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY |
...
Code Block |
---|
$ aws ec2 describe-instances --profile user2 |
AWS_PROFILE 환경 변수를 설정하여 계속 사용하기
Code Block |
---|
$ export AWS_PROFILE=user2 |
환경 변수를 설정하면 기본 프로필이 변경되어 셸 세션이 종료될 때까지 또는 변수를 다른 값으로 설정할 때까지 유지됩니다.
aws ec2 describe-instances
...
명령출력 제어하는 부분은 http://docs.aws.amazon.com/ko_kr/cli/latest/userguide/controlling-output.html 를 참고한다.
기본 JSON 처리 라이브러리인 JMESPath의 추가 예와 전체 사양은 http://jmespath.org/specification.html을 참조
filters를 이용하여 원하는 조건의 정보를 필터링한 다음 출력할 내용만 query로 조정을 할 수 있다.
Code Block |
---|
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=infra-*" \ --query 'Reservations[*].Instances[*].[PublicIpAddress,Tags[?Key==`Name`].Value]' --output json [ [ [ "52.79.117.197", [ "infra-Elasticsearch-node8" ] ] ], ... # 두번째 열에 배열이 있어서 하나의 인스턴스 정보가 한줄에 나오지 않음. $ aws ec2 describe-instances --filters "Name=tag:Name,Values=infra-*" \ --query 'Reservations[*].Instances[*].[PublicIpAddress,Tags[?Key==`Name`].Value]' --output text 52.79.117.197 infra-Elasticsearch-node8 52.78.5.85 infra-vpn-cafe24-zb 52.78.139.124 .... # to_string 으로 type 변경함. $ aws ec2 describe-instances --filters "Name=tag:Name,Values=infra-*" \ --query 'Reservations[*].Instances[*].[PublicIpAddress,to_string(Tags[?Key==`Name`].Value)]' --output json [ [ [ "52.79.117.197", "[\"infra-Elasticsearch-node8\"]" ] ], [ [ "52.78.5.85", "[\"infra-vpn-cafe24-zb\"]" ] ], ..... $ aws ec2 describe-instances --filters "Name=tag:Name,Values=infra-*" \ --query 'Reservations[*].Instances[*].[PublicIpAddress,to_string(Tags[?Key==`Name`].Value)]' --output text 52.79.117.197 ["infra-Elasticsearch-node8"] 52.78.5.85 ["infra-vpn-cafe24-zb"] 52.78.139.124 ["infra-Elasticsearch-node9"] 52.78.94.43 ["infra-Elasticsearch-node4"] 13.124.244.105 ["infra-swarm-worker2"] 13.124.183.89 ["infra-swarm-worker3"] 13.125.22.34 ["infra-rundeck"] .... |
...
Code Block |
---|
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=infra-*" \ --query 'Reservations[*].Instances[*].[PublicIpAddress,to_string(Tags[?Key==`Name`].Value)]' --output text \ | tr -d "[" | tr -d "]" | tr -d "\"" | awk '{ print $2" , "$1 }' | sort adcenter.prod.fe1.admin1 , 52.79.150.2 adcenter.prod.fe2 , 52.79.164.255 adcenter.prod.fe3 , 52.78.9.181 adcenter.prod.fe4 , 52.78.191.111 .... |
JMESPath 를 사용하지 않고 jq를 이용하는 방법도 있다. filters를 이용하여 원하는 이름의 호스트만 걸러낸 후 jq를 이용하여 json에서 필요한 정보를 가져왔다. 보기 편하게 보려면 python 등으로 짜서 쓰는게 편리할 것 같다.
...
https://docs.aws.amazon.com/cli/latest/userguide/troubleshooting.html
Error: AWS was not able to validate the provided credentials
awscli 를 사용할 때 사용하는 컴퓨터의 시간이 맞지 않으면 작동이 안된다. key 정보가 정확한 지 확인하고 시간 동기화를 확인해야 한다.
...