Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
ubuntu EC2에 apache2와 php를 설치 후, AWS PHP SDK를 세팅해 보자. sudo suapt-get updateapt-get install apache2 -yapt-get install php -y apt-get install p7zip -y (현재 최신버전인 php 8.1이 설치됨) 작업 폴더를 이동시키고 진행해 주자.cd /var/www/html PHP 의존성 관리 도구인 Composer 설치설치하자. https://getcomposer.org/download/ ComposerDownload Composer Latest: v2.7.6 To quickly install Composer in the current directory, run the..
Code deploy의 ECS로 배포는 블루/그린 배포 방식으로 업데이트를 진행해보자.블루 그린은 한번에 모든 트래픽을 새로운 서버자원으로 이동시키는 무중단 배포 방식이다. 이때 하나의 로드밸런서에서 두 개의 리스너와 대상 그룹을 요구한다.그 이유를 배포 방식을 통해 알아보자. 배포 원리 배포 이벤트의 순서는 아래와 같다. install전에는 서비스 중인 Production Listener의 대상 그룹을 Test Listener도 가리키고 있다. 여기서 install 이벤트가 실행되면, 다른 Target group에 업데이트된 task들이 배포된다.위의 이벤트 소요시간을 확인해보면, 컨테이너를 올리는 작업 및 상태 체크 때문에 다른 이벤트보다 시간이 많이 소요된다. AllowT..
고가용성을 가진 웹서비스 인프라를 만들어보는 중에 Elastic cache를 활용해서 세션 쿠키를 캐싱할 계획이었다. Memcached를 선택한 이유는 단순히 세션 쿠키를 저장하고 읽는 것이라면,단순한 기능을 제공하는 대신 빠른 성능을 보이는 Memcached가 redis보다 좋다고 판단했다. 고가용성을 보장하려면, 두 개 이상의 노드가 동작해야 하기 때문에 memcached 노드를 두 개를 다른 AZ에 배치하였다. 클러스터라면 노드 간의 동기화가 당연하게 일어날 줄 알았지만, 하나의 노드에서 key 저장 후, 다른 노드에서 키를 확인해 보니 서로 데이터는 독립적으로 처리하는 것이 확인되었다. 이처럼 AWS Memcached은 노드 간의 동기화가 제공되지 않는 것이 확인된다.그럼에..
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..