NotePad

AWS CLI, AWS SAM CLI 설치하기 (on M1 Mac)

졸려질려 2022. 6. 20. 17:43
반응형
설치 환경
- M1 Macbook Pro (2021)
- macOS Montrey 12.3.1
 본 글은 AWS CLI, AWS SAM CLI 공식문서를 옮긴 글입니다.


1. AWS CLI

 AWS CLI 는 명령어를 통해 AWS 서비스와 상호작용할 수 있도록 해주는 오픈 소스 툴이다. 최소한의 설정만 해주면, AWS CLI 와 명령어를 사용해서 브라우저의 AWS 관리 콘솔과 같은 기능을 사용할 수 있다. 명령어를 사용할 수 있는 터미널 프로그램은 다음과 같다.

- Linux shells : bash, zsh, tcsh
- Windows command line : Powershell, 명령 프롬프트
- Remotely(기타 원격) : EC2 인스턴스의 명령어를 실행할 수 있는 PuTTY, SSH, AWS Systems Manager

 AWS 관리 콘솔의 모든 IaaS(Infrastructure as a Service) AWS administration, management, 그리고 access fuctions 를 AWS API 와 AWS CLI 를 통해 사용할 수 있다. 새로운 AWS IaaS 기능들과 서비스는 출시 직후나 출시 후 180일 이내에 AWS API 와 AWS CLI 를 통해 전체 AWS 관리 콘솔을 제공한다.

 AWS CLI 는 AWS 서비스의 public API 들에 직접적으로 접근할 수 있는 권한을 제공한다. AWS CLI 를 통해서 AWS 서비스들을 모두 탐색해볼 수 있고, 리소스를 관리할 수 있는 쉘 스크립트를 개발할 수 있다. 추가로, Low-level 의 API 명령어 외에도, 사용자의 커스텀 기능을 제공한다. 커스텀 기능은 복잡한 API 가 있는 서비스 사용을 단순화할 수 있는 High-level 명령어를 포함시킬 수 있다.

1) AWS CLI Version 1

  AWS CLI Version 1(이하 'Version1') 은 오리지널 AWS CLI 이고, 지금까지 지원되고 있다. 하지만, "AWS CLI Version 2" 에서 추가된 새로운 주요 기능들은 Version1 에서 구동되지 않는다. 새 기능들을 사용하고 싶다면, AWS CLI Version 2 를 설치해야만 한다. "Version1" 은 Python 으로 빌드 되었으므로, Python 의 호환 버전을 설치하는 것이 필수적이다

2) Install, Update, Uninstall AWS CLI Version 1 (on MacOS)

 Version1 은 다양한 OS 에서 설치가 가능하나, 필자의 개발 환경은 macOS 이므로 본 글에서는 macOS 내에서 Version1 을 설치하는 방법에 대해서만 옮긴다. 다른 OS 에서 설치하는 방법은 링크를 참고하면 된다.

2-1. 사전 작업

 위에서 언급했듯이, AWS CLI Version 1 은 Python 기반으로 빌드되었다. 따라서, CLI 를 사용하기 위해서는 Python 이 설치되어 있어야한다. 그 중에서도 Python 3.6 이상이 설치되어 있어야 한다.

 참고로, macOS 에서 Python3 버전을 확인하는 명령어는 "python3 --version" 이다.


2-2. pip 를 사용해서 설치

 CLI 를 설치하는 방법은 2가지가 있다. 첫번째는 Bundle Installer 를 다운 받아서 설치하는 방법이고, 두번째는 pip 를 사용해서 설치하는 방법이다. 최신 macOS 는 pip 를 기본적으로 제공하고, 설치 방법이 비교적 간단해서 pip 로 설치하는 방법을 옮긴다.

 만약 pip 가 설치되어있지 않은 상태라면, Python Packaging Authority 에서 제공하는 스크립트를 통해 설치가 가능하다. "curl" 명령어를 통해서 설치 스크립트를 다운 받을 수 있다.

$ curl -O https://bootstrap.pypa.io/get-pip.py

 위 명령어에서 "-O" 는 숫자 0이 아니라, 알파벳 대문자 "O" 이다. 해당 옵션은 다운 받는 파일과 같은 이름으로 명령어를 실행하는 현재 위치에 저장시켜준다. 스크립트를 다운받은 후에, "python" 이나 "python3" 명령어로 스크립트를 실행시킨다.

$ python3 get-pip.py --user

 "--user" 옵션을 끝에 붙인 것은 설치된 pip 를 "~/.local/bin" 경로에 위치시키기 위함이다. 이제 pip 가 준비되었다면, 드디어 CLI 를 설치할 차례이다. 

$ pip3 install awscli --upgrade --user

 위 명령어를 사용해서 최신 버전의 AWS CLI 를 다운받는다. 만약, 특정 버전의 AWS CLI 를 다운받고 싶다면, 명령어 중에 "awscli" 의 뒷부분에 "==" 기호를 붙여서 원하는 버전을 넣어주면 된다.

$ pip3 install awscli==1.16.312 --upgrade --user

 터미널 프로그램마다 인용 규칙(Quoting Rules) 이 다를 수 있으니, 각 터미널에 맞는 인용 규칙으로 특정 버전명을 명시해주면 된다. 설치를 마쳤으니, 버전을 확인하는 명령어를 통해서 잘 설치되었는지 확인해본다.

$ aws --version

오... aws 를 찾을 수 없다고 한다. 그럼 설치가 잘못되었나 싶어 다시 설치하는 명령어를 입력한다.

"already satisfied", 이미 설치되었다고 한다. 그렇다면 환경변수 설정이 되어있지 않은 상태라 볼 수 있다. 다행히 공식문서에서 AWS CLI 환경 변수를 추가하는 방법도 기술되어 있다.


2-3. macOS 명령어 경로에 AWS CLI Version 1 실행 파일 추가

 설치 직후에 "aws" 명령어가 먹히지 않은 이유는, 환경 변수에 "aws" 가 추가되어 있지 않기 때문이다. 다른 예로는 Java 를 설치할 때를 생각하면 된다. 우선 환경 변수를 추가하기 위해서는 "aws" 실행 파일이 어디에 있는지 경로를 알아야한다. 보통 Python 프로그램을 설치하면 Python 이 설치된 곳에 해당 프로그램이 설치된다.

 기본적으로 Python 은 "~/Library/Python/" 에 있다. 터미널에서 다음 명령어를 입력해보면 알 수 있다.

$ ls -l ~/Library/Python

 설치된 버전명의 폴더가 있을 것이고, 그 안에서 "bin" 폴더를 들어가면 Python3.9 로 실행시킬 수 있는 프로그램들이 있다.

 방금 설치했던 aws 가 있는 것을 확인했다. 이게 정말 AWS CLI 인지 확인해보기 위해 위 파일을 직접 실행시켜본다.

 버전을 확인하는 것까지 가능한 것을 보니, 방금 설치한 AWS CLI 가 맞다. 그럼 이제 터미널에서 "aws" 만 쳤을 때, "~/Library/Python/3.9/bin/aws" 가 실행되도록 환경변수를 설정해줘야한다. 환경변수는 터미널마다 가지고있는 Shell Profile Script 에 명시해야한다.

[ 각 Shell 의 Profile Script ]
- Bash : ".bash_profile", ".profile", ".bash_login"
- Zsh : ".zshrc"
- Tcsh : ".tcshrc", ".cshrc", ".login"

 이 중에서 필자는 "zsh" Shell 을 사용하고 있으므로, ".zshrc" 파일 안에 명시를 해주었다. vi, nano, VSC 와 같은 Text Editor 프로그램을 사용해서 Profile Script 를 열어준다. 그리고 파일 내부에 환경 변수를 명시해준다.

# AWS CLI
export PATH="/Users/choseongyun/Library/Python/3.9/bin/:$PATH"

 필자는 "aws" 파일이 "/Users/choseongyun/Library/Python/3.9/bin/" 폴더 안에 있었기 때문에, 위와 같이 경로를 적어주었다. 경로 안에 사용자 이름이 포함되어 있기 때문에 본 글을 읽는 사람마다 다른 경로가 나타날 것이다. 따라서, "aws" 파일이 있는 경로를 적어주면된다.

# AWS CLI
export PATH="[AWS_파일_경로]:$PATH"

 위 스크립트의 뜻은 [AWS_파일_경로] 에 적힌 경로값을 "PATH" 변수로 정의한다 는 뜻이다. 즉, Shell 안에서 "aws" 명령어만 입력했을 때, 각 PATH 에 "aws" 파일이 있는지 확인하고, 존재하는 "aws" 파일을 실행시켜준다. 여기서 [AWS_파일_경로] 의 마지막은 폴더명이 되어야한다. "aws" 까지 경로에 적어주게 되면 인식하지 못한다.

 스크립트를 추가해준 후에, Shell 을 재시작하거나 다음 명령어를 실행시켜서 Profile Script 를 다시 적용 시켜주어야한다.

$ source ~/.zshrc

 각 Shell 에 맞는 Profile Script 를 source 시켜서 다시 읽어오게끔 한다. 이제 "aws --version" 명령어를 입력하면 원하는 버전명을 확인할 수 있다.

$ aws --version

3) AWS CLI 삭제

 추후에 AWS CLI 를 삭제하고 싶을 때가 있을 수 있다. 그 때는 pip 명령어를 통해서 삭제시켜주면 된다.

$ pip3 uninstall awscli

2. AWS SAM & AWS SAM CLI

 AWS Serverless Application Model (AWS SAM) 이란, AWS 위에서 Serverless Application 을 빌드하기 위해 사용하는 오픈 소스 프레임워크를 뜻한다. 여기서 Serverless Application 이란, Lambda functions, Event sources, 그리고 Task 를 수행하는데 필요한 리소스들을 혼합한 것을 의미한다. Severless Application 은 Lambda function 이상의 개념이며, API, Database, Event source mappings 와 같은 추가적인 리소스들을 포함하고 있다.

 AWS SAM 은 Serverless Application 을 정의하기 위해 사용할 수 있다. AWS SAM 가 다음 기능들을 가지고 있기 때문이다.

- AWS SAM template specification : Serverless Application 을 정의하는 명세 기능이다. 간결한 문법으로 Serverless Application 에서 사용할 수 있는 기능, API, 권한, 설정, 이벤트 등등을 명세할 수 있다. 그리고 AWS SAM template file 을 사용하여 단일이고, 배포 가능하며, 버전이 지정된 엔티티(Serverless App) 에서 작업할 수 있다. 더 자세한 사항은, 링크를 참고하면 된다.

- AWS SAM command line interface (AWS SAM CLI) : AWS SAM template 에서 정의한 Serverless Application 을 빌드하는 기능이다. SAM CLI 는 명세서에 따라 SAM template 파일이 제대로 생성되었는지 확인해주고, 로컬에서 Lambda functions 을 실행시켜주며, 단계적으로 Lambda function 을 디버그 해주고, AWS Cloud 에 Serverless Application 을 패키징 및 배포를 해주는 기능들을 제공한다. AWS SAM CLI 에 대한 상세 정보와 명령어는 링크를 참고하면 된다.

1) AWS SAM CLI 설치

 AWS CLI 와 마찬가지로, SAM CLI 도 OS 별로 설치가 가능하다. 본 글은 macOS 설치법만 옮기므로, 다른 OS 에서 설치 방법은 링크를 참고하면 된다. macOS 에서 SAM CLI 설치 단계는 크게 다음과 같다.

  1. AWS 계정 생성
  2. AWS IAM permission 과 AWS credential 설정
  3. Docker 설치 ( 로컬에서 애플리케이션을 테스트 하기 위한 사전 작업 )
  4. Homebrew 설치
  5. AWS SAM CLI 설치

1-1. AWS 계정 생성

 AWS 계정을 가지고 있지 않다면, AWS 공식 홈페이지에 접속해서 회원가입을 해주면 된다. 자세한 방법은 링크를 참고한다.

1-2. AWS IAM permission 과 AWS credential 설정

 AWS SAM 을 사용하는 IAM 사용자는 필요한 AWS 서비스 호출과 AWS 리소스를 관리할 수 있는 충분한 권한을 가지고 있어야한다. 충분한 권한을 가지는 가장 간단한 방법은 관리자 권한을 부여하는 것이다.

[ IAM ( Identity and Access Management ) ]
 AWS 에 처음으로 가입하고 로그인하게 되면, root user 계정으로 접속하게 된다. root 라는 단어는 Windows 를 주로 사용한 사람에게는 낯설게 느껴지겠지만, Linux 나 macOS 계열에서는 관리자를 뜻한다. 즉, root user 는 Windows 의 administrator 를 뜻한다. 그래서 AWS 에 root user 로 접속을 하면, 해당 계정에서 생성한 모든 서비스 및 인스턴스에 접근 및 제어가 가능하다.
 root user 하나로 생성한 모든 인스턴스에 접근이 가능하다는 점은 편리하다고 느껴지겠지만, 보안 측면에서는 가장 위험하기도 하다. root user 를 뺏기면 그 안에 모든 것들을 뺏기는 것과 다름이 없기 때문이다. 그래서 AWS 에서는 root user 가 아니라, root user 의 권한을 가진 "별도의 user" 로 AWS 업무를 보는 것을 매우 추천한다. 여기서 "별도의 user" 를 IAM user 라 한다.
 AWS IAM 이란, AWS 리소스에 안전하게 접근할 수 있는 웹 서비스를 뜻하며, IAM 을 통해 인증을 해주거나 리소스에 접근 권한을 부여해줄 수 있다. 즉, AWS 는 root user 로 업무를 보기보다는 IAM 을 통해 별도의 user 계정에 권한을 부여해서 해당 계정으로 업무를 보는 것을 추천한다.

 AWS SAM CLI 를 사용하기 위해 권한이 많이 필요하기 때문에, 관리자용 IAM user 를 만들어보고자 한다. 공식 문서에서도 administrator user 를 만드는 방법에 대해 기술한 것이 있어 옮겨적는다.

1. IAM console에 Root user(기본 AWS 계정) 로 로그인
2. 다음 과정을 통해 생성할 IAM admin user 계정에 Billing data 권한 부여
  2-a. 상단 내비게이션 바에서 계정 이름을 클릭하면 나오는 메뉴에서 "계정(Account)" 선택

  2-b. 이동한 페이지(계정 페이지) 아래에서 "결제 정보에 대한 IAM 사용자 및 역할 액세스 (IAM User and Role Access to Billing Information)" 우측에 "편집 (Edit)" 버튼 클릭

 

  2-c. "IAM 액세스 활성화 (Activate IAM Access)" 체크박스 선택 후, "업데이트 (Update)" 클릭

  2-d. 상단 내비게이션 바에서 "서비스 (Service)" 클릭 후, "IAM" 을 찾아서 선택한 다음 IAM console 로 복귀

3. IAM console 의 좌측 패널에서 "사용자 (Users)" 선택 후, "사용자 추가 (Add users)" 클릭

4. "사용자 세부 정보 설정" 페이지에서 다음 과정 수행

  1. "사용자 이름 (User name)" 을 "Administrator" 로 입력
  2. "암호 - AWS 관리 콘솔 액세스 (AWS Management Console access)" 의 체크박스 선택
  3. "사용자 지정 비밀 번호 (Custom password)" 선택, 원하는 비밀번호 입력
  4. "다음: 권한 (Next: Permissions)" 버튼 클릭
  5. 기본적으로, AWS 는 새로운 유저가 처음 로그인할 때 새 비밀번호를 생성하도록 강제한다. "비밀번호 재설정 필요" 의 체크박스를 해제함으로써 새 비밀번호를 계속 생성하지 않을 수 있도록 설정이 가능하다.

5. "권한 설정 (Permissions)" 페이지에서 다음 과정을 수행

"그룹에 사용자 추가 (Add user to group)" 선택 후, "그룹 생성 (Create Group)" 버튼 클릭

그룹 생성 다이얼로그 창에서 "그룹 이름 (Group name)" 을 "Administrators" 로 입력한 후에, "AdministratorAccess" 정책을 선택하고 "그룹 생성 (Create group)" 버튼을 클릭

 다시 돌아온 기존 권한 페이지에서 사용자 그룹의 목록 확인, 만약 보이지 않는다면 위에 "새로 고침 (Refresh)" 버튼을 클릭하여 목록을 갱신해본다. 잘 생성되었다면 "다음: 태그 (Next: Tags)" 버튼을 클릭

6. (선택, Optional) "태그 (Tags)" 페이지에서, 생성 중인 user 계정에 대한 메타데이터를 키-값 형식으로 추가할 수 있다. 자세한 내용은 링크 참고

7. "검토 (Review)" 페이지에서 지금까지 입력한 사항들이 잘 적용되었는지 확인한다. 이상이 없다면, "사용자 만들기 (Create user)" 버튼을 클릭한다.

 위의 과정으로 Administrator 권한을 가진 IAM user 를 생성할 수 있다. 이에 추가로 AWS credential 도 설정을 해줘야한다. AWS credential 은 간단하여 링크로 대체한다.

1-3. Docker 설치 (Optional)

 

Docker 입문 (on M1 Mac) : Docker, Docker Install, Docker Basic Command

본 글은 이고잉님의 "생활코딩 Docker 입구 수업"을 보면서 실제로 해보고, 그 과정을 정리해둔 글이다. 글의 순서 또한 강의 영상의 순서에 따라 정리하였고, 글의 내용은 "생활코딩 Docker 입문수

choboit.tistory.com

1-4. Homebrew 설치

 macOS 에서 AWS SAM CLI 는 Homebrew 를 통해 설치하는 것을 권장한다. 따라서, 다음 명령어를 터미널에 입력해서 Homebrew 를 설치해준다.

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

1-5. AWS SAM CLI

 드디어 AWS SAM CLI 설치 차례이다. 방금 설치한 Homebrew 를 사용하여 AWS SAM CLI 를 설치한다. 다음 명령어를 순서대로 실행한다.

$ brew tap aws/tap
$ brew install aws-sam-cli

 설치가 완료된 후에, "sam --version" 명령어를 통해서 잘 설치되었는지 확인할 수 있다.


2) AWS SAM CLI 업데이트

 AWS SAM CLI 의 버전을 업그레이드 해야한다면, Homebrew 를 통해 쉽게 할 수 있다.

$ brew upgrade aws-sam-cli​

3) AWS SAM CLI 삭제

 삭제 또한 Homebrew 를 통해 쉽게 할 수 있다.

$ brew uninstall aws-sam-cli
반응형