generated from cotes2020/chirpy-starter
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
57 changed files
with
1,032 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
_posts/2023-08-10-spring-data-dynamodb-partitionkey-and-sortkey.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
--- | ||
title: AWS RDS에서 GCP Cloud SQL로 마이그레이션 작업 | ||
date: 2024-08-25 18:30:00 +0900 | ||
categories: [Project, POCHAK] | ||
tags: [backend, migration, cloudsql, gcp] # TAG names should always be lowercase | ||
--- | ||
|
||
# Cloud SQL로 데이터베이스를 변경한 이유 | ||
|
||
창업지원단의 지원금을 받고 있기에 대부분의 서비스를 AWS에서 GCP로 옮기고 있는 상황입니다. | ||
|
||
따라서 기존에 사용하던 AWS의 RDS에서 GCP의 Cloud SQL로 마이그레이션을 하기로 결정하였습니다. | ||
|
||
# 작업 과정 | ||
## GCP Database Migration API 활성화하기 | ||
|
||
GCP에서 제공해주는 Database Migration API를 사용하여 작업을 시작해보겠습니다. <br> | ||
먼저 Database Migration API를 검색하여 활성화를 시켜주어야 합니다. | ||
|
||
아래 이미지는 이미 활성화된 모습입니다. | ||
|
||
![img](/assets/img/2024-08-25-cloud-sql-migration/1.png) | ||
|
||
## 연결 프로필 생성 | ||
|
||
그 뒤, 연결 프로필 `Connection profiles` 을 생성해주어야 합니다. | ||
|
||
> 연결 프로필은 소스 데이터베이스 인스턴스(예: MySQL용 Amazon RDS)에 대한 정보를 저장하고, <br> | ||
> Database Migration Service에서 대상 Cloud SQL 데이터베이스 인스턴스로 데이터를 마이그레이션하는 데 사용됩니다. | ||
{: .prompt-tip } | ||
|
||
<br> | ||
|
||
`데이터베이스 마이그레이션 > 연결 프로필`에서 <br> | ||
상단의 `+ 프로필 만들기` 버튼을 눌러 새로운 프로필을 만들어줍시다. | ||
|
||
![img](/assets/img/2024-08-25-cloud-sql-migration/2.png) | ||
|
||
|
||
다음과 같이 세팅해주었습니다. | ||
|
||
1. 데이터베이스 엔진 : `MySQL` | ||
2. 연결 프로필 이름 : `mysql-rds` (편한 이름으로 변경 가능) | ||
3. 연결 프로필 ID : `mysql-rds` (편한 아이디로 변경 가능) | ||
4. 호스트 이름 또는 IP 주소 : {RDS IP 주소} | ||
5. 포트 : `3306` (MySQL 기본 포트 - 설정에 따라 변경될 수 있습니다.) | ||
6. 사용자 이름 : {MySQL 사용자 이름} | ||
7. 비밀번호 : {MySQL 비밀번호} | ||
8. 리전 : `asia-northeast3 (서울)` (저는 서울로 설정하였습니다.) | ||
|
||
## 마이그레이션 작업 생성 | ||
|
||
`데이터베이스 마이그레이션 > 마이그레이션 작업`에서<br> | ||
상단의 `+ 마이그레이션 작업 만들기` 버튼을 눌러 새로운 마이그레이션 작업을 만들어줍시다. | ||
|
||
![img](/assets/img/2024-08-25-cloud-sql-migration/3.png) | ||
|
||
1. 소스 데이터베이스 엔진 : `MySQL` | ||
2. 대상 리전: `asia-northeast3 (서울)` | ||
3. 마이그레이션 작업 유형: 일회성 | ||
|
||
으로 설정하고 `저장하고 계속하기` 버튼을 클릭해줍니다. | ||
|
||
<br> | ||
|
||
다음으로 소스 연결 프로필로 아까 생성한 `mysql-rds`를 선택해줍니다. <br> | ||
다른건 기본 세팅으로 두고 진행하였습니다. | ||
|
||
<br> | ||
|
||
마이그레이션 대상 데이터베이스를 생성합니다. <br> | ||
비용을 위해 최소 사양으로 설정하였습니다! | ||
- `Enterprise` | ||
- 공유 코어 vCPU 1개, `0.614GB` | ||
- `HDD`, `10GB` | ||
- `MySQL 8.0.31` | ||
|
||
<br> | ||
|
||
대상 데이터베이스 생성이 완료되면, 다음으로 넘어가 연결 방법을 선택합니다. | ||
|
||
연결 방법은 `IP 허용 목록` 으로 설정하고, `Destination IP Address`를 복사합니다.<br> | ||
복사한 AWS RDS 인스턴스의 보안그룹에 추가하여 접근이 가능하도록 설정해주어야 합니다. | ||
|
||
<br> | ||
|
||
모두 설정해준 뒤, 마이그레이션 작업을 시작해줍니다. <br> | ||
- 설정에 이상이 없다면 마이그레이션 작업이 시작됩니다. | ||
|
||
![img](/assets/img/2024-08-25-cloud-sql-migration/4.png) | ||
_설정은 이 사진을 참고해주세요!_ | ||
|
||
약 13분 정도 작업이 진행되었고, <br> | ||
이후에 `Cloud SQL > (대상 인스턴스) > 작업`에 들어가서 <br> | ||
마이그레이션 작업 과정은 다음과 같이 확인할 수 있었습니다. | ||
|
||
![img](/assets/img/2024-08-25-cloud-sql-migration/5.png) | ||
|
||
|
||
|
||
# 참고자료 | ||
- [Migrating to Cloud SQL from Amazon RDS for MySQL Using Database Migration Service](https://www.cloudskillsboost.google/focuses/17696?catalog_rank=%7B%22rank%22:1,%22num_filters%22:0,%22has_search%22:true%7D&parent=catalog&search_id=22626074) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,158 @@ | ||
--- | ||
title: Jenkins에서 docker build시, docker.sock 권한 에러 발생 해결 | ||
date: 2024-08-28 17:00:00 +0900 | ||
categories: [Project, POCHAK] | ||
tags: [backend, infra, jenkins, troubleshooting] # TAG names should always be lowercase | ||
--- | ||
|
||
# 에러 상황 | ||
|
||
## 발생 위치 | ||
|
||
Jenkins에서 배포 과정을 실행하며 다음과 같은 오류가 발생하였습니다. | ||
|
||
![error](/assets/img/2024-08-28-docker.sock-permission-error/1-error-img.png) | ||
_에러 발생!!_ | ||
|
||
- 에러가 발생한 파이프라인의 명렁어 | ||
|
||
``` bash | ||
$ docker build -f Dockerfile -t pochakgreen/pochak-dev . | ||
``` | ||
|
||
## 원인 확인 | ||
|
||
아래의 로그로 확인해봤을때, `docker.sock` 실행 과정에서 `permission denied` 권한 에러가 발생하였습니다. | ||
|
||
에러 해결과정을 정리해보겠습니다! | ||
|
||
- 로그 | ||
|
||
``` | ||
jenkins@fbfbfcdce8e0:~/workspace/dev-pipeline$ docker build -f Dockerfile -t pochakgreen/pochak-dev . | ||
DEPRECATED: The legacy builder is deprecated and will be removed in a future release. | ||
Install the buildx component to build images with BuildKit: | ||
https://docs.docker.com/go/buildx/ | ||
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: | ||
... | ||
: dial unix /var/run/docker.sock: connect: permission denied | ||
``` | ||
|
||
# 환경 | ||
|
||
## 호스트 환경 | ||
- Ubuntu 20.04.6 LTS | ||
- Docker version 27.1.2 | ||
- Jenkins Version 2.473 : 도커 컨테이너로 실행 | ||
|
||
## 도커 컨테이너 | ||
|
||
다음과 같은 명령어를 통해 도커 소켓을 마운트해서 Jenkins 컨테이너를 실행시키고 있습니다. | ||
|
||
``` bash | ||
$ docker run \ | ||
-itd --name jenkins \ | ||
-p 9090:8080 \ | ||
-v /var/run/docker.sock:/var/run/docker.sock \ | ||
-v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:jdk17 | ||
``` | ||
|
||
# 해결 과정 | ||
|
||
## docker.sock의 권한 확인 | ||
|
||
먼저 docker container로 접속해서 `docker.sock`의 권한을 확인합니다. | ||
|
||
```bash | ||
$ docker exec -it jenkins /bin/bash | ||
$ ls -al /var/run/ | ||
``` | ||
|
||
`docker.sock` 파일의 그룹 권한이 이름이 없고 GID `998`로 설정되어 있는 것을 확인할 수 있습니다. | ||
|
||
![check-permission](/assets/img/2024-08-28-docker.sock-permission-error/2-check-permission.png) | ||
|
||
> 따라서 앞으로의 해결 과정은 | ||
> 1. `docker` 그룹을 만들어서 | ||
> 2. `jenkins` 유저를 `docker` 그룹에 넣어주고, | ||
> 3. `docker` 그룹에 `docker.sock` 실행권한을 부여해줄 예정입니다. | ||
{: .prompt-tip } | ||
|
||
## `docker` 그룹 설정 | ||
|
||
먼저 젠킨스 컨테이너에 root 권한으로 접속합니다. | ||
|
||
```bash | ||
$ docker exec -itu0 jenkins /bin/bash # root로 접속 | ||
``` | ||
|
||
<br> | ||
|
||
저는 기존에 docker 그룹이 없었기 때문에 새로 생성해 주었습니다. | ||
- 이미 존재할 경우 새로 생성할 필요 없음! | ||
|
||
```bash | ||
$ groupadd docker | ||
``` | ||
|
||
<br> | ||
|
||
그 뒤, `jenkins` 유저를 그룹에 넣어주고,<br> | ||
docker 그룹에 `docker.sock` 실행권한을 부여하였습니다. | ||
|
||
```bash | ||
$ usermod -aG docker jenkins | ||
$ chown root:docker /var/run/docker.sock | ||
``` | ||
|
||
![group-setting](/assets/img/2024-08-28-docker.sock-permission-error/3-group-setting.png) | ||
|
||
## `docker.sock` 실행권한 확인 | ||
|
||
다시 젠킨스로 접속하여 `docker.sock`의 권한을 확인하면, <br> | ||
docker 그룹에 실행 권한이 생긴걸 확인할 수 있습니다. | ||
|
||
```bash | ||
$ docker exec -itu0 jenkins /bin/bash # 다시 jenkins로 접속 | ||
$ ls -al /var/run/ | ||
``` | ||
|
||
![permission](/assets/img/2024-08-28-docker.sock-permission-error/4-permission.png) | ||
|
||
<br> | ||
|
||
또한 아래의 명령어를 통해 `docker` 그룹 안에 `jenkins` 유저가 있는 것도 확인할 수 있습니다. | ||
|
||
```bash | ||
$ cat /etc/group | grep docker | ||
``` | ||
|
||
![img](/assets/img/2024-08-28-docker.sock-permission-error/5-group.png) | ||
|
||
## jenkins 재시작 | ||
|
||
이렇게 권한을 모두 확인하였음에도 "바로" jenkins 파이프라인을 실행시키면, 동일한 오류가 발생합니다. | ||
|
||
<br> | ||
|
||
재시작을 하지 않고, 파이프라인에 `id` 명령어를 통해 확인해보니, `jenkins` 유저에 `docker` 그룹이 빠져있는 것을 확인할 수 있었습니다. | ||
|
||
![img](/assets/img/2024-08-28-docker.sock-permission-error/6-id.png) | ||
|
||
> 참고로 터미널에서 jenkins 컨테이너에 접속해서 확인해봤을 때는 docker 그룹도 잘 나오는 상태였습니다. | ||
> ![img](/assets/img/2024-08-28-docker.sock-permission-error/7-terminal.png) | ||
{: .prompt-info } | ||
|
||
<br> | ||
|
||
따라서 jenkins 컨테이너를 재시작하고 다시 파이프라인을 실행하면, | ||
다음과 같이 `docker` 그룹도 확인할 수 있고, | ||
배포 과정도 정상적으로 수행됩니다! | ||
|
||
![img](/assets/img/2024-08-28-docker.sock-permission-error/8-id.png) | ||
|
||
![img](/assets/img/2024-08-28-docker.sock-permission-error/9-success.png) | ||
_해결 완료!_ |
Oops, something went wrong.