Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

http://docs.aws.amazon.com/ko_kr/cli/latest/userguide/installing.html

...

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
$ complete -C aws_completer aws



http://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-getting-started.html

...

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 정보가 정확한 지 확인하고 시간 동기화를 확인해야 한다.

...