AWS, arm64 계열 t4g 환경준비
AWS, lightsail 에서 AWS EC2환경으로 이전을 준비하는 과정을 정리
서비스를 준비하면서 AWS, lightsail 에서 AWS EC2환경으로 이전을 준비하는 과정을 정리하고 있다.
lightsail 에서 컨테이너 서비스 환경을 사용하기에는 클러스터서버를 구축해야하는 내 상황과는 달랐다.
그래서 AWS 상에 네트워크를 구축하고 arm 계열 서버를 사용할 목적으로 서버도 x86 기준에서 arm 기준으로 컴파일해야 했고 docker 이미지도 환경을 맞춰줘야 했다.
1. linux/arm64서버 환경에서 Golang 서버 컴파일
go build 명령어는 다음과 같다.
GOGC=11300 CGO_ENABLED=1 CC=aarch64-unknown-linux-gnu-gcc GOOS=linux GOARCH=arm64 GOBIN=./bin go build -ldflags=-X main.Ver=$(GIT_TAG) -X main.Bld=$(NOW_DATE) -X main.Rev=$(GIT_REVISION) -s -w -o ./bin/magnolia.l $(PRJ_BASE)/cmd/main.go
서버에 CGO 를 쓰는 부분이 있어 aarch64 환경에 맞추어 크로스 컴파일하는 부분을 볼 수 있다. 관련 크로스컴파일 도구는 지난 글을 참조 한다.
2. linux/arm64 Docker 이미지 생성하기
1) docker buildx build
Docker Buildx 빌드는 Multi-Archtecture Image 빌드 참고글 을 확인한다.
2) dockerfile
전에는 alpine 이미지를 썼는데 여러 library 문제로 ubuntu를 사용하기로 했는데 가장 우려했던 이미지 크기도 크지 않고 여러모로 나름 만족하고 있다.
FROM --platform=$BUILDPLATFORM ubuntu:latest
RUN apt-get update && \
apt-get install -y ca-certificates && \
apt-get install -yq tzdata && \
apt-get install -y webp && \
ln -fs /usr/share/zoneinfo/Asia/Seoul /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
ENV TZ="Asia/Seoul"
COPY ./bin/magnolia.l /app/magnolia.l
COPY ./configs /app/configs
RUN chmod +x /app/magnolia.l
WORKDIR /app
# 환경변수를 선언해서 -e MODE='svc' 형식으로 환경변수를 application 에 전달
ENV MODE "svc"
ENV SEVER_ADDR "127.0.0.1"
ENV SEVER_ADVERTISE "127.0.0.1"
ENV SEVER_PORT "7777"
ENV NODE_NAME "breezy"
ENV NODE_MEMBER "127.0.0.1:7777"
ENTRYPOINT ["./magnolia.l"]