• 『EKS』EKS기반 인프라 및 CICD구성 실습 - 1
    AWS/아키텍쳐 구현 2022. 6. 21. 18:35

    개요

    해당 아키텍쳐를 참고하여 구성을 할 예정이다.

    이번 글에서는 Node.js SDK를 사용해 DynamoDB에 값을 넣을 수 있도록 해볼 것이다.

    방향 및 난이도, 소요시간

    난이도는 보면서 따라하면 충분히 따라할 수 있는 정도의 난이도이다. 그러나 시간은 조금 걸릴 수 있다.

     

    첫번째 포스트에서는 애플리케이션을 생성하고 SDK 및 DynamoDB를 생성할 것이다.

    두번째 포스트에서는 EKS환경을 구축할 것이다.

    세번째 포스트에서는 ArgoCD를 구축할 것이다.

    네번째 포스트에서는 Codebuild와 같은 환경을 구축할 것이다.

     

     

     

    Node.js Application

    Node.js란?

    시작하기 앞서 Node.js에 대한 간단한 설명을 하고 시작하겠다.

    Node.js는 Chrome을 만든 Google사의 V8엔진을 가지고서 빌드가 되어있는 Javascript Runtime이다.

     

    쉽게 설명하자면 Chrome이라는 브라우저를 운영하려면 웹에서 사용되는 스크립트 언어인 javascript를

    해석시킬 수 있어야한다. 구글에서는 해당 엔진을 개발했고 그 엔진의 이름이 V8엔진이다.

     

    해당 엔진을 사용하면 Javascript를 해석하고 사용할 수 있는데 이 V8엔진을 떼서 서버에서 Javascript를 통해 애플리케이션을 실행시킬 수 있도록 만든 런타임이 바로 Node.js이다.

     

    왜 여기서는 Node.js를 사용할까?

    우선 현재 Javascript는 TypeScript, Node.js Vue.js등등 개발자들이 응용하여 사용하고있는 추세이고,

    조금만 공부하면 사용할 수 있을 정도로 간단하기 때문이다.

    사전 준비할 부분

    git, Node.js, postman agent, aws cli, IDE, Docker, kubectl, eksctl이 설치 되어있어야 한다.

     

    로컬의 aws cli에는 admin권한을 가진 엑세스키를 제공해서 admin권한을 가지도록 한다.

     

     

     

    소스코드

    소스코드는 zip파일로 걸어두었다.

    (원래는 github링크였다. 그러나 에러발생이 빈번해 기존에 내 파일로 수정하였다.)

    Nodejs_dynamoDB_Docker-main.zip
    0.01MB

    위 소스코드를 그대로 git clone을 하거나 download를 하여 로컬로 이동시킨다.

    그 뒤 vsCode나 다른 IDE를 통해서 해당 디렉토리를 켜서 server.js를 열어보면 아래와 같이 되어있다.

    ...
    const AWS = require('aws-sdk');
    app.use(bodyParser.json());
    const dynamodb = new AWS.DynamoDB.DocumentClient({region : "<DynamoDB_Region>"});
    
    app.get('/ui', (req, res, callback) => { 
        const promise = new Promise(function(resolve, reject) {         
            var params = {
                TableName: "<DynamoDB_Name>",
                KeyConditionExpression : 'ID = :i',
                ExpressionAttributeValues : {
                    ':i': req.body.id
                }
            };
            dynamodb.query(params, (err, data) => { 
                if (err) {
                    console.log("ERROR", err);
                    res.send({
                        statusCode: '500',
                        body: err
    ...

    이제 <DynamoDB_Region>이라고 적힌 부분과 <DynamoDB_Name>이라고 적힌 부분들을 해결해야한다.

    <DynamoDB_Region>은 ap-northeast-2로 수정을 해주도록 하자.

     

    이제 <DynamoDB_Name> 부분을 수정할 것인데 이름은 ekci-dynamo로 지정하도록 하자.

    그 뒤 스크롤을 조금 내리게 되면 아래와 같이 또 <DynamoDB_Name>이 있는데 이것 또한 수정하도록 하자

    ...
    app.post('/ui', (req, res, callback) => {
        const promise = new Promise(function(resolve, reject) {    
            var _id = req.body.id
            var _pw = req.body.passwd 
            var params = {
                Item: 
                {
                    "ID": _id,
                    "Password":_pw
                },             
                TableName: "<DynamoDB_Name>"
            };    
            var bodyre = req.body.id
            var bd = `POST complete ID is ${bodyre}`;
            dynamodb.put(params, function(err) {
                if (err) {
                    console.log("ERROR", err);
                    res.send({
                        statusCode: '500',
                        body: err
                    });
    ...

    위 코드는 마지막 부분 일부 발췌

     

    이제 npm ci를 하여 설치를하도록 하자 나의 경우 cmd에서 했다.

    npm ci

    그러면 package-lock.json에 의거해서 module이 설치된다.

    그 뒤 실행을하면 위와 같이 SERVER ON!이라고 뜨면서 서버가 정상적으로 실행이 된다.

    이제 DynamoDB를 생성해야한다.

    이제 전부 생성이 되었으니 테스트를 진행하도록 하자.

    postman으로 들어가서 http request를 선택하여 아래와 같이 설정하여 POST요청을 보낸다.

    이제 요청을 보내서 값이 잘 DynamoDB에 저장되었는지 확인한다.

    잘 적용된 것을 확인 할 수 있다.

     

    이제 Node.js서버를 Ctrl + C를 눌러서 종료하고

    node_modules를 제외하고 github에 올리든 S3에 올리든하자.

     

    그 이유는 이후 ec2 instance를 하나 생성하여 ecr로 업로드를 하는 부분이 있는데 해당 부분에서

    s3에서 가져오든 github에서 가져오든 두가지 형식이 가장 많이 사용되는데 그때가서 하기에는

    귀찮아 지기 때문이다.

     

    나의 경우는 따로 private repository를 생성해두었고 업로드를 해두었다.

     

    이제 다음 실습에서는 EKS환경을 구축을 할 것이다.

     

    댓글