실전AWS-응용편/S3

AWS CLI 설치 및 Profile만들어 S3 동기화

aws이까이꺼 2022. 11. 30. 13:11

0. 먼얘기랴~!

이 글에서는 aws cli를 설치하고 s3 관련 명령어들을 실행해보고, 소스를 s3에 올리고 동기화해보는 내용을 담고 있습니다.

 

1. AWS CLI가 머래유?

 

AWS Command Line Interface (AWS CLI)

aws 기본 가이드 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-welcome.html

 

AWS Command Line Interface이란 무엇인가요? - AWS Command Line Interface

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

AWS Command Line Interface(AWS CLI)는 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 최소한의 구성으로 AWS CLI를 사용하면 터미널 프로그램에 있는 명령 프롬프트에서 브라우저 기반 AWS Management Console에서 제공하는 것과 동일한 기능을 구현하는 명령을 실행할 수 있습니다.

 

라고 되어있네요. 브라우저에 접속하지 않고도 aws management console과 거의 동일한 기능을 command line에서 실행할 수 있다는 거죠. aws 사용하시다보면 많이 쓰시게 될겁니다.

 

 

2. AWS Cli 설치

 

① 설치/업데이트로 이동

② 링크 클릭하여 받습니다. 현재 V2버전이네요. 다운받아 설치해줍니다.

 

저는 command를 bash를 사용하여 bash를 실행해서 명령 프롬프트로 들어가 봅니다.

$ aws --version
aws-cli/2.9.2 Python/3.9.11 Windows/10 exe/AMD64 prompt/off

명령줄에 위와 같이 입력하면 aws-cli버전을 확인할 수 있습니다.

 

3. AWS 접속을 위한  access key와 secret 만들기

aws cli를 사용하려면 먼저 어느 리젼에 어떤 접속정보를 가지고 명령을 실행할지를 먼저 셋팅하는 과정이 필요하겠죠?

당연한 겁니다. 인증도 없이 어디다 뭔일을 할지 컴터는 모르니까요. 그럼 aws cli에게 알려줘야겠죠?

여기서 AWS Identity and Access Management(IAM) 서비스를 사용합니다.

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html?icmpid=docs_iam_help_panel 

 

IAM이란 무엇입니까? - AWS Identity and Access Management

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

IAM의 사용자 메뉴를 눌러 이동합니다.

② 사용자추가를 클릭합니다.

① 사용자이름에 원하는 사용자의 이름을 입력합니다. 저는 s3-easyaws라고 정하겠습니다.

s3버킷 중 easyaws에 접속하고, s3에 대한 모든 권한을 부여하려고 하고 있습니다.

② 중간에 AWS 자격 증명 유형 선택부분이 중요합니다. 우리는 관리콘솔에서 직접 로그인하는 목적이 아니므로 반드시 엑세스키-프로그래밍 방식 엑세스를 선택합니다.

 

[다음:권한]으로 이동합니다.

등록된 그룹이 없어서 먼저 그룹생성하겠습니다. 

① 그룹이름은 S3-Admin으로 하겠습니다. S3에 대한 모든 권한을 갖고 있는 그룹을 만들어봅니다.

② 정책필터 부분에 s3를 입력해서 필터링합니다.

③ AmazonS3FullAccess권한을 선택합니다.

[그룹생성] 합니다.

 

그룹이 잘 생성되었습니다. [다음:태그]로 이동합니다.

원하는 태그정보를 입력합니다. [다음:검토]로 이동합니다.

입력한 내용을 확인하고, [사용자만들기]를 클릭합니다.

사용자가 만들어졌고, 접속할 수 있는 엑세스 키 ID와 비밀 엑세스 키가 발급되었습니다.

둘 다 복사해 놓도록 합니다. 나중에 잊어버리면 다시 키발급 하면 됩니다. 너무 쫄지는 마시고요.

 

절대주의!!!

이 엑세스키ID와 비밀엑세스키는 어디에도 노출시키면 안됩니다.

이 부분이 털리면(?) 그냥 다 내어준다고 생각하시면 됩니다.

키를 관리하는 관리자가 담당하도록 해야합니다. 정말 큰일 납니다. CI/CD를 따로 두고 해당 시스템에서만 이 키에 접근하도록 하는 것이 좋습니다.

 

아무튼 복사한 이 엑세스키 ID와 비밀 엑세스키를 어딘가에는 셋팅을 해놓아야

AWS-CLI가 그걸 가지고 동작을 하겠죠?

 

4. AWS 접속을 위한  Configure 프로필 설정하기

 

$ aws configure 명령으로 기본적으로 만들 수 도 있습니다만, 저는 그냥 직접 만드는 방법을 알려드리겠습니다.

프로필이 여러개인 경우도 그렇고 해서 저는 그냥 이 방법을 사용합니다.

저는 Window를 사용하고 있어, c:\사용자\[사용자아이디]\로 이동합니다.

 

① [새폴더]로 .aws 폴더를 만듭니다. (앞에 .(점)이 있습니다)

② 여기 안에 config, credentials 이렇게 두개의 빈 파일을 만들어 놓습니다. 텍스트를 입력할 겁니다.

먼저 config 파일에 아래와 같이 입력합니다.

[default]부분은 프로필 부분인데, 특정 프로필 즉 우리가 가지고 있는 엑세스키와 비밀키가 여러개라면 그 것을 구분지어 주는 부분으로 이부분을 프로필이라고 합니다. 대괄호로 묶여있고요. 만일 특정 프로필 지정이 없다면 바로 default프로필정보를 사용하게 되는 것입니다.

 

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

 

다음으로 

credentials 파일이고, 아래와 같이 좀전에 복사해 놓은 엑세스키와 비밀키를 입력해 놓습니다.

[s3_easyaws]
aws_access_key_id = ........................
aws_secret_access_key = ......................

credentials에 등록된 프로필을 사용해서 aws cli를 사용하게 되는 것입니다.

여기서 왜 여기는 [default]로 하지 않았는가? aws cli명령을 실행하면서 프로필지정옵션(--profile)이 있는데, 이부분을 지정안하게 되면 default프로필이 실행이 될겁니다.

하지만, 아차 실수로 내가 원하는 프로필이 아닌데 그대로 명령이 실행되어 버리는 경우

한마디로 작살날수 있습니다.

그래서 이부분에는 default를 가능하면 사용하지 않고, 꼭 지정할수 있도록 합니다. 

이제 준비가 다 되었습니다. 

 

명령줄에 아래 명령을 한번 입력해봅니다.

aws s3 ls --profile s3_easyaws

aws : 명령

s3: s3에 대한 명령

ls : 목록조회

--profile [프로필명] : 해당 프로필 정보로 조회

 

이런 의미입니다.

 

결과목록에 우리가 만들었던 s3버킷이 보입니다.

여기 까지 왔으면 이제 거의 다 됐습니다.

 

5. S3에 소스 배포해보기

지난 시간에 memory-game 을 s3에 배포해서 실제 사이트를 오픈했었는데요.

git clone https://github.com/kubowania/memory-game

위 게임이랑 같은 분이 Youtube에서 만드신 게임입니다.

https://www.youtube.com/watch?v=lhNdUVh3qCc 

 

오늘은 게임 하나 더 얹어보죠. 테트리스 ㅎ

git clone https://github.com/kubowania/Tetris

 

① git 으로 받은 것이 잘 동작하는 지 한번 구동시켜볼게요.

② 저는 vscode에서 static한 정적 사이트는 LiveServer라는 vscode extention으로 구동시켜보고 있습니다.

잘 되네요.

aws cli로 s3에 파일을 업로드하거나 다운로드 할 수 있고 동기화가 가능한데요.

기본 명령어 구조는 이렇습니다.

 

aws s3 [cp/sync] 원본명 타켓명

 

cp는 복사이고 sync는 동기화하는 것이고요. cp를 사용할때는 하위폴더구조까지 하려면 --recursive 옵션으로 하면 됩니다. 원본과 타켓의 위치를 바꾸는 것에 따라서 다운로드 업로드가 됩니다. 쉽죠잉?

 

먼저 cp로 올려보겠습니다.

aws s3 cp --profile s3_easyaws ./Tetris s3://dev.easyaws.click/Tetris --recursive --exclude ".git*"

cp 옵션으로 올리고 --profile으로 프로필 지정하고 원본 폴더는 현재 폴더 하위의 Tetris폴더이고, 

다음 s3버킷의 위치를 지정하는데,

만일 버킷명 뒤에 s3://ev.easyaws.click이라고만 치면 큰일나겠죠? 그럼 그냥 s3버킷의 루트에 올라가게 되거든요.

반드시 올라가기를 원하는 폴더를 잘 지정해주시기 바랍니다.

전체 원본을 다 가지고 있다면 머 전체를 새로 다 엎어버리면 원복은 되겠죠? 그리고, s3에도 버젼관리 지원기능도 있습니다. 아무튼. 버킷명 뒤에 올라가는 파일 위치 같이 맞춰주시는 거 잊지마시고요.

그리고 --recursive로 하위폴더까지 다 올려줍니다. --exclude 옵션으로 해서 업로드 배제할 파일을 지정해 줍니다.

그림 배포가 잘 되었는지 확인해봅니다.

캬... 잘된다! 벌써 게임 2개는 올렸네요. ㅋ

근데 보다 보니 테트리스 게임 영역에 구분지어주는 선이 하나 있었음 하는데요.

이걸 좀 수정해볼게요. 

/* css/style.css */
...
[84줄] .grid > div {border:1px solid gray}
...

수정하고 저장하고 다시한번 배포합니다.

이번에는 cp로 하지 않고 sync로 해서 변경된 파일만 올려봅니다.

 

aws s3 sync --profile s3_easyaws ./Tetris s3://dev.easyaws.click/Tetris --exclude ".git*"

cp와 다른 점은 

cp가 sync로 바뀌었고, 뒤에 --recoursive 가 없어졌다는 것 말고는 없습니다.

변경된 1개의 파일만 올라간것 보이시죠?

그럼 반영확인해볼게요.

잘 안나오시는 분은? cloudfront에서 무효화 invalidation 기억하시죠? 그거 하시면 됩니다. ㅎ

자 이것으로 s3에 파일 올린다고 aws console 접속해서 s3로 굳이 안들어가도 수월하게 할수 있다 해봤네요.

 

 

 

AWS CLI 설치 및 Profile만들어 S3 동기화 대충 버젼

1. cli 설치하고

2. iam에 가서 사용자계정하나 만들고 엑세스키와 비밀키 복사해서

3. .aws폴더에 credential 파일에 프로필로 등록해놓고,

4. 정보 넣은 다음

5. aws s3 [cp/sync] --profile [프로필명] [원본] s3://[버킷주소]/[타겟] [--recursive] --exclude ".git*"

6. 끝. ㅎ

아휴 이거 머 별거아녀~ 머 이까이꺼 머 대충 머. 

 

주의!

내용상에 잘못된 정보도 있을 수 있습니다. 내가 아는대로 적는거라.

그리고, 심한 사투리와 반말이 무자비하게 섞여있으니, 임산부 및 노약자는 유의하시기 바랍니다. 알겄쥬?

728x90
반응형