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..
안녕하세요. AdTech(Advertising technology) 스타트업 매드업에서 데이터 엔지니어 겸 사이트 신뢰성 엔지니어(SRE, Site Reliability Engineer)로 근무하고 있는 백재연입니다. 이번 글에서는 올해 라스베가스에서 열린 AWS re:Invent를 다녀온 후기를 다루려고 합니다. 키노트나 세션 등 기술과 관련된 콘텐츠는 유튜브와 AWS 공식 블로그에 잘 정리가 되어 있으니 생략하고, 처음 이 행사에 참석했던 입장에서 전반적인 행사 흐름과 체험을 위주로 정리해 봤습니다. 스크롤 압박은 있겠지만 대부분 사진이니 부담 없이 봐주세요! 자, 그럼 시작합니다. # Las Vegas! 현재 매드업과 계약된 MSP를 통해 아시아나항공 전세기로 라스베가스 공항까지 직항으로 갈 수 있..
에.. 이 자격증은 정말 생각이 없었는데 갑자기 필요해서 응시하게 됐습니다. 좀 얼토당토 한 이유기는 하지만 다음 주에 라스베가스에서 열리는 AWS Re:Invent 행사에 참가하게 됐는데요, 어렴풋한 기억에 작년에는 HashiCorp 부스에서 자격증이 있는 사람들한테 스페셜한 굿즈를 나눠줬다는 게 생각이 나서요. 잘못된 기억일 수도 있습니다. 리인벤트 행사가 아니라 다른 행사였을 수도 있고요. 아무튼, 회사 업무 때문에 Terraform을 한참 사용하고 있고 제가 클라우드 발표를 할 때도 여러 차례 테라폼 코드를 언급해주고 있는데 자격증 하나 있으면 나쁘지 않겠다는 생각이 들었습니다. 참고로 저는 하시코드 엠베서더이기도 합니다. 이 글조차 엠베서더 활동일지도(...) 🙃 # 시험 준비 각설하고 이번에 ..
테라폼 코드를 로컬에서 개발&운영하다가 테라폼 클라우드(Terraform Cloud)를 처음 이용하려고 할 때 발생하는 문제입니다. 이건... 블로그에 기록하기도 민망할 정도로 짧은 해답을 내릴 수 있는데요. 테라폼 클라우드와 연결된 GitHub이나 Bitbucket과 같은 VCS(Version Control System)에 tfstate 파일이 존재하는 경우입니다. 이때는 VCS에서 state 파일을 삭제해 주고 다시 plan을 실행해 보세요. 오류가 해결되는 걸 확인하실 수 있을 겁니다. 소소하지만 테라폼 클라우드를 처음 이용하려는 누군가에게는 도움이 되셨기를 바랍니다. :) 인터넷에 많은 트러블슈팅 글이 그러하듯이 이 에러의 원인이 하나만은 아닐 수도 있습니다. 만약 state 파일이 존재하지 않는..
Lambda(람다) 배포 방식에는 네 가지가 존재합니다. (1) 소스코드를 에디터에서 직접 개발 (2) ZIP 압축 파일을 업로드해서 배포 (3) S3 경로에 압축파일을 두고 배포 (4) 컨테이너 이미지를 통해 배포가 있습니다. 이번 글에서는 컨테이너 이미지를 통해 배포하는 방법을 알아볼 텐데요. 특이한 조건이 하나 붙일 겁니다. 테라폼 코드를 통해 Lambda와 ECR을 최초 배포할 때 컨테이너 이미지를 어떻게 처리해야 하는가입니다. 정확하게는 AWS 인프라를 테라폼으로 초기 구축하는 상황인 겁니다. 이런 상황에서 무엇이 문제가 되는지 살펴보려면 생성해야 하는 리소스를 알아야 합니다. 먼저 ECR(Elastic Container Registry)를 생성해줘야 합니다. 소스코드는 대충 아래와 같은 모양입..
테라폼으로 EKS를 생성할 때 만나는 에러입니다. 문제 상황은 aws_eks_cluster 를 통해 클러스터를 생성하고 나서 kubernetes_config_map 으로 aws-auth를 ConfigMap에 등록하려고 할 때 발생합니다. terraform apply 를 통해 두 개의 리소스가 함께 배포되는 상황입니다. 대략 아래와 같은 코드를 실행하는 상황이라고 볼 수 있습니다. 불필요한 부분은 말줄임표로 생략했습니다. resource "aws_eks_cluster" "this" { name = var.cluster_name ... } resource "kubernetes_config_map" "this" { metadata { name = "aws-auth" namespace = "kube-syste..
- Total
- Today
- Yesterday