기존 로컬 pc에서 React 프로젝트를 npm start 로 localhost로 접근이 가능한데

외부 pc에서도 접근이 가능 하도록 AWS EC2를 사용하여 배포해 보겠다.

1.AWS에 접근을 해 인스턴스 시작 버튼을 클릭하여 EC2 인스턴스를 만들어 준다.

2. 이름 및 Amazon Machine 이름을 Ubuntu로 선택해 주고 

3.인스턴스 유형을 자신에게 맞는 사양을 선택해 준다.

4.키 페어는 새 키페어 생성 버튼을 클릭 후 키페어를 RSA, .pem으로 설정하면 fileName.pem으로 다운로드 받을 수 있다.

5.네트워크 설정

6.스토리지 구성 후 인스턴스 시작 버튼으로 인스턴스를 생성해 주면 된다.

7.생성된 인스턴스 정보에서 퍼블릭 IPv4주소 를 복사 후 우측 상단의 연결을 클릭 해 준다.

8.연결을 하면 아래와 같은 화면이 나타나는 못습을 볼 수 있을 것이다.

9. git clone 저장소ssh주소 를 입력해 프로젝트를 위의 ubuntu에 다운받아 

프로젝트 이름 으로 접근을 한다

ex) git clone https://github.com/youngw77/kalos.git

클론이 완료되면 cd kalos로 해당 프로젝트를 들어가 ls 명령어로 파일을 확인하면 된다.

이후 ubuntu에 노드를 설치해 보자

curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
sudo apt-get install nodejs

정상적으로 설치가 완료 됐으면 node -v 와 npm -v 로 버전을 확일할 수 있다.

10.웹서버 nodejs Express 설치하기

root 위치 kalos에서 server.js 파일을 만들어 줘 server.js를 실행시켜 웹서버를 동작할 예정이다.

명령어 vi server.js 를 입력하게 되면 server.js 파일이 만들어 진다.

아래의 명령어를 입력 후 키보드 Esc 버튼 -> :wq -> Enter 를 누르게되면 server.js파일안에 저장이 된다.

const http = require("http");
const express = require("express");
const path = require("path");

const app = express();

const port = 8000;

app.get("/ping", (req, res) => {
    res.send("pong");
});

app.use(express.static(path.join(__dirname, "build")));

app.get("/*", (req, res) => {
res.set({
    "Cache-Control": "no-cache, no-store, must-revalidate",
    Pragma: "no-cache",
    Date: Date.now()
});
res.sendFile(path.join(__dirname, "build", "index.html"));
});

http.createServer(app).listen(port, () => {
  console.log(`app listening at ${port}`);
});

생성이 완료되면 ls 명령어로 server.js가 추가로 생성된 모습을 볼 수 있다.

11.node server.js로 웹서버를 실행하고 인스턴스 정보에서 퍼블릭 IPv4:8000 를 입력하면 해당 프로젝트가 실행 된 모습을 볼 수 있다.

AWS EC2 배포가 정상적으로 된 모습을 확인 할 수 있다.

'AWS' 카테고리의 다른 글

AWS S3 bucket file Vue로 나타내기  (0) 2023.03.22
AWS S3 buket file list 나타내기  (0) 2023.03.21
S3 file upload  (0) 2023.03.15
AWS S3 버킷 생성 및 설정  (0) 2023.03.14

기존에 html로 나타난 aws s3 bucket list => Vue(Vuetify)로 변경 하기

1.Vue Project 생성

VSCode terminal에서 vue create filename 으로 자신이 정한 filename의 vue 프로젝트를 생성해준다.

default값은 Vue2로 생성해주었다. filename은 소문자로 구성되어야한다. filename(o),  fileName(x)

이후 cd filename 으로 생성한 프로젝트로 이동 후 

npm run serve를 하면 vue 프로젝트 화면을 볼 수 있다.

이후 terminal에 vue add vuetify를 입력후 Vuetify 2 - Vue CLI (recommended) 를 선택해주

아래와 같은 화면이 나오는 모습을 확인할 수 있을 것이다.

2.하위 디렉토리로 가서 HelloWorld.vue 파일을 열어준다. filename -> src -> components -> HellowWorld.vue

terminal에서 npm install aws-sdk --save로 aws-sdk 파일을 받아 준 후

HelloWorld.vue 파일을 아래와 같이 수정해 준다.

<template>
  <v-container>
    <h1>fileList</h1>
        <div v-for="(folder ) in AWSFolderList" :key="folder.Key">
        <li @click="viewFolder(folder.Prefix)">{{ folder.Prefix }}</li></div>
        <div v-for="(file, index ) in AWSFileList" :key="file.Key">
        <v-checkbox @click="fileDir(file, index)" class="shrink mr-0 mt-0"><template v-slot:label><div>{{ file.Key }}</div></template></v-checkbox>
          </div>
        <v-btn @click="fileList">리스트</v-btn>
  </v-container>
</template>

<script>
import AWS from 'aws-sdk'
export default{
  data(){
    return{
      file: null,
      fileBucketName: 'BUCKETNAME',
      bucketRegion: 'REGION',
      IdentityPoolId: 'POOLID',
      AWSFolderList: [],
      AWSFileList: [],
    }
  },
  created(){
    this.fileList();
  },
  methods:{
    handlefileSelect(){
      this.file = this.$refs.file.files[0];
      console.log(this.file,'select');
    },
    fileList(){
      AWS.config.update({
      region: this.bucketRegion,
      credentials: new AWS.CognitoIdentityCredentials({
      IdentityPoolId: this.IdentityPoolId
        })
      });
      var s3 = new AWS.S3({
        apiVersion: "2006-03-01",
        params: { Bucket: this.fileBucketName }
      });
      s3.listObjects({ Delimiter: "/",  }, (err, data) => {
      if (err) {
        return alert("There was an error listing your files: " + err.message);
      } else {
        this.AWSFolderList = data.CommonPrefixes;
        this.AWSFileList = data.Contents;
        console.log(data);
      }
    });
      },
      viewFolder(e){
        AWS.config.update({
      region: this.bucketRegion,
      credentials: new AWS.CognitoIdentityCredentials({
      IdentityPoolId: this.IdentityPoolId
        })
      });
      var s3 = new AWS.S3({
        apiVersion: "2006-03-01",
        params: { Bucket: this.fileBucketName }
      });
        console.log(e);
        s3.listObjects({ Delimiter: "/", Prefix: e }, (err, data) => {
      if (err) {
        return alert("There was an error listing your files: " + err.message);
      } else {
        this.AWSFolderList = data.CommonPrefixes;
        this.AWSFileList = data.Contents;
        console.log(data);
      }
    });
      },
      fileDir(e){
        console.log(e);
      },
  }

}
</script>

<style>
</style>

aws s3의 bucket과 동일하게 리스트를 불러올 수 있다.

폴더를 클릭하면 하위 디렉토리로 이동 파일을 클릭시 console창에서 checkbox 의 해당 data 값을 확인할 수 있다.

 

'AWS' 카테고리의 다른 글

React Project AWS EC2 배포 하기  (1) 2023.06.02
AWS S3 buket file list 나타내기  (0) 2023.03.21
S3 file upload  (0) 2023.03.15
AWS S3 버킷 생성 및 설정  (0) 2023.03.14

Html 과 Javascript를 사용하여 S3 bucket에 존재하는 파일 및 폴더를 Html로 나타내고 폴더 클릭시 해당 폴더 하위 디렉토리로 이동 하게끔 구현, 파일 클릭시 해당 파일의 path 경로 나타나도록 구현해 보겠다.

1. 화면 구성

 

위 폴더 5개 a~e Prefix.replace("/", "")와 같은 방식으로 /를 제거해주고 화면에 나타내주고

아래는 .png 파일이다,

 

 

 

 

 

S3 bucket의 상태이다.

 

 

 

 

2. AWS.html의 파일 구성

<!DOCTYPE html>
<html>
  <head>
    <script src="./test.js"></script>
    <script>
       function getHtml(template) {
          return template.join('\n');
       }
       listFiles();
    </script>
  </head>
  <body>
    <h1>S3 FileList</h1>
    <div id="mono"></div>
    <div id="di"></div>
  </body>
</html>

3.test.js 전체 코드 파일 구성 BUCKETNAME, REGION, POOLID는 https://les-fourmis.tistory.com/52 에서 방법을 확인할 수 있다.해당 링크에 들어가서 각 값을 생성 후 생성 값을 입력해 주면 된다.

var fileBucketName = "BUCKETNAME"
var bucketRegion = "REGION";
var IdentityPoolId = POOLID";

AWS.config.update({
  region: bucketRegion,
  credentials: new AWS.CognitoIdentityCredentials({
  IdentityPoolId: IdentityPoolId
  })
});

var s3 = new AWS.S3({
  apiVersion: "2006-03-01",
  params: { Bucket: fileBucketName }
});

function listFiles() {
    s3.listObjects({ Delimiter: "/",  }, function(err, data) {
      if (err) {
        return alert("There was an error listing your files: " + err.message);
      } else {
        console.log(data);
        var files = data.CommonPrefixes.map(function(commonPrefix) {
          var prefix = commonPrefix.Prefix;
          var fileName = decodeURIComponent(prefix.replace("/", ""));
          return getHtml([
            "<li>",
            "<span onclick=\"viewFile('" + fileName + "')\">",
            fileName,
            "</span>",
            "</li>"
          ]);
        });
        var message = files.length
          ? getHtml([
              "<p>Click on an file name to view it.</p>",
            ])
          : "<p>You do not have any files. Please Create album.";
        var htmlTemplate = [
            "<h2>Files</h2>",
            message,
            "<ul>",
            getHtml(files),
            "<li>",
            data.Contents[data.Contents.length-1].Key,
            "</li>",
            "</ul>",
        ];
        document.getElementById("mono").innerHTML = getHtml(htmlTemplate);
      }
    });
  }

  function viewFile(fileName){
    var fileKey = encodeURIComponent(fileName) + "/";
  s3.listObjects({ Prefix: fileKey, Delimiter: "/" }, function(err, data) {
    if (err) {
      return alert("There was an error viewing your file: " + err.message);
    }
    console.log(data);
    var folderfiles = data.Contents.map(function(fold) {
      var folderKey = fold.Key;
      return getHtml([
        "<span>",
        "<div>",
        "<span>",
        "<input type='checkbox' class='DirCheck' onclick=\"Dir('" + folderKey + "')\">",
        folderKey.replace(fileKey, ""),
        "</input>",
        "</span>",
        "</div>",
        "</span>",
      ]);
    });
    var message = folderfiles.length
    ? `Folder ${fileName} no files`
    : "<p>You do not have any files in this file. Please add file.</p>";
    console.log(data.CommonPrefixes);
    if(data.CommonPrefixes.length !== 0){
    var folderList = data.CommonPrefixes[data.CommonPrefixes.length-1].Prefix;
    var htmlTemplate = [
        "<h2>",
        "folder: " + fileName,
        "</h2>",
        message,
        "<div>",
        getHtml(
        folderfiles,
        ),
        "<span onclick=\"folderfiles('" +  folderList + "')\">",
        folderList,
        "</div>",
        '<button onclick="listFiles()">',
        "Back To Files",
        "</button>",
        "<br>",
        "</br>",
        ];
        document.getElementById("mono").innerHTML = getHtml(htmlTemplate);
        document.getElementById("di").innerHTML = null;
    }
    else{
    var htmlTemplate = [
        "<h2>",
        "folder: " + fileName,
        "</h2>",
        message,
        "<div>",
        getHtml(
        folderfiles,
        ),
        "</div>",
        '<button onclick="listFiles()">',
        "Back To Files",
        "</button>",
        "<br>",
        "</br>",
        ];
        document.getElementById("mono").innerHTML = getHtml(htmlTemplate);
        document.getElementById("di").innerHTML = null;
    }
    });
  }

  function folderfiles(PrefixData){
    s3.listObjects({ Delimiter: "/", Prefix: PrefixData }, function(err, data) {
        if (err) {
          return alert("There was an error listing your files: " + err.message);
        } else {
          console.log(data);
          var files = data.CommonPrefixes.map(function(commonPrefix) {
            var prefix = commonPrefix.Prefix;
            var fileName = decodeURIComponent(prefix);
            return getHtml([
              "<li>",
              "<span onclick=\"viewFile('" + fileName + "')\">",
              fileName.replace(PrefixData, ''),
              "</span>",
              "</li>"
            ]);
          });
          var message = files.length
            ? getHtml([
                "<p>Click on an file name to view it.</p>",
              ])
            : "<p>You do not have any files. Please Create album.";
          var htmlTemplate = [
              "<h2>Files</h2>",
              message,
              "<ul>",
              getHtml(files),
              "<li>",
              data.Contents[data.Contents.length-1].Key.replace(PrefixData, ''),
              "</li>",
              "</ul>",
              '<button onclick="listFiles()">',
              "Back To Files",
              "</button>",
          ];
          document.getElementById("mono").innerHTML = getHtml(htmlTemplate);
        }
    });
}

function Dir(e){
    console.log(e);
    let result = e;
    document.getElementById("di").innerHTML =  result;
  }

s3.ListObjects() 는 아래의 형식을 가진다.

listFiles 함수를 보면  화면에 나타낼 때 Delimiter: "/" 를 사용해서 폴더파일 즉 a/ b/ c/ d/ e/ 폴더로 나뉘어 data.CommonPrefixes의 배열 값으로 나눠지고 나머지 값은 data.contents의 배열에 담기게 된다.

따라서 폴더 클릭시 onClick을 사용하여 viewfile 함수로 이동하여 해당 폴더의 파일들을  <div id="mono">로 화면에 뿌려주었고

나머지 값 폴더가 아닌 파일은 

data.Contents[data.Contents.length-1].Key

를 사용하여 <div id="di">로 화면에 뿌려주었다.

 

 

'AWS' 카테고리의 다른 글

React Project AWS EC2 배포 하기  (1) 2023.06.02
AWS S3 bucket file Vue로 나타내기  (0) 2023.03.22
S3 file upload  (0) 2023.03.15
AWS S3 버킷 생성 및 설정  (0) 2023.03.14

aws에 올라온 예제 코드를 이용해 S3에 file이 업로드 되는지 확인해보겠다.

1. https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/s3-example-photo-album-full.html

 

Amazon S3에 사진 업로드: 전체 코드 - AWS SDK for JavaScript

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

위 사이트에 들어가 HTML 예제 -> index.html, 브라우저 스크립트 코드 예제 -> app.js 로 VSCode 빈폴더에 만들어 준다.

2. terminal을 열어 npm install aws-sdk 명령어를 쓰면 package-lock.json, package.jon으로 aws-sdk와 관련된 파일이 생긴다.

pakgae-lock.json 파일을 오픈해보면 packages에 aws-sdk: 2.1335.0 이 나와있는 모습을 볼 수 있다.

3.위에서 확인한 sdk 버전을 SDK_VERSION_NUMBER 대신 넣어주고 src="./app.js"로 변경해준다.

4.https://les-fourmis.tistory.com/52

 

AWS S3 버킷 생성 및 설정

1.aws에 들어와 제품 -> 주요서비스 -> Amazon Simple Storage Service(S3)에 접속한다 2.버킷 만들기 클릭 한다. 3.버킷 이름 정하기 소문자와 - 이용 ex)abc-def 4.외부에서 자격을 부여한 사람은 접속이 가능하

les-fourmis.tistory.com

aws cognito에서 만들 풀에 들어가 자격 증명 풀 -> 샘플 코드를 선택해 준다.

AWS 자격 증명 얻기의 region 값과 IdentityPoolId 값을 app.js에

albumBucketName ->  기존 S3에서 만들 bucket 이름

bucketRegion -> region 값 'ap-northeast-2'

IdentityPoolId -> IdentityPoolId 값 '모자이크 값' 을 넣어주면 된다.

5.이후 VSCode 확장 프로그램 Live Server을 이용하여 index.html 파일을 웹으로 열게 되면

위와 같이 기존 S3에 test 폴더를 만든 값을 가지고 오는 모습을 볼 수 있다.

만약 값을 가지고 오지 못했으면 Albums 및에 데이터를 받아오지 못한다.

값을 가지고 오지 못하면 풀 생성을 다시해보기, app.js의 bucket name, region, identity 다시 확인 하고 저장을 하면

정상적으로 돌아가는 모습을 확인 할 수 있을 것이다.

'AWS' 카테고리의 다른 글

React Project AWS EC2 배포 하기  (1) 2023.06.02
AWS S3 bucket file Vue로 나타내기  (0) 2023.03.22
AWS S3 buket file list 나타내기  (0) 2023.03.21
AWS S3 버킷 생성 및 설정  (0) 2023.03.14

1.aws에 들어와 제품 -> 주요서비스 -> Amazon Simple Storage Service(S3)에 접속한다

2.버킷 만들기 클릭 한다.

3.버킷 이름 정하기 소문자와 - 이용 ex)abc-def

4.외부에서 자격을 부여한 사람은 접속이 가능하게끔  엑세스 차단 설정을 바꿔준다

5.기본 암호화 버켓 키 값은 비활성화로 설정한다

6.버켓 생성 이후 해당 버켓에 들어가 권한의 CORS 부분을 설정해 준다.

공식 사이트 CORS 구성의 예 에서 XML, JSON 형식 중 맞는 파일을 복사 후 붙여넣기를 해준다

https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/cors.html

 

CORS(Cross-Origin Resource Sharing) - AWS SDK for JavaScript

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

7.aws cognito에 접속 후 지역은 가까운 지역 AWS 서비스에 대한 엑세스 권한 부여로 바꿔주고 사용자 풀 생성을 눌러준다

https://aws.amazon.com/ko/cognito/

 

Cognito | 계정 동기화 | Amazon Web Services

퍼블릭 애플리케이션에서 기본 제공되는 네트워크 보호 기능을 활용하세요.

aws.amazon.com

8.자격 증명 풀 이름 및 인증되지 않은 자격 증명 check를 해주고 풀 생성을 누르면 된다

9.폴 생성 후 세부 정보 보기를 눌러 편집을 눌러 아래와 같이 수정후 허용을 누르면 된다.

https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html

 

브라우저에서 Amazon S3 S3로 사진 업로드 - AWS SDK for JavaScript

인증되지 않은 사용자의 액세스를 활성화하면 버킷과 해당 버킷의 모든 객체, 전 세계 모든 사람에게 쓰기 권한을 부여하게 됩니다. 이러한 보안 태세는 이 사례의 기본 목표에 초점을 맞추는

docs.aws.amazon.com

10.이후 생성된 모습을 볼 수 있다

'AWS' 카테고리의 다른 글

React Project AWS EC2 배포 하기  (1) 2023.06.02
AWS S3 bucket file Vue로 나타내기  (0) 2023.03.22
AWS S3 buket file list 나타내기  (0) 2023.03.21
S3 file upload  (0) 2023.03.15

+ Recent posts