AWS EC2
Elastic Compute Cloud 약자
컴퓨팅 머신
컴퓨터를 클라우드에서 띄워서 서버(컴퓨팅 엔진)를 제공하는 서비스
크기 (Instance Size), 타입이 다양해서 원하는대로 쓸 수 있음
간단한 인터페이스를 사용해서 필요한 용량으로 서버를 구성 가능
컴퓨팅 리소스에 대한 포괄적인 제어권 제공, Amazon의 검증된 컴퓨팅 인프라에서 실행 가능
SSH
Secure Shell Protocol
네트워크 프로토콜 중 하나
클라이언트와 서버가 인터넷과 같은 Network를 통해 통신을 할 때, 보안적으로 안전하게 통신 하기 위해 사용하는 프로토콜
Password 인증과 RSA 공개키 암호화 방식으로 연결함
EC2 만들 때 유의할 것
1. Public IP로 접속해야
2. 적합한 port로 접속해야
3. Security group IP에 나의 IP가 Port로 되어 있어야
4. public subnet에 있어야 (routing table에서 확인)
EC2생성
Network
어떤 VPC에 만들지
AWS - VPC 빠짐 없이 공부해야 함
Subnet
서버(데이터 센터)의 물리적인 거리
Zone에 종속적임
Connect to EC2
mv ~/Downloads/test-EC2-key.pem .
~/Downloads 디렉토리에 있는 test-EC2-key.pem 파일을 현재 작업 디렉토리로 이동시킨다.
ssh -i {pem-key-name} ec2-user@{public-ip-address}
SSH를 사용하여 Amazon EC2 인스턴스에 연결하기 위한 명령어이다.
- ssh: SSH 클라이언트를 실행하는 명령어이다.
- -i testkey.pem: -i 옵션은 개인 키파일을 지정하는 옵션이다. testkey.pem은 접속에 사용할 개인 키파일의 경로와 파일명이다. 이 키파일은 EC2 인스턴스에 연결할 때 사용하는 인증 정보이다.
- ec2-user: EC2 인스턴스의 사용자 이름이다. Amazon Linux AMI의 경우 대부분의 경우 ec2-user를 사용한다. 다른 AMI를 사용하는 경우 해당 AMI에 맞는 사용자 이름을 지정해야 한다.
- @: 호스트와 사용자 이름을 구분하는 기호이다.
- public-ip: EC2 인스턴스의 공인 IP 주소이다. EC2 인스턴스에 연결하기 위해 해당 인스턴스의 공인 IP 주소를 제공해야 한다.
cf. SSH 클라이언트란?
SSH 프로토콜을 사용하여 원격 시스템에 접속하기 위해 사용되는 소프트웨어나 도구이다.
SSH 클라이언트는 사용자가 로컬 컴퓨터에서 명령어를 입력하여 원격 시스템에 접속하고 제어할 수 있도록 해준다.
일반적으로 SSH 클라이언트는 다음과 같은 기능을 제공한다.
- 원격 시스템에 접속: SSH 클라이언트를 사용하여 원격 시스템에 접속하고 원격으로 작업할 수 있다. 예를 들어, EC2 인스턴스에 접속하여 명령어를 실행하거나 파일을 전송할 수 있다.
- 인증: SSH 클라이언트는 서버에 접속하기 위해 사용자를 인증하는 역할을 합니다. 일반적으로 개인 키파일(예: testkey.pem)을 사용하여 인증을 처리하며, 비밀번호나 공개 키 기반 인증 방식을 지원합니다.
- 파일 전송: SSH 클라이언트를 사용하여 로컬 컴퓨터와 원격 시스템 간에 파일을 전송할 수 있다. SSH 클라이언트는 파일 전송 프로토콜인 SCP (Secure Copy)를 지원하며, 파일 및 디렉토리를 원격 시스템으로 복사하거나 원격 시스템에서 로컬로 가져올 수 있다.
- 터널링: SSH 클라이언트를 사용하여 로컬과 원격 시스템 간에 보안된 터널을 설정할 수 있다. 이를 통해 로컬 포트와 원격 포트를 연결하여 데이터를 암호화하고 보호할 수 있다.
그러나, 액세스가 너무 오픈되어 있다는 의미로 Permissions 0644 for 'test-EC2-key.pem' are too open 이 뜨게 된다.
따라서 test-EC2-key.pem 파일의 액세스을 변경해주기 위해
chmod 600 key.pem
이 명령어를 사용하여 key.pem 파일의 소유자에게 읽기와 쓰기 권한을 부여하고, 그룹 및 기타 사용자에 대해서는 아무런 권한을 부여하지 않는다. 이를 통해 해당 파일에 대한 액세스 권한을 설정할 수 있다.
cf. chmod란?
주로 리눅스 및 UNIX 기반 운영 체제에서 사용되는 명령어로, 파일 또는 디렉토리에 대한 권한을 변경하는 명령어이다.
이 명령어를 사용하여 파일 또는 디렉토리에 대한 읽기, 쓰기, 실행 등의 권한을 설정할 수 있다.
리눅스 및 UNIX 운영 체제에서는 파일 및 디렉토리에 대한 권한을 세 가지 범주로 나눈다.
- 소유자
- 그룹
- 기타 사용자.
chmod 명령어는 이러한 범주에 대한 권한을 설정하기 위해 사용된다.
파일 권한은 소유자, 그룹, 기타 사용자에 대해 읽기, 쓰기 및 실행 권한을 나타낸다. 각 권한은 숫자로 표현되며 다음과 같은 값을 가질 수 있다:
- 읽기 권한 (Read): 4
- 쓰기 권한 (Write): 2
- 실행 권한 (Execute): 1
파일 권한을 변경할 때는 이러한 값을 조합하여 숫자 코드로 표현할 수 있다.
따라서 chmod 600에서 600은 해당 파일에 대해서 소유자에게 읽기와 쓰기 권한을 부여하고, 그룹 및 기타 사용자에게는 어떤 권한도 부여하지 않는 것을 의미한다.
- 소유자에 대한 권한: 읽기 (4) + 쓰기 (2) = 6
- 그룹에 대한 권한: 없음 (0)
- 기타 사용자에 대한 권한: 없음 (0)
0.0.0.0.0 tcp 포트로 기다리고 있다.
ssh 자체가 사실 프로그램이다.
다른 키로 접속을 하려면 어떻게 해야 할까? (추가 예정 4-1강)
접속했다고 끝나면 안되고 접속의 원리를 이해해야 한다!
RSA 공개키 암호화 방식
(추가 정리 필요)
ZSH 설치
설치가 잘 안되고, Timeout was reached ~ 이란 에러 메시지가 떴다.
트러블 슈팅이 잘 안되어서 결국엔 osaka region으로 새로 인스턴스를 생성해서 sudo yum install -y zsh를 입력했더니 되었다.
아마도 seoul region으로 너무 많은 걸 조작해놔서 잘 안 되는 듯하다..
Zsh 및 Oh-my-zsh 설치
vim 명령어
- 수정 모드 진입: Vim 에디터를 열고, 텍스트를 수정하려면 i를 눌러 "Insert" 모드로 진입한다. 텍스트를 자유롭게 편집 가능하다.
- 수정: "Insert" 모드에서 텍스트를 수정한다.
- 저장: 수정이 완료되면 "Insert" 모드에서 "Esc" 키를 눌러 명령 모드로 돌아간다. 그런 다음 :w를 입력하여 파일을 저장한다. :w는 저장 명령어이며, 파일을 현재의 이름으로 저장한다.
- 나가기: 저장이 완료되었으면, :q를 입력하여 Vim 에디터를 종료한다. :q는 종료 명령어이다.
Oh-my-zsh 설치 이유
- tab을 누르면 자동 완성됨
- vim을 누르고 히스토리 검색 가능
- 자주 쓰는 명령어의 경우 자동완성 사용 가능
- git 관련 UI 편하게 확인 가능
AWS CLI 및 Terraform 설치
리눅스에는 aws cli가 이미 설치되어 있다.
$ wget https://releases.hashicorp.com/terraform/0.12.29/terraform_0.12.29_linux_amd64.zip
리눅스 OS 위에다 ec2를 깔았으면 Linux_amd64 버전으로 반드시 설치해야 한다!!
darwin_amd64 파일을 설치했더니 위와 같이 exec format error가 떠서 지우고 다시 linux_amd64 버전 파일로 재설치 했다.
마침내 환경 변수 잘 옮기고 실행되어서 버전 확인까지 성공한 모습!
connect to host : Operation timed out
어제까진 됐는데 타임아웃이 발생했다.
공식 문서를 보면서 여러 설정을 바꿔봤지만 되는 것이 없었다..
공식문서
어제와 오늘의 유일한 차이점은 어제는 카페에서 했고, 오늘은 집에서 하고 있는 것이라
핸드폰 핫스팟을 켜서 접속해봤는데 접속이 됐다.
왜 됐는지 잘 모르겠다..
Terraform 작동원리와 CLI 실습
provider
https://developer.hashicorp.com/terraform/language/providers
Providers - Configuration Language | Terraform | HashiCorp Developer
An overview of how to install and use providers, Terraform plugins that interact with services, cloud providers, and other APIs.
developer.hashicorp.com
provider 중에 Naver Cloud도 있다.
Terraform 원리
https://www.terraform.io/intro/index.html
What is Terraform | Terraform | HashiCorp Developer
Terraform is an infrastructure as code tool that lets you build, change, and version cloud and on-prem resources safely and efficiently.
developer.hashicorp.com
provider.tf 편집
terraform init
테라폼은 내부적으로 AWS의 api를 호출함 -> 라이브러리 필요함 -> 라이브러리 다운로드 받음
s3 bucket 만들어보기
vim s3.tf 입력후 아래와 같이 편집
terraform plan
- 정의한 코드가 어떤 인프라를 만들게 되는지 미리 예측 결과를 보여준다.
- 단, plan을 한 내용에 에러가 없다고 하더라도, 실제 적용되었을 때는 에러가 발생할 수 있다.
- Plan 명령어는 어떠한 형상에도 변화를 주지 않는다.
위에서 볼 때 다른 인자들은 다 optional 하지만, bucket의 인자는 반드시 지정해주어야 하는 것을 알 수 있다.
terraform apply
- 실제로 인프라를 배포하기 위한 명령어.
- apply를 완료하면, AWS 상에 실제로 해당 인프라가 생성되고 작업 결과가 backend의 .tfstate 파일에 저장된다.
해당 결과는 local의 .terraform 파일에도 저장된다.
버킷 이름을 이미 사용하고 있다고 해서 아래와 같은 에러가 발생했다.
버킷의 이름을 수정해서 입력해주니 잘 생성되었다.
이후에 terraform.tfstate라는 스테이트 파일이 생성되어 있다.
'DevOps > Terraform' 카테고리의 다른 글
[DevOps] AWS, Terraform - AWS IAM (0) | 2023.06.19 |
---|---|
[DevOps] AWS, Terraform - AWS S3 (0) | 2023.06.18 |
[DevOps] AWS, Terraform - Terraform으로 AWS 리소스 생성하기 (0) | 2023.06.18 |
[DevOps] AWS, Terraform Intro (1) | 2023.06.13 |
[Infra] Terraform (0) | 2023.06.11 |