본문 바로가기

ChatGPT/AWS Serverless

[AWS][SERVERLESS] 개발 환경 구축하기 - 2

반응형

https://tobelinuxer.tistory.com/47

 

CHATGPT로 블로그 작성하기 : AWS 서버리스 개발 환경 구축하기 - 1

이 글에서는 ChatGPT 3.5와 4.0의 답에 대해서 비교해보겠습니다. 3.5에 먼저 물어봤는데 제가 원하는 답이 제가 AWS 서버리스 개발하는데, 윈도우 호스트에다가 우분투 VM을 만들고 제 AWS 계정에 접근

tobelinuxer.tistory.com

이전 포스팅에서 대략적인 AWS 서버리스 개발 환경에 대해서 ChatGPT를 통해 알아봤습니다.

먼저 저는 AWS 서버리스 개발하는데, 윈도우 호스트에다가 우분투 VM을 만들고 제 AWS 계정에 접근해서 AWS 서버리스 개발할 수 있는 환경을 포함하는 도커 이미지를 container로 만들고 이 위에서 개발합니다.

이 도커 이미지에는 Serverless framework 라이브러리가 포함되어 있습니다. 

Serverless 환경 구축에 다양한 방법이 존재한다고 하지만 저랑 같은 방법을 소개해줬네요.

그럼 제가 생각하는 환경 구축에 대해서 두서없이 ChatGPT에게 말하고 어떻게 답하는지 보겠습니다.

이글에서는 ChatGPT 4.0 기준입니다. 3.5와 대화해봤는데, 저의 의도를 잘 파악 못하는 것 같아서, 이 글에서 제외했습니다.


나:  

개발을 위한 환경설정을 할거야. 윈도우 PC에 VM Ware로 우분투 22.04를 설치하고 여기에 도커를 설치하고 개발을 위한 이미지를 만들꺼야. 이미지는 severless framework를 기반으로 AWS Lambda를 개발할 수 있는 이미지를 만들어죠. node16 기반이고 typescript, express를 활용할 생각이야


ChatGPT 4.0:

환경 설정을 시작하기 전에 필요한 소프트웨어와 도구들을 먼저 확인해보겠습니다.

  1. VM Ware Workstation Player 또는 VM Ware Workstation Pro 설치
  2. Ubuntu 22.04 ISO 이미지 다운로드
  3. Docker 설치
  4. Serverless Framework 설치
  5. Node.js v16 설치
  6. TypeScript 및 Express 설치

아래 단계별로 환경을 설정해봅시다:


1. VM Ware Workstation 설치

VM Ware Workstation Player 또는 VM Ware Workstation Pro를 설치하세요. 다운로드 링크는 다음과 같습니다.

Player: https://www.vmware.com/go/downloadplayer
Pro: https://www.vmware.com/go/downloadworkstation
설치가 완료되면, VM Ware를 실행하세요.



2. Ubuntu 22.04 설치


Ubuntu 22.04 ISO 이미지를 다운로드하세요.

다운로드 링크: https://releases.ubuntu.com/22.04/
VM Ware에서 새 가상 머신을 생성하고 다운로드한 ISO 파일을 선택하여 설치하세요. 설치가 완료되면 가상 머신을 실행합니다.



3. Docker 설치

터미널을 열고 다음 명령어를 입력하여 Docker를 설치하세요:

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce

4. Serverless Framework 설치

아래 명령어로 Node.js와 NPM을 설치합니다.

curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

다음 명령어를 사용하여 Serverless Framework를 설치합니다:

npm install -g serverless

5. TypeScript 및 Express 설치

새 프로젝트 폴더를 생성하고, 다음 명령어를 사용하여 TypeScript와 Express를 설치합니다:

mkdir my-project
cd my-project
npm init -y
npm install typescript express

6. Docker 이미지 생성

Dockerfile을 생성하고 아래 내용을 입력합니다:

FROM node:16

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

이제 Docker 이미지를 빌드합니다:

docker build -t my-serverless-image .

이제 개발 환경이 설정되었습니다. 

생성된 Docker 이미지를 사용하여 AWS Lambda 기반의 Serverless 프로젝트를 개발할 수 있습니다.


훌륭한 답변이지만 중간에 제 의도를 잘 못 해석한 감이 있습니다.

4번 Severless framework 설치와 5번 Typescript 및 Express 설치는 스킵한다고 해도 Dockerfile이 조금 수정이 필요해보입니다.

그럼 ChatGPT에게 요구사항을 입력해서 수정하게 만들어 보겠습니다.


나 :

docker 파일에 몇가지 추가할께. 먼저 ssh 가능하게 해주고, docker 실행시 bash 영역으로 들어가게 해줘 그리고 언어는 ko_KR.UTF-8 이걸로 해주고, 쉘도 bash로 해주고 node유저를 만들어줘. 워킹 디렉티로는 유저 홈으로 해주고 호스트의 .aws 와 .ssh를 복사해서 넣어죠


ChatGPT-4.0:

Dockerfile을 업데이트하여 요청한 사항들을 반영해 보겠습니다.

# 기본 이미지 설정
FROM node:16

# SSH 설치
RUN apt-get update && \
    apt-get install -y openssh-server && \
    mkdir /var/run/sshd

# 한글 설정
RUN apt-get install -y locales && \
    locale-gen ko_KR.UTF-8
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8

# 기본 쉘을 bash로 변경
SHELL ["/bin/bash", "-c"]

# node 유저 생성 및 홈 디렉토리 설정
RUN useradd -m -s /bin/bash node
USER node
WORKDIR /home/node

# 호스트의 .aws와 .ssh 디렉토리 복사
COPY --chown=node:node ./.aws /home/node/.aws
COPY --chown=node:node ./.ssh /home/node/.ssh

# 앱 의존성 설치
COPY --chown=node:node package*.json ./
RUN npm install

# 앱 소스 복사
COPY --chown=node:node . .

# 포트 3000개방 및 SSH 서버 시작
EXPOSE 3000 22
CMD service ssh start && npm start

 

쓰면 쓸수록 놀랍다는 생각뿐입니다. 너무 잘 알아듣고 그를 잘 반영하는 것 같습니다.

실제로 돌려봐야 겠지만 대충 봤을 때는 잘 돌아갈 것 같습니다.

일단 더 수정이 필요해서 몇번 질의를 통해 Dockerfile 조금 수정하고 locale  부분은 수동으로 수정해줬습니다.

최종적으로 아래와 같이 만들었습니다.

 

# 기본 이미지 설정
FROM node:16

# SSH 설치
RUN apt-get update && \
    apt-get install -y openssh-server && \
    mkdir /var/run/sshd

# 한글 설정
RUN apt-get install -y locales locales-all
ENV LC_ALL ko_KR.UTF-8

# 기본 쉘을 bash로 변경
SHELL ["/bin/bash", "-c"]

# 호스트의 .aws와 .ssh 디렉토리 복사
COPY --chown=node:node ./.aws /home/node/.aws
COPY --chown=node:node ./.ssh /home/node/.ssh

# Serverless Framework 및 serverless-offline 설치
RUN npm install -g serverless serverless-offline

# AWS CLI 설치
USER root
RUN apt-get install -y python3-pip && \
    pip3 install awscli --upgrade

# 포트 3000개방 및 SSH 서버 시작
EXPOSE 3000 22
CMD service ssh start && su node -c "tail -f /dev/null"

이제 업데이트된 Dockerfile을 사용하여 이미지를 다시 빌드합니다.

docker build -t my-serverless-image .

이미지가 생성되면, 다음 명령어로 Docker 컨테이너를 실행하고 바로 bash 쉘로 진입할 수 있습니다.

docker run -it -p 3000:3000 -p 22:22 --name my-serverless-container my-serverless-image

여기까지 ChatGPT 답변이었습니다. 이제 실제로 동작하는지 검증해보겠습니다.

일단 이미지를 만들어 보겠습니다. 

Dockerfile을 만들고 ChatGPT에서 알려준 명령어를 실행했습니다.

잘만들어진 것 같습니다.

이제 컨테이너를 실행하겠습니다. 다만 22번 포트는 사용 중이기 때문에 15022로 대체합니다.

ssh 데몬도 돌고있고 tail도 돌고 있고 잘 동작하는 것을 볼 수 있습니다.

아쉬운 부분이 있지만, 전체적인 흐름 상 큰 오류는 없어 보였습니다.

반응형