AWS 시작하기 - Tirrilee/TechTalk GitHub Wiki

AWS 시작하기

자 이제 AWS를 시작해봅시당!


환경 생성 (.NET Framework 기준)

일단 기본적으로 계정 생성 > 콘솔에 로그인 > 웹앱 구축으로 들어갑니다.

이후부터는 자습서: AWS Elastic Beanstalk를 사용하여 .NET 샘플 애플리케이션을 배포하는 방법에서 정보를 가져왔습니다.


먼저 Elastic Beanstalk 콘솔에서 새 애플리케이션 생성 마법사를 사용하여 애플리케이션 환경을 생성합니다. [Platform] 에서 [.NET] 을 선택합니다.




환경을 시작하려면(콘솔)

  1. 미리 구성된 다음 링크를 사용하여 Elastic Beanstalk 콘솔 을 엽니다.

  2. [Platform] 에서 애플리케이션에서 사용하는 언어에 맞는 플랫폼을 선택합니다.

  3. [Application code] 에서 [Sample application] 을 선택합니다.

  4. [Review and launch] 를 선택합니다.

  5. 사용할 수 있는 옵션을 검토하십시오. 옵션에 만족하는 경우 [Create app] 을 선택합니다.

환경이 가동되어 실행 중인 경우, 해당 애플리케이션이 데이터 저장에 사용하는 Amazon RDS 데이터베이스 인스턴스를 추가합니다. [DB engine] 의 경우, [sqlserver-ex] 를 선택합니다.




환경에 DB 인스턴스를 추가하려면 (ebdb)

  1. Elastic Beanstalk 콘솔을 엽니다.

  2. 해당 환경의 관리 페이지로 이동합니다.

  3. [Configuration] 을 선택합니다.

  4. [데이터베이스] 구성 카드에서 [수정]을 선택합니다.

  5. DB 엔진을 선택하고 사용자 이름과 암호를 입력합니다.

  6. [Save]를 선택한 후 [Apply]를 선택합니다.


MySql Workbench 연결 및 Store Procedure 생성을 위한 권한 수정

일단 AWS를 만들면 자신의 연습용 디비를 백업해서 올려야 합니다. 하지만 아무런 설정도 하지 않으면 mysql workbench에 연결되지 않습니다. 이는 inbound 즉 밖에서 안으로 들어오는, 외부의 사용자가 내 서버에 접속하는 bound를 열어 놓지 않았기 때문입니다.

또한 접속을 하더라도 해당 계정이 권한을 가지고 있지 않으면 Stored Procedure를 생성하기 어렵습니다. 따라서 2개의 권한을 풀어주기 위하여 아래의 과정이 필요합니다.

아래의 설명이 부족하시면 AWS RDS 인스턴스 생성하기를 참고해주시길 바랍니다.


1. DB Parameter Group 생성

1. RDS 대시보드 > 파라미터 그룹 > 파라미터 그룹 생성

2. 파라미터 그룹 생성 정보 채우기

3. 파라미터 편집

새로 생성한 파라미터를 클릭하고 파라미터 편집을 누릅니다.

파라미터를 수정합니다.

log_bin_trust_function_creators : 1 (권한 설정)
charset_set_client              : utf8
charset_set_connection          : utf8
charset_set_database            : utf8
charset_set_filesystem          : utf8
charset_set_results             : utf8
charset_set_server              : utf8
collation_connection            : utf8_general_ci
collation_server                : utf8_general_ci

4. 인스턴스 작업 > 수정

5. 데이터베이스 옵션 > DB 파라미터 그룹

을 아까 생성해준 것으로 선택합니다.

& 퍼블릭 엑세스 가능성 > 예 로 선택합니다.

6. 하지만 끝나지 않았습니다. 재부팅!!!!

재부팅 전! (재시작 보류 중 으로 선택되어있습니다.)

재부팅!!!! 두둥



2. 보안 그룹 설정하기

1. 보안 그룹 생성 정보 입력

RDS 대시보드 > 보안 그룹 > 보안 그룹 생성

2. 인스턴스 수정 > 보안 그룹 생성한 것으로 변경

3. 아래와 같이 보안 그룹이 나와야 합니다.

4. 파라미터 그룹 / 보안 그룹 을 확인합니다.

모두 잘 설정되어있으면 완성!!!!! :)

(ebdb 로 데이터 베이스가 되어있습니다! 꼭 ebdb에서 써야하는 듯)



다른 이름의 DB Instance를 사용하고 싶다면?

default db는 ebdb입니다. 새로운 이름의 인스턴스를 사용하고 싶다면 인스턴스를 생성하고 위에서 생성한 Parameter Group / 보안 그룹 을 설정해주면 연결이 가능합니다! :)


mysql workbench에 연결하기

DB 정보를 입력하고 DB에 접속합니다.

host : AWS RDB endpoint (endpoint에서 뒤에 붙은 :3306은 포트번호이기 때문에 :와 함께 제외하고 넣어줘야합니다.)
id   : 개발자가 만든 계정
pw   : 개발자가 설정한 패스워드

테스트 용도로 인바운드 규칙을 모두 열어놓았지만, Product에서는 어플리케이션이 있는 서버의 IP만 열어놓고 모두 닫아야 합니다.




Visual Studio 2017에서 배포하기


Elastic Beanstalk를 이용하는 것이기 때문에 Elastic Beanstalk로 환경을 만들고 진행해야합니다!


AWS ToolKit을 Visual Studio에서 제공해주고 있습니다. 따라서 너무 쉽고 편하고 짱좋은 AWS ToolKit을 설치해보도록 하겠습니다.

참고로 Mac Visual Studio에서는 되지 않으니 Window10을 이용해야하고 Mac은 BootCamp를 이용해야 합니다 (^^..후..)


AWS ToolKit 사용하기

AWS ToolKit for Visual Studio를 이용해서 AWS ToolKit을 설치해줍니다.

설치를 쭉 진행하고 (next만 누르면 됩니다.) Visual Studio를 켜줍니다.

배포를 위하는 프로젝트에 오른쪽 클릭 > AWS Deployment를 누릅니다.

그리고 계정 옆에 작은 + 버튼이 있는 데 그 버튼을 누르면 아래와 같은 그림이 나타날 것입니다.

저는 지금 모든 정보를 채워넣었지만, 정보를 찾기가 매우 힘들었으니, AWS에서 각 정보를 찾는 법을 적어놓겠습니다.


AWS ToolKit 정보 채워넣기

1. Profile Name, Access Key ID

  • AWS에 들어가서 자신의 계정으로 로그인합니다.

  • 내 계정 > 계정 설정


2. Access Key ID, Secret Access ID

  • 내 계정 > 내 보안 자격 증명



  • 보안 자격 증명으로 계속



  • 새 엑세스 키 만들기



  • 엑셀 파일에서 Access Key ID, Secret Access ID를 복사 붙여넣기 하시면 됩니다!!!

3. 이후 계정이 설정되었으면, 자신의 서버가 있는 위치를 선택합니다.

4. 자신이 만들어진 환경이 있다면 그 환경을 선택하고

5. next > next > deploy!!!!!!!!!!




환경 생성 (Ubuntu 기준)


mysql 환경 설정


1. mysql install

# MySQL 5.7 설치
sudo apt-get install mysql-server-5.7


service mysql start
sudo /etc/init.d/mysql restart

2. 사용자 계정 생성

-- 사용자 계정 생성
 create user '아이디'@호스트 identified by '비밀번호';

 -- 로컬 접속계정 생성
 create user '아이디'@localhost identified by '비밀번호';

 -- 모든 IP로 접속가능한 계정 생성
 create user '아이디'@'%' identified by '비밀번호';

3. 사용자 권한 설정

-- 사용자 권한 설정
GRANT ALL PRIVILEGES ON 데이터베이스명.테이블명 TO '아이디'@'호스트' IDENTIFIED BY '비밀번호';

-- 모든 데이터베이스, 모든 테이블, 모든 IP 접속 허용
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%' IDENTIFIED BY '비밀번호';

-- 특정 데이터베이스, 모든 테이블  모든 IP 접속 허용
-- ex) test 라는 데이터베에스의 모든 테이블, 모든 IP 접속하도록 권한부여
GRANT ALL PRIVILEGES ON test.* TO '아이디'@'%' IDENTIFIED BY '비밀번호';

-- 모든 데이터베이스, 모든 테이블, 특정 대역 IP 접속 허용
-- ex) 192.168 로 시작하는 IP에 대해 접속하도록 권한 부여
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'192.168.%' IDENTIFIED BY '비밀번호';

-- 모든 데이터베이스, 모든 테이블, 특정 IP만 접속 허용
-- ex) 192.168.22.33 IP에 대해 접속하도록 권한 부여
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'192.168.22.33' IDENTIFIED BY '비밀번호';

-- 모든 데이터베이스, 모든 테이블, 로컬에서만
GRANT ALL PRIVILEGES ON *.* TO '아이디'@localhost IDENTIFIED BY '비밀번호';

4. 사용자 권한 적용

-- 권한 적용
 flush privileges;

5. 사용자 권한 적용 확인

-- mysql 데이터베이스 선택
use mysql;

--  user 테이블
select host, user from user;

6. 설정 파일 변경

cd /etc/mysql/mysql.conf.d

# mysqld.cnf 파일편집
sudo vi mysqld.cnf

위의 설정파일로 가서 bind_address 부분을 주석처리 해야한다.


7. mysql을 재시작

# mysqld 재시작
sudo /etc/init.d/mysql restart

AWS 인바운드 설정

이렇게 해서 연결이 되지 않는다면 AWS 인바운드를 설정해야한다. (0:0:0:0) 으로 풀어줘야한다.


nodejs 환경 설정


nodejs version 6 이상

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

nodejs version 10

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

nodejs 네이티브 빌드온 설치

sudo apt-get install -y build-essential




mysql Procedure 한글 깨짐 현상 해결


AWS RDS 한글 변경

즉 parameter group을 설정해주는 곳에서 2개의 필터를 돌리고 utf8으로 변경한다.

1. charset    : utf8
2. collation  : utf-general-ci

이후 설정한 캐릭터셋을 적용하기 위해 아래를 적용한다.

character-set-client-handshake : 0

이후 RDS를 재부팅해준다.


MySQL 설정

1. utf8 설정 확인

show variables like 'c%';

을 쳐서 일단 utf8 설정이 잘되었는지 확인한다.

2. DB를 utf8으로 설정을 변경시켜준다.


Procedure Input Parameter utf8 변경

한글을 Parameter Input의 설정을 변경해줘야한다.

IN pi_name VARCHAR(100) CHARACTER SET UTF8

으로 변경을 해주면 한글 설정이 들어간다.




Window에 VM 연결하기

1. EC2에서 인스턴스를 선택한 다음에 연결을 클릭합니다.

만약 포트가 열려있지 않으면 포트를 여는 법을 설정해줍니다.


2. 인스턴스의 보안그룹 변경

인스턴스의 보안그룹 > 인바운드

RDP 3389 포트를 선택하고 확인 버튼을 누릅니다.


3. key pair 등록하기

EC2의 목록을 보면 키페어 목록이 있습니다. 키페어를 클릭해서 키를 생성해줍니다.

Elastic Beanstalk에 가서 key pair와 인스턴스를 연결해줍니다.


4. 이제 정말 연결하기

암호 가져오기 에서 위에서 생성한 키 파일을 넣어주면 암호가 나옵니다.

연결하기 에서 rdp 확장자를 다운받아주고 클릭해주면 연결됩니다!




Log 파일 찍는 권한 주기

Log 파일을 찍는데 로컬에서는 파일이 생성되지만, 서버에서는 생성되지 않는 오류가 있었다.

3일 내내 찾아봤는데 도대체 로그 파일이 생성이 되지 않았다.

Stackoverflow에서는 로그 파일에 권한을 주라고 하는데 권한을 아무리 줘도 되지 않았다...

하지만 해결방법을 찾았다!!!! (세상 기쁨)

이제 알아냈으니 다시는 이런 실수를 하지 않게 정리를 해둬야겠다.


중요한게 있습니다! Default Web Site라고 되어있는데 이 이름을 수정하면 안됩니다ㅜㅜ


1. 파일 위치

파일 위치가 어디인지가 너무 헷갈렸다.

일단 배포를 하면 올려놓는 파일 위치는 C:\inetpub\wwwroot 에 올라간다.

즉 만약 로그파일 경로를 ../Logs로 한다면 C:\inetpub에 폴더가 생성되는 것이다.


2. 권한 주기

자신이 로그파일을 만들 폴더가 있을 것이다.

그 폴더의 오른쪽 클릭 > Properties 를 하면 아래와 같은 화면이 나온다.

여기서 IUSR / IIS_IUSRS 를 추가한다. 권한은 log파일을 수정할 수 있어야하기 때문에 기본에서 modify를 추가해줘야한다.

그렇게 돌리면 성공!!!

⚠️ **GitHub.com Fallback** ⚠️