AWS, arm64 계열 t4g 환경준비

AWS, arm64 계열 t4g 환경준비
Photo by Gabriel Heinzer / Unsplash

서비스를 준비하면서 AWS, lightsail 에서 AWS 환경으로 이전을 준비하는 과정을 정리하고 있다.

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 빌드 참고글 을 확인한다.

docker buildx use snaptok
docker buildx build --platform linux/arm64 --tag XXXXXXXX.dkr.ecr.ap-northeast-2.amazonaws.com/snaptok:$(NOW_DAY) --push .
--push 옵션으로 ECR 에 바로 push 한다

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"]