Heesung Yang

AWS CLI - 설치 및 기본 설정 방법

Why CLI?

CLI : Command Line Interface의 약자로 명령어 기반의 사용자 환경을 의미한다.

처음 AWS를 접할 때는 GUI 환경인 AWS Management Console을 이용하는게 좀 더 직관적이고 사용성이 좋다.

aws-management-console

그러나 GUI의 한계점은 분명히 있다. 예를 들면,

  • 비슷한 작업을 계속 GUI로 하는건 번거롭다.(예를 들어 EC2를 반복적으로 중지/시작 하는 일)
  • GUI로 작업하는 과정을 문서화하기 번거롭다. (일일이 스크린샷을 찍어야 한다.)
  • AWS Management Console의 GUI는 계속 업데이트되기 때문에 기껏 스크린샷 열심히 찍어가며 작성했던 메뉴얼이 어느 순간 무용지물이 된다.
    • 무용지물까지는 아니더라도 최신 내용이 반영되지 않기 때문에 문서를 읽는 사람에게 혼란을 줄 수 있다.

반면 CLI는 위 단점을 보완해 줄 수 있기 떄문에, 위 단점에 대해 공감하는 사람이라면 CLI 사용을 추천한다.

  • 비슷한 작업을 계속 GUI로 하는건 번거롭다.(예를 들어 EC2를 반복적으로 중지/시작 하는 일)
    • 대부분 명령어 한 줄로 가능하다.
  • GUI로 작업하는 과정을 문서화하기 번거롭다. (일일이 스크린샷을 찍어야 한다.)
    • 명령어 기반이기 때문에(텍스트) 문서화가 비교적 간단하다.
  • AWS Management Console의 GUI는 계속 업데이트되기 때문에 기껏 스크린샷 열심히 찍어가며 작성했던 메뉴얼이 어느 순간 무용지물이 된다.
    • cli는 옵션이 추가될지 언정 거의 변경되지는 않는다.
    • 변경되더라도 텍스트 수정이라 상대적으로 덜 번거롭다.

CLI가 무조건 좋다는 얘기가 아니다. GUI와 CLI가 가진 장단점이 명확하기 때문에 자신의 환경에 맞는 방법을 선택하면 된다.

설치

AWS CLI는 버전 1과 버전 2가 있다. 당연히 버전 2가 최신 버전이므로 버전 2를 설치하자. 설치는 AWS 공식 문서를 참고 하자. 매우 간단하다.

설치 후 터미널에서 아래 명령을 입력하여 제대로 설치 되었는지, 어떤 버전이 설치되었는지 확인할 수 있다.

aws --version
# Windows 10
aws-cli/2.2.39 Python/3.8.8 Windows/10 exe/AMD64 prompt/off

# Mac
aws-cli/2.1.10 Python/3.9.1 Darwin/20.6.0 source/x86_64 prompt/off

# Linux
aws-cli/2.0.13 Python/3.7.3 Linux/3.10.0-1160.21.1.el7.x86_64 botocore/2.0.0dev17

설정

AWS 계정 생성 시 생성한 Access Key와 Secret Access Key 정보를 AWS CLI에 설정하자. 설정 시 기본으로 사용할 region 이름과 cli 명령어 결과를 보여줄 형식(output)을 지정할 수 있다.

~$ aws configure
AWS Access Key ID [None]: YOUR_ACCESS_KEY
AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY
Default region name [None]: ap-northeast-2
Default output format [None]: json

region name에 설정할 값은 이 글 하단 AWS Region List를 참조하자.

output format 값에 따란 출력 결과 예시는 이 글 하단의 AWS CLI Output Format Sample을 참조하자.

위와 같이 입력하면 $HOME 폴더 밑에 .aws 폴더가 생성되고 하위에 config, credentials 라는 파일이 생성된다.

Windows : C:\Users\hsyang\.aws
Mac : /Users/hsyang/.aws
Linux : /home/hsyang/.aws

파일을 열어보면 방금 설정한 정보가 텍스트 형태로 저장되어 있음을 확인할 수 있다.

  • config

    [default]
    region = ap-northeast-2
    output = json
    
  • credentials

    [default]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
    

[default] 라는 문구가 보이는데 이는 default라는 이름의 profile을 의미한다. AWS CLI는 profile이라는 개념을 제공하여 여러 개의 Access Key/Secret Access Key를 사용하는 경우 각 Key별 profile을 만들어 두고 필요에 따라 변경하며 사용할 수 있다.

dev 라는 이름의 profile을 추가해보자.

~$ aws configure --profile dev
AWS Access Key ID [None]: YOUR_ACCESS_KEY_FOR_DEV
AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY_FOR_DEV
Default region name [None]: us-east-1
Default output format [None]: table

그리고 config, credentials 파일을 확인하면 아래와 같이 정보가 추가되어 있다.

  • config

    [default]
    region = ap-northeast-2
    output = json
    [profile dev]
    region = us-east-1
    output = table
    
  • credentials

    [default]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
    [dev]
    aws_access_key_id = YOUR_ACCESS_KEY_FOR_DEV
    aws_secret_access_key = YOUR_SECRET_ACCESS_KEY_FOR_DEV
    

aws configure 명령을 사용하여 설정한 region 이름과 output은 aws cli 커맨드 실행할 때마다 변경할 수 있기 때문에, 처음 설정 시 잘 모르겠다면 일단 그대로 두고 나중에 수정하면 된다.

# default profile 설정이 적용된다.
# ap-northeast-2(서울) 리전의 EC2 리스트가 출력되고, 출력 포맷은 json 형태다.
~$ aws ec2 describe-instances

## 리전만 변경하고 싶으면 아래와 같이 한다.
~$ aws ec2 describe-instances --region us-east-1

## 출력 포맷을 변경하고 싶으면 아래와 같이 한다.
~$ aws ec2 describe-instances --output text

## default profile 대신 dev profile을 적용하고 싶으면 아래와 같이 한다.
~$ aws ec2 describe-instances --profile dev

## 위 3가지 옵션을 동시에 사용할 수도 있다.
~$ aws ec2 describe-instances --profile dev --region eu-central-1 --output yaml

## dev profile 의 region을 변경하고 싶으면 아래와 같이 할 수 있다.
~$ aws configure --profile dev
AWS Access Key ID [****************_DEV]:          # Enter를 입력하면 기존 정보를 그대로 사용
AWS Secret Access Key [****************_DEV]:      # Enter를 입력하면 기존 정보를 그대로 사용
Default region name [us-east-1]: ap-northeast-2    # us-east-1 => ap-northeast-2 로 변경
Default output format [table]:                     # Enter를 입력하면 기존 정보를 그대로 사용

Appendix

AWS Region List

Name Region Country
Seoul ap-northeast-2 Asia
Mumbai ap-south-1 Asia
Osaka ap-northeast-3 Asia
Singapore ap-southeast-1 Asia
Sydney ap-southeast-2 Asia
Tokyo ap-northeast-1 Asia
Hongkong ap-east-1 Asia
Ohio us-east-2 US
Virginia us-east-1 US
Califonia us-west-1 US
Oregon us-west-2 US
Sanpaulo sa-east-1 South America
Canada ca-central-1 Canada
Frankfurut eu-central-1 Europe
Island eu-west-1 Europe
London eu-west-2 Europe
Paris eu-west-3 Europe
Stockholm eu-north-1 Europe

AWS CLI Output Format Sample

다음은 aws iam list-groups 명령어 실행 결과 예시이다.

json

aws iam list-groups --output json
{
    "Groups": [
        {
            "Path": "/",
            "GroupName": "Administrator",
            "GroupId": "GROUP_ID_1",
            "Arn": "arn:aws:iam::YOUR_ACCOUNT_ID:group/Administrator",
            "CreateDate": "2021-01-22T04:34:11+00:00"
        },
        {
            "Path": "/",
            "GroupName": "Operator",
            "GroupId": "GROUP_ID_2",
            "Arn": "arn:aws:iam::YOUR_ACCOUNT_ID:group/Operator",
            "CreateDate": "2021-02-04T06:39:10+00:00"
        },
        {
            "Path": "/",
            "GroupName": "SysAdministrator",
            "GroupId": "GROUP_ID_3",
            "Arn": "arn:aws:iam::YOUR_ACCOUNT_ID:group/SysAdministrator",
            "CreateDate": "2021-01-22T04:34:43+00:00"
        }
    ]
}

table

aws iam list-groups --output table
----------------------------------------------------------------------------------------------------------------------------------
|                                                               ListGroups                                                       |
+--------------------------------------------------------------------------------------------------------------------------------+
||                                                                Groups                                                        ||
|+------------------------------------------------------+----------------------------+-------------+-------------------+--------+|
||                        Arn                           |        CreateDate          |  GroupId    |     GroupName     | Path   ||
|+------------------------------------------------------+----------------------------+-------------+-------------------+--------+|
||  arn:aws:iam::YOUR_ACCOUNT_ID:group/Administrator    |  2021-01-22T04:34:11+00:00 |  GROUP_ID_1 |  Administrator    |  /     ||
||  arn:aws:iam::YOUR_ACCOUNT_ID:group/Operator         |  2021-02-04T06:39:10+00:00 |  GROUP_ID_2 |  Operator         |  /     ||
||  arn:aws:iam::YOUR_ACCOUNT_ID:group/SysAdministrator |  2021-01-22T04:34:43+00:00 |  GROUP_ID_3 |  SysAdministrator |  /     ||
|+------------------------------------------------------+----------------------------+-------------+-------------------+--------+|

yaml

aws iam list-groups --output yaml
Groups:
- Arn: arn:aws:iam::YOUR_ACCOUNT_ID:group/Administrator
  CreateDate: '2021-01-22T04:34:11+00:00'
  GroupId: GROUP_ID_1
  GroupName: Administrator
  Path: /
- Arn: arn:aws:iam::YOUR_ACCOUNT_ID:group/Operator
  CreateDate: '2021-02-04T06:39:10+00:00'
  GroupId: GROUP_ID_2
  GroupName: Operator
  Path: /
- Arn: arn:aws:iam::YOUR_ACCOUNT_ID:group/SysAdministrator
  CreateDate: '2021-01-22T04:34:43+00:00'
  GroupId: GROUP_ID_3
  GroupName: SysAdministrator
  Path: /

text

aws iam list-groups --output text
GROUPS  arn:aws:iam::YOUR_ACCOUNT_ID:group/Administrator     2021-01-22T04:34:11+00:00  GROUP_ID_1  Administrator     /
GROUPS  arn:aws:iam::YOUR_ACCOUNT_ID:group/Operator          2021-02-04T06:39:10+00:00  GROUP_ID_2  Operator          /
GROUPS  arn:aws:iam::YOUR_ACCOUNT_ID:group/SysAdministrator  2021-01-22T04:34:43+00:00  GROUP_ID_3  SysAdministrator  /