목록DevOps & Infra/DevOps (17)
오늘도 한 뼘 더
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YNcyv/btsGn6Gby3e/ijcDr440Q8Hn9PKZAL2KF0/img.png)
# 배경 mysqldump를 사용할 때 특정 컬럼만 선택하는 방법은 없다. 특정 컬럼을 백업해서 넘기기 위해서는 temp 테이블을 만들어서 temp 테이블에 원하는 데이터를 삽입해서 temp 테이블을 덤프 해서 진행하도록 한다. # 스크립트 내용 https://github.com/baekji919/DevOps/tree/main/Data_Backup DevOps/Data_Backup at main · baekji919/DevOps Contribute to baekji919/DevOps development by creating an account on GitHub. github.com ## temp 테이블 생성 sql use database; INSERT into database.table SELECT c..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/7UMjP/btsESnB9Gx3/dmNkPZWFFhYSl9Ic8j2Y5K/img.png)
# 배경 현재 회사에서 CI/CD 툴로 Jenkins를 사용 중이다. 최근 Jenkins가 올라가 있는 EC2서버의 스토리지가 차서 Jenkins에서 빌드, 배포가 제대로 동작하지 않는 문제가 발생했다. EC2 스토리지를 임시방편으로 늘리고 스토리지가 계속 늘어나는 원인을 찾다가 docker registry를 사용하는데 여기서 스토리지를 차지한다는 것을 알게 되었다. # 문제 /registy 볼륨에 쌓이는 데이터들이 지워지지 않아서 스토리지가 계속 차고 있었다. # 원인 및 해결 방법 ## 원인 도커 이미지는 여러 개의 태그를 가질 수 있고, 각 이미지는 고유한 다이제스트 값을 갖는다. registry에 같은 이미지로 계속 푸시하게 되면 registry의 이미지넌 여러 개의 다이제스트를 갖게 된다. 태그..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bv6axH/btsAPkImM1U/wCYyTlWq1YDSU2tBtuJEaK/img.png)
# 배경 최근 쿠버네티스를 사용하게 되었는데 이전에 ElasticBeanstalk에서는 배포 방식을 선택할 수 있는 설정이 있었는데 쿠버네티스에서의 경우 어떤 방식으로 진행되는지 사실 생각해보지 못했다. 관련 질문을 받고 무슨 방식이 있고 현재 회사에서 사용하기에 제일 적절한 게 무엇인지 고민해 볼 필요가 있다고 생각됐다. # 무중단 배포 방식 실제 사용자가 사용하고 있기 때문에 특히 운영에 배포를 하는 데 있어 무중단 배포 방식은 중요하다! 무중단 배포 전략은 크게 3가지 방법이 있다. Rolling Update, Blue-Green, Canary 세 가지 방식에 대해 알아보고 정리해보고자 한다. # Rolling Update Rolling Update는 구 버전의 Pod을 하나씩 내리고 새 버전의 P..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/BEmTh/btsr3cG14DX/ypJsE7YaJqBvIxrkCRsYf0/img.png)
# Provider 란? Terraform Provider는 Terraform에서 특정 Infrastructure플랫폼 AWS, Azure 등과 상호 작용하기 위한 플러그인이다. Terraform은 여러 프로바이더를 지원하여 다양한 클라우드 서비스 및 인프라 리소스를 코드로 관리할 수 있게 해주는 역할을 한다. 각각의 Terraform Provider는 해당 플랫폼의 API와 통신하여 리소스를 생성, 수정, 삭제 등을 수행하고 이를 통해 Infrastructure를 정의하고 관리할 수 있다. Provider는 Terraform 코드에서 사용되는 리소스 유형을 제공하고, 해당 리소스를 생성하거나 수정할 때 필요한 설정을 정의한다. # AWS Provider 설정 terraform { required_pro..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cA4lBD/btsoSk7BFQt/2DY3LHTTyXz0fb045DJhA0/img.png)
# Terraform 설치 출처: https://developer.hashicorp.com/terraform/downloads Terraform 공식 문서를 통해서 다음과 같이 설치를 진행한다. $ wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg $ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.lis..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/FsulY/btsoMH3M7Hc/K4H60AAk9q0zE0iDwA2aH0/img.png)
# 배경 현재 회사에서 AWS 클라우드를 사용하고 있고 인프라 관리를 쉘스크립트를 통해서 진행하고 있다. 최근 많은 회사들이 Terraform, Ansible과 같은 IaC(Infrastructure as Code)를 많이 사용하고 있다고 해서 관심을 같게 되었다. 같은 환경의 리소스를 복제하여 만들 때 유익하다는 이야기를 듣고 클러스터 복원하는 스크립트를 만들어볼 수 있을 것 같다는 생각으로 시작하게 되었다. # Terraform이란? Terraform(테라폼)은 하시코프에서 오픈소스로 개발 중인 클라우드 Infrastructure 자동화를 지향하는 IaC(Infrastructure as Code) 도구이다. # Terraform 구성 출처 : https://developer.hashicorp.com/..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/duKExt/btsol73WBXr/gO9GIQA9Lpx8w4Jw5pWs80/img.png)
# 주석 코멘트나 코드를 비활성화하기 위한 주석처리를 '#'를 사용하여 진행한다. # 다음과 같은 방식으로 주석처리 # #에!를 붙이면 주석처리가 되지 않는다. #!/bin/bash echo "Hello" # 입력/출력 read : read를 통해서 입력을 받을 수 있다. echo : echo를 통해서 출력을 할 수 있다. #!/bin/bash read NAME echo "Hello $NAME" # 변수 변수 = "값"의 형태로 변수에 값을 지정한다. $를 통해 변수를 사용한다. #!/bin/bash NAME='jihyun' NICK='happy' echo "Hello $NICK $NAME"
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bSiGae/btsnOsgjfs6/AUOLBUdVVGWhUrPdO0xJa0/img.png)
# 배경 AWS Lambda에서 DB를 연결하는 과정에서 다음과 같은 에러가 발생하였다. panic: Database open error: error: default addr for network 'localhost:3306' unknown # 문제 DB를 연결하는 부분을 다음과 같이 작성하였다. [user]:[password]@localhost:3306/[table] AWS Lambda에 올린 코드는 Golang으로 작성하였는데, golang에서 디비를 연결할 때 sql-driver 라이브러리를 사용하였다. 해당 라이브러리 git을 확인해 보니 "tcp"또는 "unix"를 명시해줘야 했다. https://github.com/go-sql-driver/mysql/blob/749ddf1598b47e3cd90..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/YZdun/btsmR9vpmEM/qyGH1bVBKbveNc7Y9KIyL0/img.png)
# 배경 Grafana에서 모니터링 중 값이 일정 값을 넘어가거나 낮아지면 알림을 받고 싶다. # Grafana Alert 사용하기 출처 : Grafana 공식 문서(Overview) # Contanct points 생성하기 알림을 보내기 위한 수신 채널을 생성한다. Slack에서 webhook URL을 복사하여 작성하고 Slack Setting의 경우 메시지를 어떻게 보낼지에 따라 설정을 다르게 해서 작성한다. Notification settings에서 Disable resolved message를 선택하면 alert에 발송된 문제가 해결된 뒤에 메시지를 받지 않도록 설정하는데 문제가 해결되었는지 확인을 하기 위해서 이 부분은 선택을 하지 않았다. Test 버튼을 눌러서 성공하면 Slack에 다음과 같..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dfU0eJ/btsj0eF4yn9/ShfWOdsfqX677GX8KZTwV0/img.png)
# 배경 AWS Api Gateway에서 API의 아이디를 API 이름으로 불러오는 스크립트를 작성 중이었는데 실행하고 나니 다음과 같은 에러가 발생하였다. Error - unexpected EOF while looking for matching `'' # 문제 문제가 된 스크립트 API_ID=`aws apigatewayv2 get-apis \ --query 'Items[?Name==`'$API_NAME'`].ApiId' \ --output text` --query는 작은따옴표(')로 묶어줘야 하고 그 안의 값을 백틱(`)으로 감싸야하는데 값을 감싸는 부분에서 에러가 발생한 것이다. # 해결 방법 백틱(`)으로 감싸진 문자열에서 백틱을 사용할 때에는 백틱 앞에 \를 붙여줘야 한다. 그리고 겉의 백틱(`)..