Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
AWS에서 웹서비스를 생성하던 중에, 의문점이 생겨서 ELB와 NAT GW에 대해 확실히 알게 된 점을 남겨본다. AWS 공부를 하면 private subnet의 자원들은 외부의 트래픽을 NAT GateWay로 보낸다고 알게 된다. 그러면 ELB를 사용해서 private subnet의 웹 서버에 접속하면 다음과 같은 Flow가 된다고 생각했다. 클라이언트는 ELB의 IP로 요청을 보내고, 이 요청이 EC2 web server에게 전달된다. 여기서 웹 서버가 NAT GW로 응답을 보내면, 결국에 클라이언트의 웹 요청에 대한 응답이 NAT의 public IP로 바뀌어서 나가게 된다. 그렇다면, 클라이언트는 요청을 보낸 IP(ELB IP)와 다른 IP(NAT IP)로부터 응답을 받게 된다. 브라우저가 다른 i..
다음과 같은 AWS 웹서비스 인프라를 테라폼으로만 구성해 보자. 1. VPC 생성 VPC는 논리적으로 자원을 격리시켜 주는 네트워크 리소스로, 클라우드에서도 온프레미스처럼 동일한 네트워크 세팅을 가능하도록 만들어 준다. VPC는 리전에 속하고, 여러 AZ의 자원들을 묶어줄 수 있다. provider "aws" { region = "ap-northeast-2" } resource "aws_vpc" "main" { cidr_block = "10.10.0.0/16" #10.10.0.0/16로 설정 tags = { Name = "tf-lab-vpc" } } 2. 퍼블릭 서브넷 생성 생성한 vpc_id를 사용해서 subnet을 만든다. 서브넷이 실제로 자원들이 배치가 되고 라우팅 테이블이 세팅될 네트워크 집합이 ..
Terraform IaC는 코드가 인프라, 인프라가 코드가 된다. 이 두 개 사이를 변환시켜 줄 도구가 IaC도구, 테라폼이다. 인프라를 빠르게 세팅하는 데에 장점이 있지만, 한번에 세팅하기 때문에 코드상에 문제가 있다면 다시 다 부수고 만들어야 한다. 테라폼은 오픈소스 도구로, 어떤 클라우드 프로바이더라도 코드로 인프라를 배포할 수 있는 호환성을 제공한다. 하지만 테라폼은 인프라 자원들의 프로비저닝을 중점으로 해주기 때문에, OS Level의 구성을 위해서 Ansible과 같은 툴과 함께 사용된다. Virtual Box를 사용해 VM에서 AWS CLI와 Terraform을 설치해서 AWS EC2를 배포할 것이다. (cloud shell이나 cloud9 혹은 본인의 PC에서 진행해도 무방하다.) 이때 T..
Google Kubernetes Engine은 Kubernetes를 만든 구글에서 제공하기 때문에 다른 클라우드의 kubernetes보다 최신 기능을 제공한다. 명령어 한 줄만으로 배포할 수 있기 때문에 EKS보다 세팅하기도 편리하다. GKE는 Control node는 완전 관리형으로 제공하기 때문에, 사용자들을 Control node의 가용성을 신경 쓰지 않고 노드만 관리하면 된다. 최근에는 노드마저 정말 관리해 주는 서비스인 AutoPliot도 제공한다. 이 서비스는 파드에 따라서 노드의 개수를 자동으로 scaling 해주고, 노드에서 동작하는 파드 단위로 비용이 청구되기 때문에, 적은 파드를 사용한다면 굉장히 비용 효율적인 서비스가 가능하다. GUI 콘솔에서 GKE 생성하기 클러스터 만들기를 눌러주..
Cloud Build Cloud Build는 GCP에서 제공하는 Serverless CI/CD 서비스이다. Cloud Build를 사용해서 Dockerfile로 docker image를 빌드하고, GCP의 Image 저장소인 Artifact Registry에 업로드해자. Cloud Build와 Artifact Registry 서비스 추가 관리를 누른다. Cloud Build로 Dockerfile 빌드하기 quickstart.sh 라는 간단한 echo 명령어를 사용하는 스크립트를 준비해 주자. 이 스크립트를 사용하는 Docker image를 빌드하자. nano Dockerfile FROM alpine # Alpine Linux 기본 이미지를 사용 COPY quickstart.sh / CMD ["/quick..
이전글에서는 Google 서비스를 private VM에서 사용하는 법을 확인해 보았다. [GCP] IAP와 Private Google Access 사용하기 [GCP] IAP와 Private Google Access 사용하기 AWS에서 private subnet의 자원 접근을 위해 사용하는 Bastion host도 결국 컴퓨팅 자원이기 때문에, 진입 취약점을 제공할 수 있다. GCP는 Bastion Host를 사용하지 않더라도 IAP(Identity-Aware Proxy)라는 접근 서 everenew.tistory.com Cloud NAT 구성하기 private Google access 어디까지나 Google의 서비스에만 접속할 수 있다. 여전히 private subnet에 존재하는 VM은 외부로 무언가 ..
AWS에서 private subnet의 자원 접근을 위해 사용하는 Bastion host도 결국 컴퓨팅 자원이기 때문에, 진입 취약점을 제공할 수 있다. GCP는 Bastion Host를 사용하지 않더라도 IAP(Identity-Aware Proxy)라는 접근 서비스를 GCP가 제공해서 접근자의 식별을 대행해 준다. https://cloud.google.com/blog/products/identity-security/cloud-iap-enables-context-aware-access-to-vms-via-ssh-and-rdp-without-bastion-hosts?hl=en Cloud IAP enables context-aware access to VMs via SSH and RDP without bas..
GCP VPC와 AWS의 VPC 단위 GCP의 VPC와 AWS의 VPC의 가장 큰 차이는 점은 적용 단위이다. AWS에서 VPC는 리전에 종속되는 리소스이다. 따라서 다른 리전의 자원에 접근하려면 VPC Peering과 같은 기능이 필요했다. https://everenew.tistory.com/399 AWS 다른 리전 간의 VPC Peering 설정하기 VPC Peering 격리된 VPC는 별도의 세팅이 없다면, 다른 VPC와 연결을 할 수 없다. 그렇다고 인터넷을 통해 다른 VPC로 접근을 한다면, 추가적인 암호화가 필요할 것이다. 따라서 AWS는 VPC간을 AWS 내부 네 everenew.tistory.com 이러한 VPC 내부의 서브넷은 각 zone에 종속되었다. 하지만 GCP에서는 VPC가 모든 ..
AWS CodeDeploy CodeDeploy는 AWS의 서비스들을 대상으로 배포를 진행해준다. ECS나 Lambda와 같은 AWS 관리형 서비스는 추가적인 세팅이 필요없지만, EC2 인스턴스나 온프레미스 자원을 대상으로 배포를 진행하는 경우, 인스턴스에 CodeDeploy 에이전트가 설치되어야 한다. 설치 방법은 다른 분의 게시글을 참조하자. https://velog.io/@yrkim/AWS-AWS-CodeDeploy-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8-%EC%84%A4%EC%B9%98 [AWS] AWS CodeDeploy 에이전트 설치 AWS CodeDeploy의 요청을 받을 수 있도록 에이전트를 설치하는 과정이다. velog.io 우리의 EC2 인스턴스에서 CodeDe..
이전 글에서는 EC2에 동작하는 프로세스를 대상으로 CI/CD를 구현하였다. https://everenew.tistory.com/419 AWS CodePipeline 구성하기 (commit, build, deploy) CodeCommit, CodeBuild, CodeDeploy를 세팅하고 전체를 하나의 플로우로 구성해 주는 CI/CD 서비스인 CodePipeline을 구성해 보자. 이번 실습에서 업데이트의 대상이 되는 것은 Private subnet에서 autoScaling 되는 Web everenew.tistory.com 컨테이너 실행을 위해 ECS를 사용한다면, code deploy가 없어도 ECS 자체가 code pipeline의 배포 요소로 사용 가능하다. 컨테이너 환경으로의 배포를 간단하게 구성..