AWS 커맨드라인 인터페이스(awscli) 기초

  1. 소개
  2. 설치 (우분투)
  3. 인증설정
  4. 사용법
  5. 자료들

소개

AWS 커맨드 라인 인터페이스AWS Command Line Interface, awscli는 커맨드 라인(쉘)에서 아마존 웹 서비스Amazon Web Service의 API를 직접 호출할 수 있게 도와주는 명령어입니다. aws-cli 덕분에, AWS 콘솔에 들어가지 않고도 AWS 자원들을 사용할 수 있게 된것이죠. 또, AWS-SDK가 대략 어떤 것들이 있는 지 알 수 있게 됐습니다.

2. 설치

AWS CLI는 파이썬Python으로 만들어진 커맨드 라인 명령어입니다. 깃허브GitHub aws/aws-cli에서 개발중이며, 최신 버전은 릴리즈 페이지에서 확인할 수 있습니다. 본 블로그에서는 우분투에서의 설치방법만 다룹니다.

우분투Ubuntu에서 AWS CLI를 사용하기 위해서는 먼저 파이썬Python을 설치해야합니다. 우분투의 패키지 관리자인 apt-get(또는 apt)으로 python3 패키지를 설치가 반드시 필요하죠.

$ apt-get install python3
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python3 get-pip.py

pip를 사용해 awscli 패키지를 설치합니다.

$ pip install awscli --upgrade

which로 설치 경로를 확인하고 실제로 사용 가능한지 실행해봅니다.

$ which aws
/usr/local/bin/aws

$ aws --version
aws-cli/1.15.14 Python/3.5.2 Linux/4.9.87-linuxkit-aufs botocore/1.10.14

우분투Ubuntu에서 AWS CLI를 사용하기 위해서는 먼저 파이썬Python을 설치해야합니다. 우분투의 패키지 관리자인 apt-get(또는 apt)으로 python3 패키지를 설치가 반드시 필요하죠.

3. 인증설정

AWS CLI를 실제로 사용하기 위해선 AWS 계정이 필요합니다. AWS 루트 계정이나 루트 계정으로 생성된 사용자User 계정의 액세스 키와 시크릿 액세스 키를 등록해야합니다. 액세스 키를 발급하는 방법에 대해서는 AWS IAM 사용자의 액세스 키 발급 및 관리를 참고해주세요. 여기서는 액세스 키를 이미 발급 받았다고 가정합니다.

configure 명령어

로컬에 액세스 키를 등록하는 가장 쉬운 방법은 configure 명령어를 사용하는 방법입니다. aws configure를 실행하면 4개의 값을 즉석에서 지정할 수 있습니다.

$ aws configure
AWS Access Key ID [None]: AKIAJEXHUYCTEHM2D3S2A
AWS Secret Access Key [None]: 3BqwEFsOBd3vx11+TOHhI9LVi2
Default region name [None]:ap-northeast-2
Default output format [None]:

각 필드의 의미는 다음과 같습니다.AWS 액세스 키 IDAWS Access Key ID액세스 키의 ID 값을 지정합니다.AWS 시크릿 액세스 키AWS Secret Access Key액세스 키의 ID 값애 대응하는 시크릿 키를 지정합니다. 시크릿 키는 오직 발급하는 시점에만 확인할 수 있습니다.기본 리전Default region nameaws 명령어를 사용할 때 API를 호출할 기본 리전을 지정합니다. ap-northeast-2는 서울 리전입니다. 이 값은 명령어를 실행할 때 --region <REGION> 옵션으로 덮어쓸 수 있습니다.기본 출력 포맷Default output formatAPI 호출한 결과를 출력할 포맷을 지정합니다. text, json, table 중에 하나를 사용할 수 있습니다. 이 값은 명령어를 실행할 때 --output <FORMAT> 옵션으로 덮어쓸 수 있습니다.

여기서 가장 중요한 값은 AWS 액세스 키 ID와 AWS 시크릿 액세스 키입니다. 이 값이 제대로 설정되어야만 API 호출이 성공적으로 이루어집니다.

인증 정보가 저장된 설정 파일

configure 명령어로 저장한 내용은 ~/.aws/config와 ~/.aws/credentials로 나눠서 저장됩니다. credentials에는 인증과 관련된 값들이 저장되고, 그 외의 설정은 config 파일에 저장됩니다.

~/.aws/config의 내용입니다.

[default]
region = ap-northeast-2

~/.aws/credentials의 내용입니다.

[default]
aws_secret_access_key = AKIAJEXHUYCTEHM2D3S2A
aws_access_key_id = 3BqwEFsOBd3vx11+TOHhI9LVi2

configure 명령어를 사용하지 않고, 이 파일들을 직접 만들어도 똑같이 인증이 가능합니다. configure명령어는 단지 이 파일들을 생성합니다.

다중 계정 설정

앞에서 살펴보았듯이 aws configure 명령어를 사용하는 경우 [default] 섹션에 지정한 값들이 저장됩니다. AWS CLI에서는 설정 파일의 섹션을 지정하는 방식으로 다수의 계정(프로필)을 지원합니다. aws configure 명령어를 사용하는 경우, --profile <PROFILE NAME> 옵션을 지정해 다른 계정이나 사용자의 액세스 키를 등록할 수 있습니다.

$ aws configure --profile another_user
AWS Access Key ID [None]: AKIAJEXHUYCTEHM2D3S2B
AWS Secret Access Key [None]: 3BqwEFsOBd3vx11+TOHhI9LVi3
Default region name [None]: us-west-2
Default output format [None]: json

이제 설정 파일들을 출력해봅니다.

$ cat ~/.aws/credentials
[default]
aws_secret_access_key = 3BqwEFsOBd3vx11+TOHhI9LVi2 
aws_access_key_id = AKIAJEXHUYCTEHM2D3S2A 
[another_user]
aws_secret_access_key = 3BqwEFsOBd3vx11+TOHhI9LVi3 
aws_access_key_id = AKIAJEXHUYCTEHM2D3S2B 

$ cat ~/.aws/config 
[default]
 region = ap-northeast-2 
 region = us-west-2 output = json

직접 파일을 설정 파일을 작성하는 경우 두 파일의 프로필 지정 방식이 약간 차이가 있다는 점에 주의가 필요합니다. 로컬에 다수의 프로필이 등록 되어 있는 경우 aws 명령어를 실행할 때 --profile <PROFILE_NAME> 옵션을 지정해 특정 프로필을 사용할 수 있습니다. 프로필 옵션을 지정하지 않은 경우 [default] 섹션의 값이 사용 됩니다.

기본적으로 사용되는 프로필을 변경하고자 하는 경우 AWS_PROFILE 환경 변수를 지정합니다.

환경변수

환경변수를 사용하면 설정 파일을 사용하지 않고 인증 키를 임시로 사용할 수 있습니다. 다음 두 개의 환경변수에 액세스 키 ID와 시크릿 액세스 키를 지정합니다.

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

기본 리전이나 기본 출력 형식은 다음 환경 변수로 지정할 수 있습니다.

  • AWS_DEFAULT_REGION
  • AWS_DEFAULT_OUTPUT

export 명령어로 실행중인 셸에 환경변수를 등록할 수 있습니다.

$ export AWS_ACCESS_KEY_ID=AKIAJEXHUYCTEHM2D3S2A
$ export AWS_SECRET_ACCESS_KEY=3BqwEFsOBd3vx11+TOHhI9LVi2

env 명령어로 환경변수 목록을 확인할 수 있습니다.

$ env | grep AWS
AWS_SECRET_ACCESS_KEY=3BqwEFsOBd3vx11+TOHhI9LVi2
AWS_ACCESS_KEY_ID=AKIAJEXHUYCTEHM2D3S2A

환경변수에 등록된 인증키는 파일로 설정한 인증키보다 우선적으로 사용됩니다. 이 외에도 인증이나 설정값을 지정하는 방법이 몇 가지가 더 있습니다. 각 방법은 적용되는 우선 순위가 다릅니다. 자세한 내용은 공식 문서의 환경 변수와 우선 순위를 참고해주세요.

사용법

AWS CLI를 사용하면 거의 모든 AWS 상의 API를 사용하는 것이 가능합니다. 여기서는 EC2와 S3에 대해서 실행가능한 명령어 몇 개를 살펴봅니다. 모든 명령어는 공식 레퍼런스와 각 서비스에 대한 공식 문서들에서 확인할 수 있습니다.

도움말

help를 사용해 각 명령어들의 사용법을 커맨드 라인에서 바로 확인할 수 있습니다.

$ aws help
$ aws <COMMAND> help
$ aws <COMMAND> <SUBCOMMAND> help

예를 들어 ec2 명령어의 사용법은 다음과 같이 확인할 수 있습니다.

$ aws ec2 help

ec2 명령어의 하위 명령어인 describe-images의 사용법은 다음과 같이 확인할 수 있습니다.

$ aws ec2 describe-images help

ECS 명령어로 배우는 awscli

이 절에서는 AWS CLI를 사용해 살펴보기 위해 ECS와 관련된 명령어를 몇 가지 실행해보겠습니다. ECS 명령어를 호출하는 기본적인 구조는 다음과 같습니다.

$ aws ecs <SUBCOMMAND>

프로필을 변경하는 경우 aws 명령어 바로 다음에 --profile옵션을 지정해줍니다.

$ aws --profile=<PROFILE_NAME> ecs <SUBCOMMAND>

리전이나 출력 형식을 변경하는 경우에도 마찬가지 입니다.

$ aws --region=<REGION> --output=<FORMAT> ecs <SUBCOMMAND>

AWS CLI를 사용하기 위한 인증 파일 생성에 대해서는 앞서 인증 설정 절에서 설명했습니다. 여기서는 인증 설정이 되어있다고 가정합니다.

먼저 여기서는 ECS 클러스터를 하나 생성해보겠습니다. ECS 클러스터를 생성은 create-cluster서브 명령어를 사용합니다. create-cluster를 호출할 때 필수적으로 지정해야 옵션은 클러스터 이름을 지정하는 --cluster-name입니다. 서브 명령어의 옵션은 전체 명령어 맨 뒤에 붙여줍니다. 여기서는 클러스터의 이름을 awesome-ecs-cluster으로 지정해주었습니다.

$ aws ecs create-cluster --cluster-name awesome-ecs-cluster
{
    "cluster": {
        "runningTasksCount": 0,
        "registeredContainerInstancesCount": 0,
        "clusterName": "awesome-ecs-cluster",
        "pendingTasksCount": 0,
        "clusterArn": "arn:aws:ecs:ap-northeast-2::cluster/awesome-ecs-cluster",
        "activeServicesCount": 0,
        "status": "ACTIVE"
    }
}

성공적으로 클러스터가 만들어진 것으로 보입니다. ECS 웹 콘솔에서 클러스터가 생성된 것을 확인할 수 있습니다.

Leave a Reply

*