2023년에 re:Invent를 다녀오고 회사의 배려와 지원으로 2년 만에 다시 라스베이거스를 다녀오게 됐습니다. 2년 전과 달라진 게 있다면 함께 간 MSP가 바뀌었다는 정도겠네요. 이전에는 라스베이거스까지 전용기를 타고 직항으로 갔지만 올해는 경유해서 갔습니다. 레이오버라서 시간이 살짝 붕 뜨긴 했지만 나름대로 나쁘지 않았어요. (2년 전에 다녀온 글은 여기서 보실 수 있습니다.) 갈 때는 시애틀에서 델타 항공으로 갈아탔습니다. 돌아올 때는 LA를 경유했어요. 한국에서 미국을 오가는 대한항공은 여행사에서 좌석을 복도 쪽으로 지정해 줘서 편안한 비행이 됐습니다. 그리고 약 한두 시간 남짓 타는 델타 항공에서는 창가 쪽에 앉아서 라스베이거스 근처 풍경을 바라보며 멍때릴 수 있어서 좋았습니다. 이번 일정은..
테라폼으로 여러 모듈을 관리하고 있는 상황에서 특정 모듈의 변화만 반영시키고 싶은 경우가 있습니다. 예를 들어, main.tf 파일에 너무 많은 module이 있어서 plan 명령 한 번 읽히는데 분 단위로 걸린다거나, 임의로 콘솔에서 리소스의 값을 변경해 둔 상태라서 terraform apply가 됐을 때 콘솔의 값이 덮어써지면 안 되는 경우입니다. 사실 둘 다 일반적인 경우가 아니긴 해요. 전자는 더 작은 단위로 관리하는 게 맞고 후자는 임시라도 관리를 위해 테라폼으로 값을 수정하는 게 맞을 겁니다. 아무튼, 필연적으로 특정 모듈만 plan 혹은 apply 해야 하는 경우가 옵니다. 이럴 때 사용하는 옵션이 target입니다.$ terraform plan --help(생략)-target=resourc..
작년에 보스턴으로 다녀왔는데 올해도 기회가 돼서 샌프란시스코에서 열린 HashiConf'25에 다녀왔습니다. 샌프란시스코의 경우 시차가 시기에 따라 16~17시간으로 가변적인데요. 9월 기준으로 16시간의 시차였습니다. 한국 시간 기준으로 낮 밤을 바꾸고 4시간을 빼면 샌프란시스코의 시간이었습니다. 이번에는 편하게(?) 크로스백만 메고 갔다가 일정 내내 어깨가 아파서 너무 힘들었어요. 역시 해외 콘퍼런스 참석은 백팩이 진리인 것 같네요. 물론, 가방에 랩탑이 함께하지 않는다면 또 모르겠습니다.샌프란시스코는 작년에 이어 이번이 두 번째 방문입니다. 고작 1년 만에 온 거라 공항을 빠져나오는 게 어렵지 않았어요. 미국은 승차 공유 서비스가 잘 되어 있어서 공항에서 이정표 보고 따라가는 것도 어렵지 않습니다...
인텔리제이 사용하다가 cursor로 넘어왔는데 도저히 적응이 안 되는 것들이 몇 개 있었다. 그 개선점 몇 개를 기록해 둔다 (계속 업데이트 예정). 참고로 기본적으로 인텔리제이 테마와 단축키를 이미 마이그레이션 해서 쓰고 있다.# 탭 개수 지정이건 인텔리제이에서도 굳이 설정을 해본 적이 없는데 탭이 너무 많이 열리니까 정신 사나워서 설정했다. 본인은 브라우저 탭도 10개 미만으로 유지하는 사람이다. Editor management에서 Limit를 활성화시키고 값을 주면, 탭의 개수가 Limit을 초과할 때 가장 오래된 탭부터 닫히는 방식이다# 현재 탭 제외하고 전부 닫기인텔리제이에서 Command + W로 탭 닫는 걸 습관화했었고, 그 키가 손에 익으니까 현재 보고 있는 탭을 제외하고 모든 탭을 닫는 ..
위와 같이 두 개의 서로 다른 AWS 계정이 있을 때 1111-1111-1111 어카운트에서 2222-2222-2222에 있는 example.host(private hosted zone)을 호출하기 위한 방법을 알아본다. 글을 본격적으로 읽기 전에 위에 이미지에서 AWS Account ID와 VPC ID를 잘 살펴봐두길 바란다. 먼저 2222-2222-2222 계정의 example.host에 vpc-1234를 추가해야 한다. 이 과정은 콘솔에서 지원하지 않기 때문에 aws cli를 통해 진행하도록 하자. 여기서 example.host의 Hosted zone ID는 2222..22라고 가정한다. 자, 그럼 아래와 같이 계정 B에 VPC 연결 권한부터 부여하도록 하자. 명령어 마지막에 profile을 보면 ..
Knative func을 배포하려고 할 때 아래와 같은 오류가 발생했습니다(build를 해도 마찬가지 입니다). 갑작스러운 건 아니고, 테스트를 진행한 MacOS(M3)에서 처음 발생한 상황이네요.$ func deploy -b=s2i -vA registry for function images is required. For example, 'docker.io/tigerteam'.? Registry for function images: docker.io/jybaekNote: building a function the first time will take longer than subsequent buildsBuilding function imageError: cannot create docker client:..
HashiCorp Vault는 비밀 관리 도구로, 민감한 데이터를 안전하게 저장하고 관리할 수 있게 해 줍니다. 이번 글에서는 EKS에 HashiCorp Vault를 테라폼으로 생성하고 설치하고 접속해 보도록 하겠습니다. 정말 간단하니까 눈으로만 따라오셔도 충분합니다.EKS에 HashiCorp Vault를 테라폼으로 아래와 같이 코드를 작성해서 설치할 수 있습니다. resource "helm_release" "vault" { name = "vault" repository = "https://helm.releases.hashicorp.com" chart = "vault" namespace = "vault" create_nam..
테라폼으로 배포하는 도중에 아래와 같은 오류가 발생하는 경우가 있습니다. 일반적으로 발생하는 상황은 아니고, Cached 파일이 없을 때 오류가 발생하는 건데요. 보통 개발 환경을 마이그레이션 하는 도중에 발생됩니다. 예를 들어, 맥북을 새로 구매해서 데이터를 옮기는 것처럼 말이죠. │ Error: could not download chart: no cached repo found. \(try 'helm repo update'): open /Users/jybaek/Library/Caches/helm/repository/datadog-index.yaml: \no such file or directory 이 오류를 해결하기 위해서는 간단히 helm repo update 명령어를 실행하면 됩니다. 이 명령어는..
HashiCorp Ambassador가 되고 처음으로 HashiConf에 다녀왔습니다. 이번 hashiConf는 보스턴에서 열렸습니다. 오전 9시 비행기라 서둘러서 공항에 갔었네요. 인천공항에서 보스턴까지 갈 때는 13시간 정도, 돌아올 때는 15시간 정도 걸렸습니다. 그나마 직항이라 편히(?) 다녀왔습니다. ( 시차는 13시간으로 한국 시간과 비교하면 AM, PM을 바꿔주고 한국 시간에서 1시간을 빼주면 보스턴 시간이 됩니다. 즉, 한국아침 08시가 보스턴은 저녁 07시인 거죠 ) 보스턴에 도착하니 오전 10시쯤 됐습니다. 공항은 한산했고 순조롭게 입국 심사를 받을 수 있었습니다. 호텔 체크인이 원래 16시부터인데 다른 엠버서더들의 대화를 보니 일찍 도착해서 체크인 한 사람도 있더라고요? 그래서 저도..
AWS Secrets engine을 통해 AWS의 credentials을 관리하는 방법을 소개합니다. 이번 글에서는 터미널 명령어와 GUI를 함께 보도록 하겠습니다. 여기서 다루는 모든 GUI는 오픈소스 버전입니다. HashiCorp Cloud Platform(HCP) 버전과 상이할 수 있는 점을 참고해 주세요. 그럼 시작합니다.먼저 AWS secrets engine을 활성화합니다.vault secrets enable aws 혹은 GUI에서 아래와 같이 Secrets Engines 메뉴에서 Cloud > AWS를 선택해 주면 됩니다. Secrets Engine이 연결 됐으니 root 계정을 등록해 줘야 하는데요. 여기서 표현하는 root는 AWS의 루트 계정이 아닙니다. Vault를 통해 IAM을 생성하..
HashiCorp Vault는 2014년 4월에 발표됐습니다. Vault는 토큰, 비밀번호, 인증서, 암호화 키에 대한 액세스를 보호하고 저장하며 엄격하게 제어하여 비밀 및 기타 민감한 데이터를 보호하기 위해 사용하는 솔루션입니다. 컨셉을 이해하려면 HashiCorp 블로그 글을 읽어보세요.이번 글에서는 Vault를 설치하고 기본 컨셉에 대해 살펴보도록 하겠습니다. Vault를 쓰면 좋겠다고 생각한 첫 번째 이유가 데이터베이스 접속 정보 관리인데요. 아래와 같은 흐름으로 사용이 가능합니다. Vault의 가장 기본적인 사용 예시입니다. CSP에 있는 Secrets Manager와 비슷합니다. 하지만 Vault의 경우 필요한 순간에 데이터베이스 계정을 "생성"해서 줄 수 있습니다. 그것이 가장 큰 차이점입니..
Kubernetes를 사용할 때 아주 중요한 설정이 있습니다. Karpenter와 같은 오토스케일러와 맞물리면 더욱 빛을 보게 되는 설정인데 바로 PodDisruptionBudget(PDB) 입니다. 오토스케일러를 Karpenter로 예를 들어 설명해 보겠습니다. consolidation으로 노드가 제거될 수도 있고 spot을 이용 중이라면 spot 종료 이벤트를 받을 수도 있습니다. 이때 해당 노드에 서비스되는 모든 pod가 한순간에 모두 종료 돼버린다면 자칫 서비스에 다운타임이 발생할 수도 있습니다. 이때 필요한 게 PDB입니다.PDB를 쉽게 설명하자면 무슨 일이 있어도 지정된 개수의 pods는 유지를 해달라는 설정입니다(이외에 다른 조건도 설정할 수 있습니다). 배포를 위해 Deployments를 ..
AWS에서 spot을 사용해서 컴퓨팅 비용을 절감하는 방식은 너무 유명합니다. 하지만 spot은 언제든 빼앗길 여지가 있는데요. EKS에서 AutoScaler로 카펜터(karpenter)를 사용 중이고 인스턴스 타입으로 spot을 사용 중이라면 NTH(Node Termination Handler) 사용을 고려하셔야 합니다. 마치 애플리케이션이 종료되기 전에 시그널을 받아서 처리(signal handler)하는 것처럼 NTH는 노드가 종료되기 전에 "어떤" 이벤트를 받고 종료 전에 필요한 것들을 처리할 수 있도록 돕습니다.spot 인스턴스는 종료되기 2분 전에 EC2 Spot Instance interruption notice를 수신하는데요. 관련된 내용은 아래와 같이 cloudtrail에서 이벤트 이름을..
우리가 구축한 서비스가 견고한지, 가용성을 보장하는지, 확장성은 어떤지 등 시스템 탄력성을 테스트하기 위한 기법으로 카오스 엔지니어링이 있습니다. AWS Resilience Hub - Fault Injection Service(FIS)는 카오스 엔지니어링을 AWS에서 손쉽게 할 수 있도록 돕습니다. 이 기능을 이해하기 위해서는 aws cli로 접근하는 것보다 콘솔을 이용하시는 게 좋습니다. 어느 정도 기능을 익힌 후에는 터미널에서 마음껏 실행할 수 있을 겁니다.FIS의 기본 콘셉트는 Experiment templates 메뉴에서 실험 템플릿을 만들고, 템플릿을 실행하는 것에서 출발합니다. 템플릿에는 특정 리소스(e.g., EC2)의 ID로 지정해서 이벤트(종료 등)를 보낼 수도 있고, tags 기반으로 ..
Redshift는 Workload management(WLM) 설정을 통해 큐(queue)와 슬롯(slot)이라는 개념을 제공합니다. 넓은 범주에서 이야기하면 한 개에 큐 안에는 여러 개의 슬롯이 존재할 수 있습니다. 그리고 슬롯은 쿼리 실행의 동시성을 나타낸다고 보시면 됩니다. 즉, 슬롯 개수만큼 쿼리가 동시에 실행될 수 있는 거죠. 그렇다고 쿼리 속도가 슬롯에 독립적으로 보장된다는 말은 아닙니다. 클러스터 전체에서 사용하는 메모리를 나눠서 사용하는 구조라서요. 큐는 실행을 기다리는 쿼리 그룹을 나타내는 논리적 구성입니다. 큐 종류는 다음과 같습니다.- 삭제할 수 없는 default queue 1개- 사용자가 추가로 정의할 수 있는 큐 7개- AWS 콘솔 상에 나타나지 않는 superuser를 위한 큐..
이 프로젝트를 시작한 게 1년이 넘었는데 이제 블로그 글로는 마무리를 지으려고 합니다. 최종 결과물 사용 방법을 공유하려고요. 앞선 글을 읽으셨던 분들이 주신 문의도 많았고 한 번 정리할 필요가 있다고 느꼈습니다. 처음 이 프로젝트의 시작은 ChatGPT를 슬랙에 연동하기 위해 2개의 Repository를 사용했는데요. 현재는 1개로 통합했습니다. 아래 링크만 사용하시면 됩니다.https://github.com/jybaek/llm-with-slack GitHub - jybaek/llm-with-slack: Connect LLM to Slackbot. Works via FastAPIConnect LLM to Slackbot. Works via FastAPI. Contribute to jybaek/llm-w..
작년 행사에서 순다의 AI 언급 횟수가 유튜브에 올라가서 화제가 된걸 순다도 알고 있었습니다. 그래서 이번에는 발표 스크립트를 Gemini에 넣고 확인하니 AI 키워드 언급을 120번 했다고. 이 말을 하는 순간 121 번으로 추가 카운팅 됐네요 ㅎㅎ 여러 가지 내용이 나왔지만 역시 가장 큰 임팩트는 Gemini 1.5 Pro의 토큰 증가였습니다. 이미 세계에서 가장 큰 컨텍스트 윈도우(1M)를 갖고 있다고(Longest context window in the world) 자신 있게 말하고 이걸 두 배로(2M) 키워버렸다고. 키노트 대부분의 세션에서 다시 언급될 정도로 중요한 내용이었습니다. 어쩌면 이 뒤로 있었던 모든 기술이 토큰 크기 증가로 인해 가능해진 걸 테니까요. 기술력만 놓고 보자면 오픈 AI..
테라폼으로 AWS CloudFront 를 생성할 때 ACM(AWS Certificate Manager) 인증서를 쓰려면 아래와 같이 코드가 개발됩니다. resource "aws_cloudfront_distribution" "s3_distribution" { ... viewer_certificate { cloudfront_default_certificate = false acm_certificate_arn = "..." minimum_protocol_version = "..." ssl_support_method = "..." } } cloudfront_default_certificate를 false로 설정하고 ACM 인증서의 ARN을 넣어주면 됩니다. 그런데 이 상태로 코드를 배포하면 아래와 같은 오류가 ..
CloudFront에서 Distribution을 생성할 때 Origin domain으로 S3 버킷을 지정하는 경우 아래와 같은 화면이 나옵니다. bucket endpoint를 쓰지 말고 website endpoint를 사용하라는 건데요. Origin domain 목록에 website endpoint는 노출되지 않기 때문에 "Use website endpoint" 버튼을 클릭해 줘야 s3 가 s3-website로 변경됩니다. 버튼을 클릭하는 경우 상세 설정의 종류가 변경되기 때문에 무시할 수 없습니다. 더욱이 S3 website endpoint를 추천한다는데 써야겠죠 (...) 테라폼으로 배포할 때 위에 버튼을 클릭하지 못하니 어떻게 처리해야 하나 한참을 끙끙댔습니다. 일단 S3 website endpoi..
PyCharm(IntelliJ라도 상관없음)에서 YAML(yet another markup language or YAML ain't markup language) 파일을 열어보면 다음과 같이 syntax highlighting이 잘 적용되어 있습니다. 아마도 대부분의 사람들은 "IDE에서 syntax highlighting은 당연한 기능 아냐?"라고 하실 수도 있는데요. 맞습니다. 확장자에 따라서 기본 설정이 적용되어 있기 때문입니다. 최근에 테라폼(Terraform)으로 코드를 개발하면서 YAML 파일을 템플릿 형식으로 작성할 일이 꽤 많았는데요. 확장자는 tftpl 였습니다. 테라폼에서 templatefile 함수를 통해 읽는 파일의 확장자는 tftpl로 권장됩니다. *.tftpl is the rec..
- Total
- Today
- Yesterday