안경잡이개발자

728x90
반응형

  AWS SNS 서비스를 활용하면 문자 메시지(SMS) 전송 기능을 쉽고 효과적으로 이용할 수 있습니다.

 

※ AWS SNS로 문자 메시지 전송 ※

 

  SNS 서비스를 검색하여 들어갑니다.

 

 

  SMS 발송 기능을 지원하는 리전(Region)은 정해져 있습니다. 서울(Seoul) 리전에서는 SMS 문자 메시지 발송 기능을 지원하지 않으므로 도쿄 리전을 선택하면 됩니다.

 

 

  이후에 [문자 메시지 게시] 버튼을 눌러서 바로 문자 메시지 전송 테스트를 해 볼 수 있습니다.

 

 

  전화번호를 입력한 뒤에 메시지를 보내 보면, 정상적으로 전송이 완료됩니다.

 

 

※ SDK를 활용하여 프로그램 환경에서 문자 전송 ※

 

① IAM 계정 생성하기

 

  SDK를 활용하면 서버 프로그램에서 문자를 전송하는 등의 기능 구현이 가능합니다. 가장 먼저 해야 할 것은 IAM 계정을 생성하는 것입니다. AWS SNS 서비스에만 접근할 수 있는 별도의 계정을 만들어 줌으로써, 안전하게 관리가 가능합니다.

 

 

  프로그래밍 방식 액세스 버튼을 눌러서, 실제 서버에서 해당 계정에 로그인하는 식으로 처리하시면 됩니다.

 

 

  어떤 정책을 사용할 것이냐 물어보는데요. SNS를 사용하겠다고 설정하시면 됩니다.

 

 

  계정이 생성된 이후에는 액세스 키 ID 비밀 액세스 키를 기록해 놓으시면 됩니다.

 

 

② PHP SDK 사용하기

 

  PHP에서는 Composer를 이용해 AWS SDK를 설치할 수 있습니다. 또한 PHP 5.6 이상인 경우 AWS SDK를 어렵지 않게 사용할 수 있다고 합니다.

 

 

  이제 라이브러리에서 접근할 수 있는 홈 디렉토리에 .aws 폴더를 생성하고, 그 안에 credentials라는 이름의 파일을 만들어서 AWS 계정 키 값을 넣어주시면 됩니다.

 

 

  키 값은 다음과 같은 형태로 넣어주시면 됩니다.

 

[default]
aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY

 

 

  이제 설정이 완료되었으므로, SNS를 이용할 수 있습니다. 먼저, PHP 소스코드에서 라이브러리를 불러올 때는 다음과 같이 하시면 됩니다.

 

require 'vendor/autoload.php';

use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

 

  이후에 다음과 같은 코드로 SNS 메시지를 전송할 수 있습니다.

 

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);
$message = '{보낼 메시지 내용}';
$phone = '{국제 전화 번호}';
try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'PhoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // 실패했을 시에 오류 메시지를 뱉습니다.
    error_log($e->getMessage());
}

 

  테스트 결과 정상적으로 잘 동작합니다.

 

③ 추가 사항

 

  기본적으로 AWS SMS는 설정이 매우 방어적으로 되어 있습니다. [Text Messaging Preferences] 탭으로 이동을 해보시면, [Edit] 창에서 기본적인 텍스트 전송 설정을 할 수 있습니다.

 

 

  이 때 광고 문자 메시지 등이 아니라, 인증 등의 목적으로 사용자에게 반드시 문자 메시지 전달이 되어야 하는 경우 [Transactional]로 설정을 하셔야 합니다. 또한 [Account Spend Limit]에서 한 달에 사용할 수 있는 최대 금액을 넣을 수 있습니다. 다만, 1달러($)에서 증가하지 않을 것입니다.

 

 

  월별 SMS 지출 한도는 기본적으로 1.00 USD입니다. 이는 대략적으로 30 ~ 60번 정도의 문자 메시지를 보낼 수 있는 한도입니다. 따라서 회사에서 해당 서비스를 운영하고 계신 분이라면, 월별 SMS 지출 한도를 늘이셔야 합니다. (만약 이 사실을 모르고, 서비스를 런칭하신 분이라면 애도를 표합니다. SMS 서비스가 갑자기 동작하지 않아서, 고객들의 폭풍 문의를 받을 수 있습니다. 특히 주말이라면...)

 

  월별 SMS 지출 한도 증가 요청은 Support Center에서 하실 수 있습니다.

 

  참고 글: https://ndb796.tistory.com/291

 

AWS 서비스 한도 증가 요청하는 방법 (AWS 문자 메시지 한도 늘이기)

AWS에서 몇몇 서비스는 의도치 않은 과금을 막기 위해 서비스 한도가 정해져 있습니다. 대표적으로 AWS SNS의 문자 메시지(SMS) 전송 서비스는 기본적으로 한 달에 1달러($) 어치만 사용할 수 있도록 제한되어 있..

ndb796.tistory.com

 

728x90
반응형

Comment +1

728x90
반응형

  AWS S3는 이미지, 동영상 등 다양한 파일을 저장하기 위한 목적으로 사용할 수 있는 서비스입니다. Python에서 AWS S3에 다양한 파일을 업로드하기 위해서는 boto3라는 이름의 라이브러리를 사용해 연동할 수 있습니다. 따라서 실습을 위해 AWS S3 서비스로 이동하여 [버킷 만들기]를 진행하겠습니다.

 

  버킷은 특정한 파일이 저장되는 루트 폴더라고 이해할 수 있습니다.

 

 

  버킷의 이름은 임의대로 설정해줍니다.

 

 

  다른 구성은 기본 설정대로 진행하시고 간단한 실습을 위해 [권한 설정] 탭에서는 모든 체크를 해제해주겠습니다.

 

 

  결과적으로 버킷이 생성된 것을 확인할 수 있습니다.

 

 

  이제 이러한 버킷에 프로그래밍을 이용해서 파일을 업로드하거나 다운로드 받을 수 있습니다. 이 때는 [내 보안 자격 증명]에 들어가시면 됩니다.

 

 

  자격 증명을 생성하실 때에는 IAM Users를 이용하여 [사용자 추가]를 진행하시면 됩니다.

 

 

 

  저는 다음과 같이 사용자 이름을 대충 설정한 뒤에 [프로그래밍 방식 액세스]에 체크했습니다.

 

 

  이후에 정책으로는 [AmazonS3FullAccess]를 선택합니다. S3에 접근할 수 있는 권한이라고 이해하시면 됩니다.

 

 

  결과적으로 사용자가 추가되면 [액세스 키 ID][비밀 액세스 키]를 확인할 수 있습니다.

 

 

  이제 실제로 우리의 컴퓨터에서 파이썬(Python)을 이용하여 AWS S3에 파일을 올리거나 다운로드 받을 수 있습니다. 이 때 2가지 라이브러리가 사용됩니다. 바로 boto3와 awscli입니다. 따라서 두 개를 pip3를 이용하여 설치합니다.

 

 

 

  이제 awscli가 설치 되었으므로 aws configure 명령을 이용하여 AWS 계정 연결을 수행할 수 있습니다.

 

 

  이제 파이썬을 이용하여 우리 AWS 계정의 모든 버킷을 출력하도록 할 수 있습니다.

 

import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
    print(bucket.name)

 

 

728x90
반응형

Comment +1

728x90
반응형

  우리는 일반적으로 파이썬(Python)의 다양한 라이브러리를 이용하여 프로그램을 작성합니다. 하지만 AWS Lambda는 파이썬의 기본 라이브러리만 제공합니다. 머신러닝(Machine Learning)이나 크롤링 등을 이용하기 위해서는 추가적인 라이브러리를 사용해야 하므로 별도의 작업이 필요합니다.

 

  AWS Lambda는 라이브러리 파일을 통째로 압축해서 올려서 사용할 수 있도록 제공하고 있습니다. 따라서 한 번 크롤링을 위한 bs4 라이브러리를 이용한 파이썬 예제가 있다고 가정해 보도록 하겠습니다.

 

  아래의 소스코드를 구동시키면 bs4 라이브러리를 이용하여 구글(Google) 메인 페이지에 존재하는 모든 <a> 태그의 텍스트 부분을 크롤링하여 출력하게 됩니다.

 

import urllib.request
from bs4 import BeautifulSoup

url = "https://www.google.com"
soup = BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")
a_tags = soup.find_all("a")
result_list = []
for i in a_tags:
    result_list.append(i.get_text())

print(result_list)

 

  이러한 동작을 하는 API를 AWS Lambda를 이용하여 구현하고 싶다면 어떻게 하면 될까요? 방법은 매우 간단합니다. 먼저 bs4 라이브러리가 사용되므로 이 라이브러리를 패키지 형태로 압축해야 합니다.

 

 

  한 번 위와 같이 하나의 폴더를 만든 뒤에 명령 프롬프트(CMD)를 이용하여 해당 경로에 들어가 보겠습니다. 이후에 bs4를 설치하되 현재 폴더 위치에 설치하도록 -t 옵션을 붙입니다.

 

  pip3 install bs4 -t .

 

 

  이제 현재 폴더의 위치에 있는 모든 파일을 압축하여 bs4.zip 라는 압축 파일을 만듭니다.

 

 

  그러면 bs4.zip 파일이 생성되어 있는 것을 확인할 수 있습니다.

 

 

 

  이제 우리의 AWS Lambda 프로젝트를 확인합니다.

 

 

  이제 [.zip 파일 업로드] 유형을 선택한 뒤에 우리의 bs4.zip 파일을 업로드하면 됩니다.

 

 

  우리가 업로드 한 파일은 말 그대로 bs4 라이브러리를 통째로 압축한 파일이므로 lambda_function.py 파일이 존재하지 않는다고 출력되는 것을 확인할 수 있습니다. 왜냐하면 AWS Lambda의 Python 프로젝트의 기본 핸들러는 lambda_function 파일의 lambda_handler로 설정되어 있기 때문입니다.

 

 

  따라서 [File] 탭을 열어서 하나의 파이썬 파일을 작성하면 됩니다. lambda_function.py라는 이름으로 짓습니다.

 

import json
import urllib.request
from bs4 import BeautifulSoup

def lambda_handler(event, context):
    url = "https://www.google.com"
    soup = BeautifulSoup(urllib.request.urlopen(url).read(), "html.parser")
    a_tags = soup.find_all("a")
    result_list = []
    for i in a_tags:
        result_list.append(i.get_text())
    return {
        'statusCode': 200,
        'body': json.dumps(result_list)
    }

 

  이제 위와 같이 소스코드를 작성합니다. 기본적인 핸들러 함수는 lambda_handler이므로 함수의 이름을 이와 같이 지어줍니다. 매개변수 또한 차례대로 event, context를 넣어주세요. 람다 함수는 어떠한 결과 데이터를 return하는 방식으로 작성해주시면 됩니다.

 

 

  결과적으로 이렇게 만들어진 람다 함수를 테스트하기 위해 [저장] 버튼을 누르시면 됩니다.

 

 

  테스트 결과 실제로 크롤링 결과가 잘 출력되는 것을 확인할 수 있습니다.

728x90
반응형

Comment +1

  • lee 2020.03.03 15:00

    진짜 감사합니다. 대부분 알려준답시고 실력자 기준으로 이 정도면 알겠지? 하고 어렵게 적어논 글들이 많아서 해맸는데 이렇게
    초보자 입장에서 적어주셔서 덕분에 2주일 동안 끙끙 했던걸 해결했습니다. 감사합니다!

728x90
반응형

  AWS EC2 서비스는 말 그대로 하나의 서버를 제공하여 편하게 관리할 수 있도록 도와주는 서비스입니다. AWS EC2의 가장 큰 장점 중 하나는, 하나의 서버에 다양한 프로그램이 설치 되어있는 형태 그대로를 이미지(AMI)로 만들 수 있다는 점입니다. 그렇기 때문에 컨테이너 기술을 잘 모르는 사람들도 편하게 서버를 이미지화하여 사용할 수 있습니다.

 

  서버를 이미지화 했을 때 얻을 수 있는 가장 큰 이점으로는 서버가 정상적으로 동작했을 때의 상태를 미리 이미지로 저장해 놓을 수 있다는 겁니다. 그래서 서버에 문제가 생겼을 때는 현재의 서버를 내려 버리고, 이미지(AMI)로 만들어 놓았던 것을 그대로 AWS EC2 인스턴스로 만들 수 있습니다.

 

※ AWS EC2 인스턴스로 이미지(AMI) 만들기 ※

 

  실제로 AWS EC2 서버 중 하나를 선택하여 이미지로 만들어 보도록 하겠습니다.

 

 

  이미지로 만들어 놓고자 하는 AWS EC2 인스턴스(Instance)를 클릭한 뒤에 [작업] - [이미지] - [이미지 생성]을 눌러 이미지로 만들어 주세요.

 

 

  이미지를 생성하실 때에는 생성하고자 하는 이미지의 이름을 설정한 뒤에 크기 등을 설정하여 생성하시면 됩니다.

 

 

  그러면 이미지 생성 요청이 완료되었다는 메시지가 출력됩니다.

 

※ 이미지(AMI)로 AWS EC2 인스턴스 만들기 ※

 

 

  이제 [이미지] 탭의 [AMI] 탭으로 가서 우리가 만든 이미지로 인스턴스를 생성해 봅시다. 원하는 이미지를 클릭한 뒤에 [시작하기] 버튼을 누르시면 됩니다.

 

 

  이제 원하는 인스턴스 유형으로 [검토 및 시작] 하시면 됩니다.

 

 

  실제로 인스턴스를 생성해보겠습니다.

 

 

  인스턴스 생성 이후에는 다음과 같이 바로 인스턴스가 시작되는 것을 확인할 수 있습니다.

 

728x90
반응형

Comment +0

728x90
반응형

  AWS 람다를 이용하면 아마존 웹 서비스가 제공하는 별도의 플랫폼에서 손쉽게 서버를 구축해서 데이터를 저장하고, 처리하고, 출력할 수 있다는 장점이 있습니다. 우리가 구현하게 될 AWS 람다 서버를 확인해보도록 하겠습니다.

 

  구성도: 플레이어(클라이언트) -> |API 게이트웨이| -> |AWS 람다| <-> DB

 

  대략 위와 같은 구성을 가지게 됩니다. 클라이언트가 우리의 서버에 접속하면, 먼저 API 게이트웨이를 거치게 됩니다. 이후에 AWS 람다가 실제로 클라이언트의 요청(Request)을 처리하고 그 결과를 반환한다는 특징이 있습니다.

 

  따라서 람다를 만든 이후에 외부에서 해당 람다에 접근할 수 있도록 하기 위해서는 API 게이트웨이라는 것을 달아줘야 해요. AWS 람다 자체는 '함수'로서의 역할을 수행하기 때문에, 이를 실제로 서버처럼 동작하도록 하기 위해서는 API 게이트웨이를 이용해 공인 주소를 설정해야 합니다. 따라서 이러한 서버 구성도에 맞게 실제로 AWS 서비스를 이용해보도록 하겠습니다.

 

  AWS 웹 사이트https://aws.amazon.com/ko/

 

클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services

엔터프라이즈 변혁 AWS를 사용하여 뱅킹을 재창조하는 Capital One Capital One이 어떻게 교육, 장기 계획, 고객 요구에 대한 끊임없는 집중을 통해 클라우드 우선 전략을 구현했는지 알아보십시오. 자세히 알아보기  고객에 집중 2014년에 Capital One은 이제 막 프라이빗 클라우드 기능을 사용하기 시작하면서 AWS도 실험해 보는 단계였습니다. 이 회사는 고객이 원하는 기능을 최대한 빨리 구축하기 위해 AWS를 선택했습니다. 어려운 문

aws.amazon.com

 

  일단 가장 먼저 AWS 서비스에 로그인 해보도록 하겠습니다. AWS에 로그인을 한 이후에는 [콘솔에 로그인] 버튼을 눌러서 실제로 관리자 콘솔에 들어가주시면 됩니다.

 

  AWS 람다는 이용한 만큼만 과금을 수행하지만, 사용량이 적을 때는 사실상 거의 무료라고 보시면 돼요. 무엇보다 AWS를 처음 사용하는 사람에게는 12개월 프리 티어(Free Tier)가 제공되기 때문에 이를 이용해서 매우 효과적으로 공부해 볼 수 있습니다.

 

 

  이제 위와 같이 ‘서비스 검색’ 창에서 ‘AWS Lambda’를 검색해보도록 합시다. AWS는 정말 많은 서비스를 지원하고 있어요. AWS Lambda 말고도, 정말 많은 서비스가 있지만 사람들이 많이 사용하는 서비스는 몇몇으로 정해져 있어요. 그 중에서 람다가 많이 사용되고 있는 것이랍니다.

 

  바로 한 번 람다를 사용해보면서 익혀보도록 합시다. 람다는 특정한 서버 기능을 AWS 서비스 상에서 구현할 수 있도록 해줘요. 우리가 별도로 서버 컴퓨터를 가지고 있지 않아도, 서버 기능을 AWS를 통해 사용할 수 있는 거예요.

 

 

  이제 [함수 생성] 버튼을 눌러보도록 하겠습니다.

 

 

  이제 람다 함수의 이름을 Hello_Lambda로 설정하고, 런타임 언어를 Python 3.7을 설정합니다. 보시면, 프로그래밍 언어를 C#으로 설정할 수도 있는데요, 여기에서 말하는 C#은 .Net 프레임워크라고 하여 기본적인 C#에 비해서 난이도가 높아요. 설정해야 되는 것도 많아요. 그래서 일반적으로는 AWS 람다 함수를 만들 때에는 node.js 혹은 python이라는 언어를 많이 선택합니다. 여기서 node.js는 쉽게 말하면, 자바스크립트라고 보시면 되는데요. 이것도 웹 개발 언어에 가까우므로 우리는 python을 선택해서, 가장 쉬운 방향으로 진행하도록 할게요.

 

 

  또한 권한 설정은 기본 설정 그대로 [함수 생성]을 진행하시면 됩니다.

 

 

  람다 함수가 만들어진 이후에는, ‘트리거’ 부터 시작해서 다양한 처음보는 내용들이 나와요. 당황하지 마시고, 하나씩 살펴보도록 하겠습니다. 일단 ‘트리거’라는 것은, 람다 함수를 언제 실행할 지에 대한 내용을 의미해요. 일단 내버려 두고, 아래쪽을 살펴보시면 소스코드가 보입니다. Python을 선택하면, 이와 같이 웹 사이트 상에서 바로 소스코드를 수정해서 동작하도록 할 수 있어요.

 

  보시면 lambda_handler 함수가 처음부터 작성되어 있습니다. 이것은 어떠한 이벤트를 처리하는 함수에요. 이벤트(Event)라는 것은, 플레이어가 게임을 마치고, 게임 점수를 서버로 보내주는 등의 활동. 즉 클라이언트의 활동을 의미한다고 보시면 됩니다. 그렇다면 이벤트를 언제 발생시킬 수 있을까요?

 

  그것을 앞서 언급했던 '트리거'라는 것을 이용해서 발생시킬 수 있는 거예요. 결과적으로 이벤트가 발생하면 lambda_handler 함수의 ‘Event’ 매개변수로 값이 들어오게 됩니다. 지금은 잘 이해가 안 갈 수 있는데요. AWS와 같은 클라우드 서비스는 일단, 동작이 되도록 만든 이후에 천천히 원리를 이해하는 것이 더 학습이 빠르답니다. 따라서 일단 저와 함께 소스코드를 작성해보도록 합시다.

 

import json

def lambda_handler(event, context):
    # 이벤트가 발생하면 무조건 ‘Hello Lambda’라는 메시지를 반환합니다.
    return {
        'statusCode': 200,
        'body': json.dumps('Hello Lambda!')
    }

 

  이제 ‘저장’ 버튼을 눌러주세요. 그럼 이제 실제로 트리거(Trigger)를 설정해서 클라이언트의 요청(Request) 데이터가 AWS 웹 서버로 전송되도록 해보겠습니다. 이 때는 API 게이트웨이라는 것을 사용할 수 있어요. 일종의 웹 서버 처럼 동작하는 기능이에요. API 게이트웨이를 눌러서 트리거로 두시면, 아래쪽에 트리거 설정이 가능해요.

 

 

  가장 먼저 '새 API 생성'으로 해줄게요. 이후에 '보안'은 '열기'로 설정해줍니다. 그리고 '추가 세팅'을 눌러서 API 이름을 'Hello_Lambda-API'라고 설정하고, ‘추가’를 해서 ‘저장’을 진행하시면 됩니다. 저장이 완료되면 비로소 API 게이트웨이가 동작하는 상태가 됩니다.

 

 

  이제 우리의 Hello_Lambda-API의 '세부 정보'를 눌러보시면, API 엔드 포인트가 보입니다. 이 주소가 바로 우리의 웹 서버 경로라고 보시면 돼요. 저는 URL 주소가 https://ron0lld2le.execute-api.ap-northeast-2.amazonaws.com/default/Hello_Lambda 라고 나오네요. 이에 접속해보니 성공적으로 "Hello Lambda!"라는 문자열이 반환된 것을 알 수 있습니다.

 

 

  이로써 간단히 AWS Lambda를 이용해 우리만의 웹 서버를 순식간에 만든 거예요! 한 번 소스코드에서 'Hello Lambda!'를 'Hello!'라고 바꾸어보고, 저장하겠습니다.

 

 

그러면 다시 경로에 접속했을 때 성공적으로 바뀐 메시지가 출력된 것까지 확인할 수 있습니다.

 

 

  이러한 클라이언트와 통신하는 서버 모듈은 일반적으로 Java, C++, Python 등의 언어를 이용해 개발합니다. 과거 게임은 주로 Java와 C++을 이용해 서버 모듈을 개발하곤 했는데, 최근에는 파이썬 또한 서버 개발 언어로 정말 많이 사용하고 있습니다. 그래서 AWS Lambda가 그러한 트렌드에 맞게 Python을 적절히 지원한다는 점에서, 이를 선택한 것입니다.

728x90
반응형

Comment +0

728x90
반응형

  AWS S3는 스토리지 서비스(Storage Service)입니다. 쉽게 말하자면 특정한 사진, 동영상 등의 파일을 저장하기 위해 사용할 수 있는 서비스입니다. 사용 예시는 매우 광범위합니다. 게시판 웹 사이트를 개발 할 때 이미지 파일만을 S3에 저장할 수 있으며, 특정한 로고 사진 등을 S3에 저장하여 사용자가 빠르게 사진 파일을 다운로드 받도록 처리하는 등의 작업이 가능합니다.


  S3에서 객체(Object)란 저장되는 파일을 의미하고, 버킷(Bucket)은 파일이 저장될 프로젝트를 의미합니다.

AWS S3 서비스에 파일 올리기

  바로 한 번 AWS S3 서비스를 이용해 보도록 하겠습니다.



  AWS S3에서는 [버킷 만들기] 버튼을 눌러서 버킷을 생성할 수 있습니다. 쉽게 말하면 하나의 프로젝트를 생성해주는 것입니다.



  - [버킷 이름]은 다른 서버와 겹치지 않는 고유한 이름이 되어야 합니다.

  - 리전(Region)은 일반적으로 S3을 사용하는 사용자와 가까운 위치가 되도록 설정합니다. 다만 저는 Cloud Front의 성능을 측정하기 위해서 EU(런던)으로 설정했습니다.



  이후에 [권한 설정] 탭에서는 실습을 위하여 일단 간단히 퍼블릭(Public) 공간에서 누구든지 접속할 수 있도록 하겠습니다. 따라서 권장 사항으로 제시되어 있는 모든 권한 정책에 체크를 풀어줍니다.



  이후에 만들어진 S3 버킷을 확인합니다.



  이후에 실습을 위하여 두 개의 파일을 이용하겠습니다. 약간 무거운 파일(5 MB 파일)과 가벼운 파일(1KB 미만)을 준비했습니다. 이 두 개의 파일을 버킷 내에 업로드하여 확인하고자 합니다.



Example.zip

5.20MB


index.txt

0.00MB


  이후에 [개요] 탭으로 가서 실제로 파일을 업로드할 수 있습니다.



  두 개의 파일을 올린 이후에 업로드를 진행하면 됩니다.



  두 파일이 올라간 이후에는 언제든지 다운로드 할 수 있습니다.



  이제 사용자 입장에서 해당 파일을 다운로드 받는다고 가정하겠습니다. 특정한 파일을 누르면 퍼블릭(Public)에서 접근 가능한 URL 경로를 확인할 수 있습니다.



  하지만 실제로 해당 경로에 접속을 해보면 접근 불가(Access Denied)라고 출력되는 것을 알 수 있습니다.



  따라서 S3는 개별적으로 파일을 선택하여 [퍼블릭으로 설정]을 눌러 퍼블릭 형태로 설정할 수 있습니다. 한 번 해당 파일을 퍼블릭으로 설정해보도록 하겠습니다.



  [퍼블릭으로 설정] 버튼을 누르시면 됩니다.



  [퍼블릭으로 설정]한 이후에는 다시 해당 경로로 접속했을 때 내용을 확인할 수 있습니다.


버킷 정책 수정하기

  다만 이렇게 일일히 파일을 [퍼블릭으로 설정]하는 것을 귀찮은 작업이 될 수 있습니다. 따라서 특정한 범위의 파일에 대해서 전부 한꺼번에 [퍼블릭으로 설정]하는 방법도 있습니다. [권한] 탭으로 가서 [버킷 정책]을 수정하여 버킷 내에 모든 파일들이 퍼블릭(Public)에서 접근이 가능하도록 설정할 수 있습니다. 다만 여기에 들어가는 내용은 [정책 생성기]를 통해 생성할 수 있습니다.



  [정책 생성기] 버튼을 눌러서 S3 접근을 위한 설정을 할 수 있습니다. 다음과 같이 [S3 Bucket Policy]를 선택한 뒤에 Principal에는 *을 넣습니다. AWS Service에는 [Amazon S3]를 넣습니다. 이후에 Actions에 [GetObject]를 넣습니다.


  이는 해당 URL을 알고 있는 모든 주체(Principal)가 객체에 접근할 수 있는 것을 의미합니다. 또한 객체(Object) 즉, 파일을 다운로드 할 수 있도록 설정하겠다는 의미입니다.



  그리고 Resource에는 자신의 AWS S3 고유 경로를 넣은 뒤에 접근할 수 있는 파일의 URL을 설정합니다. 파일의 URL로 /*라고 넣어주게 되면 해당 버킷 내의 모든 객체에 접근할 수 있도록 하겠다는 의미입니다.



  이제 [Generate Policy] 버튼을 눌러서 실제로 정책을 생성할 수 있습니다.



  이제 생성된 정책 내용을 복사하여 [버킷 정책]의 내용으로 붙여넣기 합니다.



  이제 [퍼블릭으로 설정]을 진행하지 않은 Example.zip 파일에 대해서도 URL 경로에 접속하면 다운로드를 받을 수 있게 되었습니다. 다시 말해 모든 파일에 누구든지 접근하여 다운로드 받을 수 있도록 설정한 것입니다.



  실제로 다음과 같이 다운로드가 이루어지는 것을 확인할 수 있습니다.


Cloud Front 적용하기

  이제 Cloud Front을 이용하여 더 빠르게 리소스를 제공할 수 있도록 하겠습니다. 따라서 Cloud Front 콘솔로 이동합니다. 그리고 [Create Distribution]을 누릅니다.



  이후에 배포하고자 하는 대상(Origin Domain Name)으로 우리의 S3를 설정합니다.



  이후에 기본 설정으로 바로 [Create Distribution]을 눌러 배포를 진행합니다.



  이후에 다음과 같이 처리 진행 중(In Progress) 상태인 것을 확인할 수 있습니다.



  약 20분의 시간이 흐른 뒤에 배포 완료(Deployed) 상태가 된 것을 확인할 수 있습니다.



  이제 다음과 같이 클라우드 프론트의 URL을 이용해 index.txt를 확인할 수 있게 되었습니다. 맨 처음에 특정 리소스에 접근하려고 하면 아직 CDN 서버에 퍼지지 않았기 때문에 [Miss from cloudfront]라는 캐시를 확인할 수 있습니다.



  이후에 두 번째 접속을 할 때부터는 [Hit from cloudfront]이라는 캐시(X-Cache) 메시지를 확인할 수 있습니다. 다시 말해서 Cloud Front를 거쳐서 리소스를 다운로드 받게 된 것입니다.



  이상으로 AWS S3 및 Cloud Front의 기본적인 사용법을 알아보았습니다.

728x90
반응형

Comment +1

728x90
반응형

  AWS RDS를 이용하여 만든 MySQL 서비스기본적으로 협정 세계표준시(UTC)를 따릅니다. 이는 우리 나라(Seoul)의 시간과는 차이가 있습니다. 우리 나라는 (GMT+9)를 채택하고 있습니다. 따라서 단순히 AWS RDS를 만들게 되면, 데이터베이스에 저장되는 시간이 현재 우리 나라의 시간과는 다르게 설정된다는 특징이 있습니다.


  따라서 다음과 같이 기본 설정으로 AWS RDS로 만든 데이터베이스에서 현재 시간을 출력하도록 하면 다른 나라 기준의 시간이 나오게 됩니다.



  이럴 때는 가장 먼저 AWS 콘솔의 RDS 서비스를 확인하여 자신의 데이터베이스를 선택합니다.



  [구성] 탭으로 가서 현재 해당 데이터베이스의 [파라미터 그룹]이 어떻게 설정되어 있는지 확인합니다. [파라미터 그룹]에는 해당 데이터베이스와 관련한 다양한 환경 설정 정보가 기록되어 있습니다.



  따라서 [파라미터 그룹] 탭으로 가서 해당 파라미터를 편집하시면 됩니다.



  바로 time_zone 속성의 값을 [Asia/Seoul]로 변경하는 것입니다.



  이후에 데이터베이스를 재부팅하면 기본 시간 설정이 서울(Seoul)을 기준으로 변경됩니다.



  이제 다시 현재 시간을 출력하도록 하면, 정상적으로 서울 기준의 시간이 출력됩니다.




728x90
반응형

Comment +0

728x90
반응형

  AWS EC2를 이용하다 보면 AWS EC2 인스턴스의 성능을 초기에 낮게 설정하여 다양한 프로그램을 돌리고, 서버를 운영하기에 벅찬 상황에 처할 수 있습니다. 예를 들어 쿠버네티스와 같은 모듈을 서버에서 돌리고자 할 때는 기본 인스턴스 유형인 t2.micro와 같은 성능으로는 서버가 감당하지 못할 수 있습니다. 그래서 AWS EC2 인스턴스의 성능을 변경할 필요가 있을 때가 있답니다.


  사실 일반적으로 사용하는 유형에 한해서는 인스턴스의 성능을 변경하는 것은 어렵지 않습니다. 저는 다음과 같은 t2.micro 인스턴스 유형을 사용하고 있는 서버의 인스턴스 유형을 변경해보도록 하겠습니다.



  다음과 같이 일단 기존에 동작하던 인스턴스를 [중지] 시켜주세요.



  인스턴스가 완전히 중지 상태가 되면 해당 인스턴스를 우클릭 하여 [인스턴스 설정] - [인스턴스 유형 변경]에 들어갑니다.



  저는 다음과 같이 한 단계 높은 성능인 t2.small 인스턴스로 변경하겠습니다.



  이후에 다시 인스턴스를 시작해주시면 됩니다.




  인스턴스가 구동된 이후에 해당 인스턴스에 접속하여 free 명령어를 입력해 보니, 실제로 메모리 용량이 늘어나 있는 것을 확인할 수 있었습니다. 이와 같이 AWS EC2는 매우 간단한 과정으로 인스턴스의 유형을 변경할 수 있도록 해줍니다.



728x90
반응형

Comment +0

728x90
반응형

  AWS EC2는 재미있는 특징이 있습니다. 그것은 바로 기본적으로 EC2 인스턴스를 생성하여 서버를 구동시키면 그것은 고정 IP가 아니라는 점입니다. 따라서 탄력적 IP(Elastic IP)를 이용해 고정 IP를 할당 받아서 사용할 수 있습니다. 탄력적 IP를 이용하지 않으면, 인스턴스(서버)를 중지하고 다시 실행시키면 IP가 변경되어 버리는 대참사가 일어납니다.


  실제로 운영 중인 서버인 경우, 서버를 중지(STOP) 했다가 다시 켰을 때 IP가 변경되어 버리면 매우 귀찮은 일이 발생할 수 있습니다. 따라서 일반적으로 고정 IP를 할당 받기 위해서 탄력적 IP라는 것을 이용합니다. 탄력적 IP를 만들어 놓기만 하고, 사용하지 않더라도 과금이 되기 때문에 탄력적 IP는 꼭 필요한 만큼만 생성하여 바로 사용할 수 있도록 해야 합니다.


  따라서 한 번 실제로 구동 중인 AWS EC2 인스턴스에 탄력적 IP를 적용해보도록 하겠습니다. 현재는 탄력적 IP가 배정되지 않고, AWS가 임시로 할당해 준 퍼블릭 IP가 사용되고 있는 것을 확인할 수 있습니다.



  탄력적 IP를 할당 받아 사용하기 위해서는 [탄력적 IP] 탭으로 이동하여 [새 주소 할당] 버튼을 누르시면 됩니다.



  바로 한 번 할당을 진행하겠습니다.




  할당 이후에는 해당 탄력적 IP를 선택하신 뒤에 [주소 연결] 버튼을 눌러서 특정한 EC2 인스턴스에 연결할 수 있습니다.



  이후에 기존에 존재하던 AWS EC2 인스턴스를 선택하여 해당 탄력적 IP를 적용할 수 있도록 하겠습니다.




  결과적으로 다음과 같이 탄력적 IP가 적용된 것을 확인할 수 있습니다.


728x90
반응형

Comment +0

728x90
반응형

  가끔 자신이 AWS EC2로 운영하고 있는 서버의 지역(Region)을 바꾸고 싶을 때가 있습니다. 저는 다음과 같이 기존의 서버를 [오하이오] 지역에서 운영하고 있는 상태였습니다. 이를 [서울] 지역으로 옮기는 것이 목표입니다.



※ 인스턴스로 이미지 만들기 ※


  AWS EC2를 이용하는 경우 특정한 인스턴스의 지역을 바로 바꾸는 것은 불가능합니다. 그 대신, 인스턴스의 복제품을 옮겨서 다른 지역에서 실행하는 방법을 채택해야 합니다. 다시 말해서 기존에 운영하던 서버를 그대로 이미지화 하는 것이 먼저입니다. 따라서 인스턴스를 우클릭 하여 [이미지] - [이미지 생성]을 눌러서 이미지를 만드시면 됩니다.



  이미지를 생성할 때는 이름을 설정하여 만들 수 있습니다.



  이미지 생성 이후에 약 10분 가량이 지난 뒤에는 [AMI] 탭으로 이동하셨을 때 이미지가 성공적으로 생성되어 있는 것을 확인할 수 있습니다. 다만 이렇게 만들어진 이미지 또한 지역 별로 저장됩니다. 따라서 [오하이오]의 AMI로 생성되어 있답니다. 여기에서 멘붕이 오실 수 있는데요. 침착하세요. AMI는 다행히도 말 그대로 데이터에 불과하기 때문에 다른 지역으로 복사할 수 있습니다.



  우클릭 하여 [AMI 복사] 버튼을 눌러주세요.



  이후에 다음과 같이 AMI를 서울(Seoul) 지역으로 복사하시면 됩니다.




  복사 이후에는 해당 복사된 지역(서울)으로 이동하여 확인해보도록 하겠습니다.



  다음과 같이 [AMI] 탭에서 이미지가 만들어지고 있는 것을 확인할 수 있습니다. 일반적으로 사용 가능한 상태가 되려면 5분 이내의 시간이 소요될 수 있습니다.



※ 복사된 이미지로 인스턴스 새롭게 만들기 ※


  이제 이렇게 만들어진 이미지를 이용하여 서울 지역에 인스턴스를 만들겠습니다. 복사된 이미지로 인스턴스를 만들게 되면, 기존의 서버를 그대로 복사하여 이용할 수 있기 때문에 사실상 그대로 서버를 이전한 것과 같습니다.



  다만 인스턴스를 만들 때는 [나의 AMI] 탭으로 가서 아까 자신이 만들어 준 이미지를 선택해서 만들어 주셔야 합니다.



  저는 다음과 같이 해당 AMI로 인스턴스를 만들겠습니다.



  확인해 보시면 성공적으로, 기존의 서버 인스턴스가 새로운 지역(Region)에서 돌아가게 된 것을 확인할 수 있습니다.



※ 남아 있는 데이터 삭제하기 ※


  서버 이전이 완료되었으면, 기존의 지역에 있던 모든 서버 정보 등의 데이터를 삭제하여 정리해 줄 필요가 있습니다. 사용되지 않는 서버를 계속 가지고 있으면 불필요한 과금이 청구될 수 있기 때문입니다.



  먼저 저는 다음과 같이 인스턴스를 [종료]하여 삭제해주었습니다.



  이후에 [AMI] 탭에서 이미지 파일도 삭제해줍니다.



  그리고 스냅샷 및 기타 데이터를 전부 제거하시면 됩니다.



  결과적으로 다음과 같이 말끔히 다 지운 상태로 만들어 주시면 됩니다.


728x90
반응형

Comment +0