반응형

구현 기록용

 

1. AWS IAM(Identity and Access Management) 셋팅

IAM 역할 생성 단계

1. AWS Management Console 로그인

AWS Management Console에 로그인합니다. IAM 서비스를 검색하거나 대시보드에서 찾아서 엽니다.

2. 역할 생성

  • IAM 대시보드에서 역할 섹션을 선택하고 역할 만들기 버튼을 클릭합니다.
  • 신뢰할 수 있는 엔티티 유형 선택 화면에서 AWS 서비스를 선택하고, 사용할 서비스 유형을 선택합니다. CodeDeploy의 경우 CodeDeploy를, EC2 인스턴스의 경우 EC2 서비스를 선택합니다.

3. 권한 정책 연결

  • 역할에 연결할 권한 정책을 선택합니다. 예를 들어:
    • EC2 인스턴스를 위한 역할에는 AmazonEC2FullAccess, AmazonS3ReadOnlyAccess 등의 정책을 연결할 수 있습니다.
    • CodeDeploy 역할의 경우 AWSCodeDeployRole 정책을 사용합니다. 이 정책은 CodeDeploy가 EC2 인스턴스에 애플리케이션을 배포하는 데 필요한 권한을 제공합니다.
  • 필요에 따라 추가적인 정책을 선택할 수 있습니다.

4. 태그 추가 (선택 사항)

  • 역할에 태그를 추가할 수 있습니다. 태그는 관리 및 추적을 용이하게 합니다.

5. 역할 이름 및 설명 입력

  • 역할에 명확하고 구체적인 이름을 입력합니다. 예: CodeDeployServiceRole, EC2CodeDeployRole 등.
  • 역할에 대한 설명도 추가합니다. 이는 나중에 역할을 식별하는 데 도움이 됩니다.

6. 역할 생성 완료

  • 모든 설정을 검토한 후 역할 만들기를 클릭하여 역할을 생성합니다.

추가 정보

  • EC2 인스턴스용 역할은 EC2 인스턴스가 다른 AWS 서비스(예: S3, DynamoDB)에 액세스할 수 있도록 설정하는 데 사용됩니다.
  • CodeDeploy 역할은 AWS CodeDeploy가 AWS 리소스에 액세스하여 애플리케이션을 배포할 수 있도록 합니다.

 

2. EC2에 CodeDeploy 설치

 

sudo yum update
sudo yum install ruby
sudo yum install wget
cd /home/ec2-user
wget https://aws-codedeploy-{region}.s3.{region}.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

 

또는

 

sudo apt-get update
sudo apt-get install -y ruby wget

cd /home/ubuntu
wget https://aws-codedeploy-{region}.s3.{region}.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto

sudo service codedeploy-agent status

 

 

3. AWS CodeDeploy 애플리케이션 및 배포 그룹설정

1. AWS CodeDeploy 애플리케이션 생성

  1. AWS Management Console에 로그인하고, 서비스 메뉴에서 CodeDeploy를 선택합니다.
  2. CodeDeploy 대시보드에서 애플리케이션 생성을 클릭합니다.
  3. 애플리케이션 이름을 입력하고, 계산 플랫폼으로 EC2/온프레미스를 선택합니다. 애플리케이션 이름은 프로젝트를 명확하게 식별할 수 있는 이름이어야 합니다.
  4. 애플리케이션 생성 버튼을 클릭하여 애플리케이션을 만듭니다.

2. 배포 그룹 생성

  1. 새로 생성한 애플리케이션의 상세 페이지에서 배포 그룹 생성을 클릭합니다.
  2. 배포 그룹 이름을 입력합니다. 이 이름은 배포를 관리할 때 사용됩니다.
  3. 서비스 역할에서 이전에 생성한 IAM 역할을 선택합니다. 이 역할은 CodeDeploy가 EC2 인스턴스에 접근하여 코드를 배포할 수 있게 허용합니다.
  4. 배포 유형에서 원하는 배포 설정을 선택합니다. 일반적으로 현재 위치에 배포가 가장 많이 사용됩니다.
  5. 환경 구성에서 배포할 EC2 인스턴스를 지정합니다. 인스턴스를 태그, Auto Scaling 그룹, 또는 직접 선택 방식으로 지정할 수 있습니다.
    • 예를 들어, Amazon EC2 인스턴스를 선택하고 인스턴스에 설정한 특정 태그로 필터링할 수 있습니다.
  6. 로드 밸런서 설정은 선택 사항입니다. 로드 밸런서를 사용하는 경우, 해당 섹션에서 로드 밸런서를 설정할 수 있습니다.
  7. 배포 설정에서 배포 방법을 선택할 수 있습니다. 예를 들어, CodeDeployDefault.AllAtOnce (한 번에 모든 인스턴스에 배포), CodeDeployDefault.HalfAtATime (절반씩 순차적 배포) 등의 옵션이 있습니다.
  8. 배포 그룹 생성을 클릭하여 배포 그룹을 완성합니다.

3. 설정 검토 및 저장

  • 모든 설정을 검토하고, 최종적으로 확인한 후에 저장 버튼을 클릭합니다.

 

 

4. 프로젝트에 appspec.yml 파일 생성

우분투 예시

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/your-app-directory

hooks:
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 300
      runas: ubuntu

  AfterInstall:
    - location: scripts/install_dependencies.sh
      timeout: 300
      runas: ubuntu

  ApplicationStart:
    - location: scripts/start_server.sh
      timeout: 300
      runas: ubuntu

  ValidateService:
    - location: scripts/validate_server.sh
      timeout: 300
      runas: ubuntu

 

start_server.sh, stop_server.sh 등 파일 커스텀 예시

#!/bin/bash
# 이 스크립트는 Node.js 애플리케이션을 시작합니다.
cd /home/ubuntu/your-app-directory # 애플리케이션 디렉토리로 이동
npm install # 필요한 패키지 설치
npm start # 애플리케이션 시작



#!/bin/bash
# 이 스크립트는 Node.js 애플리케이션을 중지합니다.
# 'killall node'는 모든 Node 프로세스를 중지합니다. 더 세밀한 제어가 필요한 경우 다른 방법을 사용하세요.
pkill node

 

5. GitHub Actions 설정

 

1. 필요 조건

  • AWS 계정이 필요합니다.
  • AWS IAM 사용자를 생성하고, CodeDeploy 및 S3에 접근할 수 있는 적절한 권한을 부여받은 Access key ID와 Secret access key가 필요합니다.
  • GitHub 저장소에 프로젝트 코드가 있어야 하며, GitHub Actions를 사용할 수 있어야 합니다.

2. GitHub Secrets 설정

  • GitHub 저장소에서 Settings > Secrets > Actions로 이동합니다.
  • 다음과 같은 Secrets을 추가합니다:
    • AWS_ACCESS_KEY_ID: AWS IAM 사용자의 액세스 키 ID.
    • AWS_SECRET_ACCESS_KEY: AWS IAM 사용자의 시크릿 액세스 키.
    • AWS_REGION: 예를 들어, us-east-1.
    • AWS_S3_BUCKET: 배포 파일을 저장할 S3 버킷의 이름.
    • CODEDEPLOY_APPLICATION: CodeDeploy 애플리케이션 이름.
    • CODEDEPLOY_GROUP: 배포 그룹 이름.

3. GitHub Workflow 파일 생성

  • .github/workflows 디렉토리 내에 deploy.yml 파일을 생성합니다.
  • 이 파일은 GitHub Actions의 설정을 담고 있으며, 다음과 같이 구성할 수 있습니다:
  •  
name: Deploy to AWS CodeDeploy

on:
  push:
    branches:
      - main  # main 브랜치에 push될 때마다 실행됩니다.

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Code
      uses: actions/checkout@v2

    - name: Zip the project
      run: zip -r deploy.zip .  # 전체 프로젝트를 zip 파일로 압축

    - name: Upload to S3
      uses: jakejarvis/s3-sync-action@master
      with:
        args: --acl public-read --follow-symlinks --delete
      env:
        AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        AWS_REGION: ${{ secrets.AWS_REGION }}
        SOURCE_DIR: './deploy.zip'

    - name: Deploy to CodeDeploy
      id: deploy
      uses: webfactory/create-aws-codedeploy-deployment@v1
      with:
        application: ${{ secrets.CODEDEPLOY_APPLICATION }}
        deployment-group: ${{ secrets.CODEDEPLOY_GROUP }}
        s3-bucket: ${{ secrets.AWS_S3_BUCKET }}
        s3-key: deploy.zip
        region: ${{ secrets.AWS_REGION }}
        wait-until-deployed: true

    - name: Output deployment status
      run: echo "Deployment ${{ steps.deploy.outputs.deployment-id }} status ${{ steps.deploy.outputs.status }}"

 

IAM 사용자 엑세스키 만드는법

1. IAM 사용자 생성

  1. AWS Management Console 로그인: AWS Management Console에 로그인합니다.
  2. IAM 대시보드 접속: 상단 메뉴에서 "서비스"를 선택하고, 보안, 자격 증명 및 준수 섹션에서 "IAM"을 클릭합니다.
  3. 사용자 추가:
    • 좌측 메뉴에서 "사용자"를 클릭하고, 화면 상단의 "사용자 추가" 버튼을 클릭합니다.
    • 사용자 이름을 입력하고, "프로그래밍 방식 액세스"를 활성화합니다. 이 옵션은 해당 사용자에게 API, CLI, SDK 등을 통한 접근을 가능하게 해줍니다.
  4. 권한 설정:
    • 기존 정책 직접 연결: 사용자에게 필요한 정책을 검색하여 선택합니다. 예를 들어, CodeDeploy 작업을 수행하려면 AWSCodeDeployFullAccess 권한을 부여할 수 있습니다.
    • 권한 부여에 대한 좋은 방침은 최소 권한 원칙을 따르는 것입니다. 필요한 권한만큼만 부여하세요.

2. 액세스 키 생성

  1. 액세스 키 생성:
    • 사용자 생성 과정의 마지막 단계에서 "액세스 키 생성" 옵션을 볼 수 있습니다. 이 버튼을 클릭하면 새 액세스 키 ID와 비밀 액세스 키가 생성됩니다.
    • 이 정보는 한 번만 표시되므로, 안전한 곳에 저장해야 합니다. "다운로드 .csv" 버튼을 클릭하여 키 정보를 담은 파일을 안전하게 저장할 수 있습니다.
  2. 액세스 키 사용:
    • 이 키들은 AWS CLI, SDKs, 그리고 다른 개발 도구에서 AWS 서비스에 프로그래밍 방식으로 접근할 때 사용됩니다.

 

6. deploy.yml 파일 구성

파일위치 : 프로젝트 ROOT  .github/workflows 디렉토리

name: Deploy to AWS EC2

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Zip the repository
      run: zip -r deployment-package.zip .

    - name: Upload to S3
      uses: jakejarvis/s3-sync-action@master
      with:
        args: --acl public-read --follow-symlinks --delete
      env:
        AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        AWS_REGION: 'your-region'  # 변경 필요
        SOURCE_DIR: './'

    - name: Deploy to AWS CodeDeploy
      uses: webfactory/create-aws-codedeploy-deployment@v1
      with:
        application-name: 'YourApplicationName'
        deployment-group: 'YourDeploymentGroupName'
        s3-bucket: ${{ secrets.AWS_S3_BUCKET }}
        s3-key: deployment-package.zip
        region: 'your-region'  # 변경 필요
Posted by npre
,
반응형

node, nvm 버젼이 낮아서 그런 경우 발생함.

 

https://www.freecodecamp.org/korean/news/how-to-update-node-and-npm-to-the-latest-version/

 

Node와 NPM을 최신 버전으로 업데이트 하기

Node는 런타임 환경으로써 브라우저 이외의 서버 사이드에서 자바스크립트 코드를 실행할 수 있게 해준다. 반면 NPM은 패키지 매니저로서 자바스크립트 패키지(Node modules 이라고도 불린다)를 npm re

www.freecodecamp.org

 

참고하여 버젼을 올린 후 설치하면 정상작동.

Posted by npre
,

AWS/Ubuntu EC2 셋팅

Programing 2023. 6. 30. 17:33
반응형

YUM 사용 : Amazon Linux, RedHat, CentOS

APT-GET 사용 : Ubuntu, Debian

 

1. mysql 설치

 

우분투 업데이트

sudo apt-get update

mysql server 설치

sudo apt-get install mysql-server

,Y

 

외부 접근 허용

sudo ufw allow mysql

mysql 실행

sudo systemctl start mysql

mysql 접속

sudo /usr/bin/mysql -u root -p

패스워드는 그냥 엔터

 

데이터베이스 생성

CREATE DATABASE GUIVING;

 

계정생성

create user 'jh'@'%' identified by 'password1234!!';
FLUSH PRIVILEGES;

 

계정에 권한 부여 (*.* 데이터베이스명.테이블명, *는 걍 다 줌)

grant all privileges on GUIVING.* to 'jh'@'%';
FLUSH PRIVILEGES;

 

외부 접근 셋팅

https://npre.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-Mysql-%EC%99%B8%EB%B6%80%EC%A0%91%EC%86%8D-%EC%85%8B%ED%8C%85

 

리눅스 Mysql 외부접속 셋팅

1. user table 변경 mysql> grant all privileges on *.* 'root'@'%' identified by '패스워드'; mysql> flush privileges; 2. bind-address 주석 vi /etc/mysql/my.cnf 또는 해당 파일 내부 참조파일 3. mysql restart service mysql restart 4. 3306

npre.tistory.com

 

2. tomcat 설치 (java 설치)

자바 설치 확인

java --version

 

 

APT-GET update

sudo apt-get update

 

JRE install (필요한 버젼으로)

sudo apt install openjdk-11-jre-headless

JRE 여러개 설치 되었을 때 버젼 변경하는법 참조

https://freedeveloper.tistory.com/347

 

톰캣 설치 위치 만들기

sudo mkdir /home/tomcat

 

톰캣다운로드

 

https://tomcat.apache.org/download-90.cgi

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version

tomcat.apache.org

에서 다운로드 링크 복사

 

sudo tar xvfz apache-tomcat-9~~~

 

환경변수 설정

 

sudo chmod -R 777 /etc/profile
sudo vi /etc/profile


##추가
export CATALINA_HOME=/home/tomcat



source /etc/profile

 

권한설정해두기

sudo chmod -R 777 home/tomcat/

 

실행

sudo ./startup.sh

 

 

 

## 참고사항

EC2하나에 mysql과 tomcat을 동시에 셋팅하면 서버가 뻗어버리는 현상 발생, 프리티어 EC2두개로 생성하여 하나씩 셋팅하는것을 권장

Posted by npre
,