이동욱 님(a.k.a 향로, jojoldu) 께서 집필하신 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 책을 읽고 공부하던 중
AWS 를 시작하는 과정이 생각보다 많아서 따라만 하면 나중에 까먹을 것 같아 나름대로 정리를 해보려 합니다.
로그인은 되어 있다고 가정하고 진행하니 참고바랍니다.
1. 지역구 변경
해당 부분은 책과 거의 똑같지만, 나중에 행여나 놓칠까 해서 남겨놓은 내용입니다. AWS에 로그인하면 오른쪽 위에 현재 설정되어 있는 지역이름이 표시됩니다.
저의 경우, "버지니아 북부" 로 되어 있어서 아래 과정을 거쳐 "서울" 로 변경했습니다. 한 번 적용해놓으면 이후 로그인할 때는 지역구가 유지됩니다.
2. EC2 생성하기
EC2 는 AWS 에서 만들어주는 서버 1대와 같다고 생각하시면 됩니다. EC2 인스턴스를 1개를 생성하게 되면, 1대의 서버를 할당 받는 것과 동일한 효과를 가져옵니다. 그리고 그 서버에 소스코드를 업로드해서 웹 애플리케이션을 실행하면 됩니다.
그럼 EC2를 아래 과정을 따라 만들어 보겠습니다.
2-1. EC2 인스턴스 생성
가장 먼저, EC2 인스턴스를 생성해 보겠습니다.
먼저, 상단에 EC2 라는 버튼을 클릭하게 되면, 아래와 같은 화면이 나타나게 됩니다.
화면 가운데에 있는 "인스턴스 시작" 버튼을 클릭하면, EC2 인스턴스를 생성할 수 있는 화면으로 이동합니다.
2-2. EC2 이름 설정
생성할 EC2 의 이름을 지정합니다. 프리티어의 경우, 1대의 EC2 만 사용하는 경우, 1년 동안 24시간 무중단 서비스를 운영할 수 있습니다.
따라서, 이름을 자유롭게 설정하시면 됩니다.
단, 추후에 EC2를 여러 개 사용하는 경우가 생긴다면 각 EC2의 역할을 나타낼 수 있는 이름으로 잘 설정하시는 것을 추천합니다.
2-3. OS 설정
생성할 EC2 인스턴스에 사용될 OS 환경을 지정합니다. 일반적으로 Amazon Linux 중에 하나를 선택하게 되는데, 프리티어 계정의 경우,
반드시 "프리 티어 사용 가능" 이라는 문구가 보이는 OS를 선택합니다.
전 기본으로 설정되어 있는 "Amazon Linux 2023 AMI" 사용하도록 하겠습니다.
그리고, 하단에 "아키텍처" 에는 (x86)으로 되어있는지 확인하도록 합니다.
ARM 이라고 되어있는 아키텍처가 존재하는데, 추후에 서비스 환경을 구성할 때 필요한 package를 다운받으려고 할 때, ARM 아키텍처의 경우, 설치가 안되는 package 가 존재할 수 있으니 반드시 x86을 사용하도록 합니다.
2-4. 인스턴스 유형 선택
EC2 인스턴스의 CPU, Memory 등 사양을 결정하기 위한 인스턴스 유형을 선택합니다.
프리 티어의 경우, "t2.micro" 만 사용이 가능하니, t2.micro 로 세팅되어 있는지만 확인하고 넘어가줍니다.
2-5. 네트워크(보안그룹) 설정
해당 부분은 서버의 방화벽을 설정하는 것과 동일합니다. AWS 환경에선 방화벽 대신 보안그룹 용어를 사용하며, EC2 인스턴스에 어떤 port를 어떤 IP에 대해 허용할 건지 인바운드 규칙 등을 설정할 수 있습니다.
이번 설정에선 EC2 서버에 접속하기 위한 ssh 와 웹 서비스 접속포트인 8080 2개만 설정해보도록 하겠습니다.
일단, 많은 정보가 보이지만, 보안 그룹 설정을 위해서 먼저 우측 상단에 "편집" 버튼을 클릭해줍니다.
편집 시, 아래 정보들을 편집할 수 있게 됩니다. 다른건 다 기본값을 사용하고 "보안 그룹 이름"과 "설명" 만 작성해줍니다.
EC2 이름과 마찬가지로 어떤 EC2에 대한 보안 그룹인지를 명시해주면 나중에 관리에 용이하니 참고주세요.
이제 아래를 보면 "인바운드 보안 그룹 규칙" 에 "보안 그룹 규칙 1"이 편집 가능한 상태로 변합니다.
첫 번째 규칙으로 ssh를 아래와 같이 설정해줍니다.
ssh 에 대한 보안그룹 설정 시에는 주의사항이 있습니다.
ssh 는 리눅스 서버로 직접 접속하는 프로토콜이기 때문에, 아무에게나 함부로 들어갈 수 있게 해주면 안됩니다.
따라서 해당 프로토콜은 "소스 유형" 에서 반드시 "내 IP" 설정해주어, 현재 자신이 접속하고 있는 IP에 대해서만 접속이 가능하도록 설정해야합니다.
추후, EC2 작업을 현재 장소가 아닌 다른 장소에서 하게 된다면,
그 때 마다 해당 보안그룹의 소스유형을 재설정하는 것이 보안에 좋습니다.
위와 같이 ssh 설정이 되었다면, 하단에 있는 "보안 그룹 규칙 추가" 를 클릭합니다. 그럼 2번째 보안 그룹 규칙을 설정할 수 있습니다.
2번 째 보안 그룹 규칙으로는 웹 서비스 포트인 8080을 아래처럼 등록해줍니다.
해당 보안 그룹 규칙은 앞서 설정했던 ssh와 다르게, 서버로 직접 접속하는 것이 아닌 서버에서 서비스하는 웹서비스에 접속하기 위한 포트이기 때문에, "소스 유형"을 "위치무관"으로 설정해줍니다.
아래 보면 모든 IP 주소에서 엑세스 하도록 되어있다고 경고표시가 나타나지만, 이 포트는 서버로 직접 접속하는 포트가 아니기 때문에 무시해도 무방합니다.
2-6. 스토리지 구성
EC2에 구성할 디스크 용량을 설정하는 부분입니다.
기본 값은 8GB로 되어있지만, 프리티어의 경우 30GB까지 사용할 수 있으니 30GB로 수정해줍니다.
2-7. 인스턴스 시작
위 설정을 모두 마쳤다면, 우측 영역에 아래와 같은 정보가 보입니다.
(문맥이 좀 이상한데, 인스턴스 생성을 시작할 때 부터 있던 정보입니다...)
위 영역에서 인스턴스 개수가 1인지 확인하고, 아래 "인스턴스 시작" 을 클릭합니다.
2-8. 키 페어 생성
키 페어 파일은 EC2 서버에 직접 접속할 수 있게 하기 위한 일종의 인증파일 이라고 생각하시면 됩니다.
즉, 해당 파일이 있으면, 누구나 지금 생성하는 EC2에 접속할 수 있습니다.
의도치 않게 악의적인 공격에 노출될 수 있으니 키 페어 파일은 유출되지 않게 관리해 주시는 것이 중요합니다.
(반대로, 해당 파일이 없어지면 자신의 EC2 서버에도 접속 할 수 없으니 잃어버리시면 안됩니다.)
위 팝업에서 키 페어 이름을 설정한 후, 아래 "키 페어 생성" 버튼을 클릭합니다.
위 팝업은 EC2 생성 시, 별도의 키 페어 파일을 설정하지 않았기 때문에 나타납니다. 즉, 특정 키 페어 파일을 EC2 생성 과정에서 설정했다면, 위 팝업은 나타나지 않으니 참고 바랍니다.
키 페어 생성 버튼을 클릭하면, pem 파일이 pc에 다운로드 됩니다. 이 파일을 가지고 EC2에 직접 접속할 예정입니다.
키 페어 생성 버튼을 클릭하고, 다시 인스턴스 시작 화면으로 되돌아 간다면 앞서 설명한 2-7 과정을 반복합니다.
2-9. 인스턴스 시작 확인
인스턴스가 시작되면 아래 화면이 보여집니다.
위 화면이 나타난다면, EC2 인스턴스가 정상적으로 생성됐음을 의미합니다. 인스턴스가 잘 생성되는지 확인하기 위해 화면에 표시된
인스턴스 ID(i-09a813f6419682881) 를 클릭해줍니다. 그럼 아래와 같이 인스턴스 목록이 조회됩니다.
방금 생성한 EC2 인스턴스가 잘 생성되어 실행 중 상태임을 확인할 수 있습니다.
다만, 상태검사 항목이 현재 "초기화" 상태가 되어 있습니다.
-- todo. 초기화 상태가 뭘 의미하는지 확인해서 작성
시간이 좀 지나서 화면 상단에 있는 새로고침 버튼(동그라미 화살표 모양)을 클릭하면 아래 처럼 상태 검사 결과가 확인됩니다.
이제 인스턴스 하단의 정보를 보겠습니다.
위 정보는 EC2 인스턴스가 가지는 고유 정보입니다.
위에 퍼블릭 IPv4 주소 가 서버의 공인 IP 역할을 하고, 프라이빗 IPv4 가 내부 IP 역할을 하게됩니다.
2-10. 인스턴스 재시작하기
프리 티어 계정인 경우, EC2 의 한 달 사용 시간이 750 시간을 넘으면, 추가로 요금이 부과되게 됩니다.(완전한 프리는 아닌거죠...)
그래서 아무리 무중단 서비스를 운영할지라도, 장시간 작업을 할 수 없는 경우 같을 때에는 인스턴스를 중지해놓는 것이 요금 부과(?) 를 예방할 수 있습니다.
그래서 이번엔 EC2 인스턴스를 중지시켰다가 다시 실행해보겠습니다.
먼저, 작업할 인스턴스의 맨 오른쪽 체크박스를 체크하고, 인스턴스 목록 위에 "인스턴스 상태" 라는 버튼을 클릭하면 아래와 같이 인스턴스를 작업할 수 있는 버튼이 활성화됩니다.
여기서 "인스턴스 중지" 버튼을 클릭해보겠습니다.
중지에 성공하면 인스턴스 상태가 중지 중으로 변경되고, 일정 시간이 지나면 중지 됨 으로 변경됩니다.
이 상태에서 다시 맨 오른쪽 체크박스를 클릭하고, 인스턴스 상태 버튼을 클릭하면 아래와 같이 인스턴스를 시작할 수 있는 버튼이 활성화 됩니다.
시간이 지나면, 인스턴스가 다시 시작됩니다.
여기서 다시 인스턴스의 정보를 자세히 보겠습니다.
위 정보와 동일한 듯 보이지만, 사실 퍼블릭 IPv4 주소의 끝자리가 바뀌었음(21 -> 60)을 확인할 수 있습니다.
EC2 를 생성할 때, 특별하게 설정해주지 않는다면 이렇게 인스턴스를 재시작 할 때 마다 IP가 변경됩니다.
나중에 도메인주소를 실제로 매핑할 때라도 위와 같이 공인IP가 변경되면 문제가 되겠죠?
그래서 저희는 이제 지금 만든 EC2 인스턴스에 IP를 고정으로 할당해주려고 합니다.
3. EIP(탄력적 IP) 설정
EC2 인스턴스가 재시작되면 해당 인스턴스에 할당하는 고정IP가 변경됨을 확인했습니다.
우리는 IP를 고정으로 부여하기 위해 고정IP를 할당해줄건데요. AWS 에서는 이를 EIP(탄력적 IP, Elastic IP) 라고 부릅니다.
3-1. EIP 생성
EIP는 아래 메뉴에서 생성이 가능합니다.
해당 메뉴를 클릭하면 아래 화면이 나타납니다.
우측 상단에 표시된 "탄력적 IP 주소 할당" 버튼을 클릭해주시면, EIP를 할당받기 위한 화면이 나타납니다.
여기선 특별하게 설정할 건 없고, "네트워크 경계 그룹" 이 맨 앞에서 설정한 지역에 맞게 설정되어 있는지 정도만 확인해주시고,
우측 하단에 "할당" 버튼을 클릭하면 됩니다.
그러면 아래 처럼 할당이 완료됐다는 메세지와 함께, EIP 목록에 방금 생성한 EIP가 확인됩니다.
여기서 한 가지 주의할 점이 있습니다.
바로 이 상태에서 곧바로 "이 탄력적 IP 주소 연결" 버튼을 통해 바로 EC2 인스턴스와 연결을 맺어줘야 한다는 점입니다.
우리는 학습용으로 1년 짜리 프리티어 계정을 사용하고 있는데, 탄력적 IP는 그거와 무관하게 EC2 와 연결되어 있지 않다면 요금이 부과되게 됩니다. 즉, 만들자마자 바로 연결안하고 며칠 지나면 그만큼의 요금을 지불해야 한다는 것이죠.
이런 사태를 방지하기 위해 바로 "이 탄력적 IP 주소 연결" 버튼을 클릭해줍니다.
그럼 아래 처럼 EC2 인스턴스를 선택할 수 있습니다. 우리가 앞에서 만든 EC2 인스턴스를 선택해줍니다.
인스턴스를 선택해주고, 하단에 "연결" 버튼을 클릭해줍니다.
위 처럼 "탄력적 IP 주소가 연결되었습니다." 라는 메세지가 나타나면, EC2 인스턴스와의 연결이 성공한 것입니다.
그럼 정말 잘 연결되었는지, 인스턴스 메뉴에 가서 확인해보겠습니다.
3-2. EIP 설정 확인(EC2 재시작 해보기)
위에서 생성한 EIP 가 정말 EC2에 잘 연결되었는지 확인해보겠습니다.
인스턴스 메뉴로 가서 앞에서 생성했던 EC2 인스턴스의 정보를 보겠습니다.
아직 퍼블릭 IPv4 주소의 정보가 이전 정보를 가지고 있는 것 같습니다.
"2-10. 인스턴스 재시작하기" 에서 처럼 인스턴스를 재시작해보고, 다시 인스턴스 세부정보를 확인해보겠습니다.
재기동 후에 확인해보니, 위 처럼 IP가 EIP로 할당되어 있음을 확인했습니다.
이제는 계속해서 인스턴스를 재시작해도 IP 가 변경되지 않을 것 입니다.
그럼 마지막으로, 앞에서 만든 pem 파일을 이용하여 실제 EC2 서버에 접속해보도록 하겠습니다.
4. EC2 서버 접속하기
"2-8. 키 페어 생성" 과정을 통해, pem 파일을 만들어서 PC에 저장해놨었습니다.
이제 그 pem 파일을 사용해서 실제 EC2 서버에 ssh 로 접속해보도록 하겠습니다.
먼저 pem 키를 통한 ssh 접속 명령어는 다음과 같습니다.
ssh -i [pem키 경로] [로그인할계정@접속할IP]
저는 pem 키가 있는 경로로 가서 로그인을 시도할 예정이기 때문에 다음 명령어를 실행했습니다.
ssh -i my-first-aws.pem root@xxx.xxx.xxx.xxx
위 형태대로 명령어를 입력하면 아래와 같은 결과가 나타납니다.
ssh 접속을 시도하면 접속을 계속 하기를 원하는지 물어봅니다.
저기서 답변은 yes 로 입력하고 엔터를 누르면 아래 처럼 연결을 시도합니다.
결과를 보면, ssh 접속에는 실패한 것으로 보입니다. 그 이유를 보자하니 위 문구 중에 이런 문구가 보입니다.
Permissions 0664 for 'my-first-aws.pem' are too open.
my-first-aws.pem 키가 너무 많이 open 되어 있다. 즉, "외부에 너무 열려있다." 라는 의미로 보여지는데요.
리눅스 기반의 OS 에서는 파일 권한을 읽기권한, 쓰기권한, 실행권한 을 0과 1로 처리하여 3개의 권한을 8진수로 표현합니다.
예를 들어, 644 는 2진수로 표현하면 110 100 100 으로 쓸 수 있고,
맨 앞부터 파일의 소유주, 같은 그룹에 속한 사용자, 아예 다른 사용자 의 권한을 나타냅니다.
그래서 644 는 해당 파일을 생성한 소유주의 경우, 읽기권한과 쓰기권한이 있지만 실행권한은 없고
파일을 생성한 소유주와 같은 그룹에 있는 사용자의 경우, 읽기권한만 있고
그 외 다른 사용자는 읽기권한만 가지게 됩니다.
pem 파일은 ssh 접속을 위한 인증수단 이기 때문에, 해당 파일은 함부로 타인에게 공유되어서는 안됩니다.
(앞에서 간략히 설명드렸습니다.)
따라서, 해당 파일의 권한을 좀 낮추어서 다시 시도하라는 의미의 오류라고 보시면 됩니다.
그럼 파일의 권한을 644 에서 600(파일의 소유주에게만 읽기/쓰기권한 부여) 로 변경해서 시도해보겠습니다.
파일의 권한을 변경하는 명령어는 아래와 같습니다.
chmod 600 my-first-aws.pem
파일의 권한이 변경됐는지는 ls -l 명령으로 확인할 수 있습니다.
그럼 이제 다시 명령어를 입력해보겠습니다.
이번에도 뭔가 문구가 나타나고 로그인이 되지 않습니다.
대략적으로(?) root 계정 말고 ec2-user 계정으로 로그인해달라는 의미로 보입니다.
그래서 기존 명령어를 아래 처럼 변경했습니다.
ssh -i my-first-aws.pem ec2-user@xxx.xxx.xxx.xxx
드디어 EC2 서버에 ssh 접속에 성공했습니다.
'AWS' 카테고리의 다른 글
[AWS] RDS 설정하기 (0) | 2023.04.14 |
---|---|
[AWS] EC2 접속 및 설정 추가 내용(for. Mac) (0) | 2023.03.28 |
댓글