결제 대시보드

 

    AWS에서는 용량, 개수, 시간등을 기준으로 금액을 청구합니다. 결제 대시보드에서 월 청구 예상 금액등 결제 관련 서비스를 한번에 확인할 수 있습니다. (Root유저 혹은 권한이 있는 유저만이 접근 가능합니다.)

 

 

 

+) Budgets

 

    aws에서 예산에 가까워지면 알림이 오는 서비스인 bugets도 제공하고 있습니다.

 

 

 

 

 

 

 

 

클라우드 서비스의 종류

  • IaaS (Infrastructure as a Service) : 하드웨어 인프라를 인터넷을 통해 제공하는 서비스를 말합니다. IaaS는 IT 리소스에 대한 최고 수준의 유연성 및 관리 제어 기능을 제공합니다. 또한 컴퓨터(하드웨어), 스토리지, 네트워크, 운영체제 등을 제공하여 사용자는 이를 이용해 자신의 애플리케이션을 실행할 수 있습니다. AWS EC2, Microsoft Azure, Google Compute Engine 등이 IaaS 서비스를 제공합니다. 
  • PaaS (Platform as a Service) : 기본 인프라(하드웨어 및 운영체제)를 관리할 필요가 없이 애플리케이션을 배포, 관리하기 위한 플랫폼 서비스를 말합니다. PaaS는 IaaS에서 제공하는 하드웨어 인프라와 미들웨어를 이용하여, 애플리케이션 개발, 배포, 운영 등에 필요한 환경을 제공합니다. 또한 SaaS와 달리 독점 소프트웨어를 많이 구축하는 기업이라면 우선적으로 고려할 수 있습니다. 예를 들어, AWS Elastic Beanstalk, Heroku, Google App Engine 등이 PaaS 서비스를 제공합니다.
  • SaaS (Software as a Service): 클라우드 제공업체가 운영하고 관리하는 완제품을 말합니다. SaaS는 사용자와 연결된 패키지 소프트웨어이며 모든 사용자에게 동일하게 보입니다. 사용자는 애플리케이션에 대해 제한된 제어권을 가지며, 클라우드 제공업체가 모든 인프라, 운영 체제, 백엔드 애플리케이션 및 데이터 관리를 담당합니다. 설치 및 지원 등을 일반적으로 공급업체에서 처리하므로 소프트웨어를 더 쉽게 사용할 수 있다는 장점이 있습니다. 예를 들어, 구글 드라이브, 마이크로소프트 오피스 365, Salesforce 등이 SaaS 서비스의 예입니다.

 

 

 

 

 

 

 

 

 

EC2 (Elastic Compute Cloud)

 

    클라우드 컴퓨팅 서비스 중 하나로, 인스턴스를 제공합니다. EC2를 사용하면 필요한 시간만큼 가상 서버를 생성하고 사용할 수 있으며, 필요에 따라 스케일 업 또는 스케일 다운할 수 있습니다.

    이 환경은 실제로는 하드웨어 리소스를 가상화하여 사용하고 있기 때문에, 하드웨어 상에서 실행 중인 물리적인 서버와는 다릅니다. 따라서, 이러한 가상화된 컴퓨터 환경을 "인스턴스(instance)" 라고 부르게 되었습니다.

    각 인스턴스는 독립적으로 실행되고 관리됩니다. 이러한 인스턴스들은 필요에 따라 생성, 시작, 중지, 종료 등이 가능합니다.

 

EC2는 다양한 용도로 사용

  • 웹 애플리케이션 호스팅
  • 데이터베이스 호스팅
  • 컴퓨팅 작업 (예: 데이터 분석, 머신 러닝)
  • 애플리케이션 테스트 및 개발

    EC2는 유연하게 스케일링할 수 있으며, 필요에 따라 인스턴스를 추가하거나 제거하여 자원 사용량을 조절할 수 있습니다. 또한 AWS의 다른 서비스와 통합하여 다양한 용도로 사용할 수 있습니다.

 

 

+) 인스턴스 유형 (프리티어 : 무료)

https://aws.amazon.com/ko/ec2/instance-types/

 

 

 

 

 

 

EC2의 다양한 옵션들

  1. 인스턴스 유형 (Instance Types) - 인스턴스 유형은 서버에 할당되는 CPU, 메모리, 스토리지 및 네트워크 리소스와 같은 기본 성능 특성을 결정합니다. 예를 들어, 일부 인스턴스 유형은 컴퓨팅 작업에 적합하고, 다른 유형은 메모리 집약적인 작업에 적합합니다.
  2. 운영 체제 (Operating System) - EC2 인스턴스는 다양한 운영 체제를 지원합니다. 예를 들어, Amazon Linux, Ubuntu, Windows 등이 있습니다.
  3. 스토리지 옵션 (Storage Options) - EC2 인스턴스에는 인스턴스 스토어, Amazon EBS 및 Amazon S3와 같은 다양한 스토리지 옵션이 있습니다.
  4. 보안 그룹 (Security Groups) - 보안 그룹은 인바운드 및 아웃바운드 트래픽을 제어하는 방화벽 규칙입니다. 각 보안 그룹은 포트 범위, 프로토콜 및 허용되는 IP 주소 범위를 정의할 수 있습니다.
  5. 키 페어 (Key Pair) - 키 페어는 EC2 인스턴스에 대한 SSH 액세스를 허용합니다. 키 페어를 만들면 EC2 인스턴스를 시작할 때 키 페어를 선택할 수 있습니다.
  6. 탄력적 IP 주소 (Elastic IP Address) - 탄력적 IP 주소는 EC2 인스턴스에 고정 IP 주소를 할당합니다. 이는 EC2 인스턴스를 중지하거나 시작할 때마다 IP 주소가 변경되는 것을 방지할 수 있습니다.
  7. 사용 가능한 영역 (Availability Zones) - EC2 인스턴스는 여러 가용 영역에서 실행될 수 있습니다. 이는 장애 대응 및 고가용성을 위해 중요합니다.

 

 

 

 

 

 

 

 

 

EC2 생성하기

 

 

- 보안그룹 설정하기

 

 

 

- 서버 열어주기

sudo apt-get update
sudo apt-get install nginx
sudo systemctl start nginx
# nginx가 active 인지 확인
sudo systemctl status nginx

 

- html 편집하기

cd /var/www/html
sudo vim index.nginx-debian.html
sudo systemctl restart nginx

 

 

- IP 고정하기

 

 

> 인스턴스 선택 > 연결

 

※ 퍼블릭 IPv4 주소 복사 붙여넣기 하니까 연결되는데, 바로가기로는 안 열립니다.

※ https 일 때는 안 열리고 http 일때만 열립니다.

 

 

 

 

 

 

 

 

보안규칙

  • 여러 인스턴스에 할당 가능
  • time out → 보안규칙 이슈
  • connection refuse → ec2 내부 이슈
  • 모든 inbound는 디폴트로 막혀있습니다.
  • 모든 outbound는 디폴트로 열려있습니다.

포트

  • 22 = ssh(secure shell)로 인스턴스에 원격 접속
  • 21 = FTP 파일전송 프로토콜
  • 80 = http 웹 접속
  • 443 = https 안전한 http 접속, 현재의 스탠다드

 

 

 

 

 

 

 

SSH 연결

# 아마존 인스턴스 접속하기

# 읽기 권한
chmod 400 <파일명>.pem

# aws > 인스턴스 > 연결 > 사용자 이름
# 사용자 이름@퍼블릭 IPv4
ssh -i <파일명>.pem 사용자이름@퍼블릭IPv4

# yes

#touch <파일명> : 파일명 파일을 생성
#vim <파일명> : 파일명 파일을 수정

'aws' 카테고리의 다른 글

04.5. [aws] SSL과 HTTPS  (0) 2023.05.14
04. [aws] ELB  (0) 2023.05.07
03. [aws] EBS(Elastic Block Store)  (0) 2023.05.07
01. [aws] IAM  (0) 2023.05.05
00. [aws] AZ  (0) 2023.05.01

IAM (Identity and Access Management)이란?

     AWS 계정을 생성할 때 완전한 액세스 권한이 있는 루트 계정으로 생성됩니다.  루트 사용자만 수행할 수 있는 작업(루트 사용자 보안 인증 정보를 보호 등)을 제외하고 AWS는 루트 사용자 계정에서 작업하는 행위를 지양할 것을 권고합니다.

     루트 계정에서 지양하는 일련의 작업들은 IAM을 통해 해결합니다. IAM을 사용하면 사용자, 그룹 을 생성하여 관리하며 리소스에 대한 접근도 중앙에서 관리할 수 있습니다. 

  1. 인증: 사용자가 AWS 리소스에 액세스할 때 사용자 이름과 암호를 요청하여 인증할 수 있습니다.
  2. 권한 부여: 사용자, 그룹 또는 역할에 대한 권한을 지정할 수 있습니다. 권한은 AWS 리소스에서 수행할 수 있는 작업을 나타내며 IAM 정책을 사용하여 지정할 수 있습니다.
  3. 권한 검증: 사용자가 AWS 리소스에 대한 액세스를 요청할 때 요청이 인증된 사용자에게 허용되는지 여부를 결정할 수 있습니다. 

IAM은 AWS에서 보안을 강화하고 규정 준수 요구 사항을 충족하는 데 중요한 역할을 합니다. IAM을 사용하면 사용자에게 필요한 권한만 부여하여 보안을 유지하고, 일부 규정 준수 규정을 준수하기 위해 일부 사용자에게만 특정 리소스에 대한 액세스를 부여할 수 있습니다

 

 

 

 

IAM 특징

  • Global 서비스
  • 회원 가입시 만들어진 Root Account는 사용/ 공유되지 않아야 합니다.
  • User와 Group을 만들어서 사용해야 합니다.
    • Group 은 개발자/ 운영 / 디자이너와 같이 유저 종류를 지정합니다.
    • User는 Group에 속하지 않을 수도, 여러 Group에 속할 수 있습니다.
    • User는 Root Account가 준 AWS 서비스만 접근할 수 있습니다.
  • 이렇게 만들어진 Group과 User들은 Policy를 통해서 권한을 조정합니다.
    • 최소한의 권한 원칙(least privilege principle)

 

 

 

 

IAM 구성

  1. 사용자(User): IAM에서 사용자는 AWS 계정에 액세스하는 개별 인물 또는 서비스입니다. AWS IAM에서는 계정에 액세스하는 각 사용자에 대해 별도의 보안 자격 증명을 생성할 수 있습니다. 이를 통해 사용자가 AWS 리소스에 대한 액세스 권한을 가지며, 이러한 액세스 권한은 IAM 정책을 사용하여 관리됩니다.
  2. 그룹(Group): IAM에서 그룹은 하나 이상의 사용자를 그룹화하여 이들에게 공통된 권한을 부여하는 데 사용됩니다. 예를 들어, 특정 Amazon S3 버킷에 대한 읽기 및 쓰기 액세스를 가진 모든 사용자를 그룹화할 수 있습니다. 그룹은 유사한 권한을 가진 여러 사용자를 효과적으로 관리할 수 있도록 도와줍니다.
  3. 정책(Policy): IAM 정책은 JSON 형식으로 작성되며, 허용 또는 거부할 수 있는 작업 및 AWS 리소스에 대한 액세스 수준을 지정합니다. IAM 정책은 일반적으로 최소 권한 원칙을 따릅니다. 즉, 필요한 권한만 부여하고, 불필요한 권한을 제거하여 보안을 강화합니다.

 

 

 

 

IAM 사용자 생성하기

 

* AWS  Management Console에 대한 사용자 액세스 권한 제공

    체크 X, API를 이용해서 access

    체크 O, Web에서 접근 할 수 있는 계정을 생성

 

 

IAM 사용자 생성

자동 생성된 암호를 지정하면, 처음 랜덤한 비번을 갖고 사용자가 이후 암호를 변경하도록 설정할 수 있습니다.

 

 

사용자 지정 암호는 일반적인 비밀번호 생성과 동일합니다.

 

 

그룹 권한 지정하기

    JSON 형태로 권한 생성합니다.

 

Administrator Access : 모든 권한을 주는 관리자 생성

 

사용자 그룹을 지정할 수 있다.

    * Account  = Root 계정

    * User = 사용자 할당 

 

가독성을 위해 aws의 계정 별칭을 설정 할 수 있습니다.

 

 

 

 

Policy Structure

 

{
  "Version": "policy-version",
  "Statement": [
    {
      "Effect": "allow-or-deny",
      "Action": ["action-name"],
      "Resource": ["resource-arn"],
      "Condition": {
        "condition-operator": {
          "condition-key": "condition-value"
        }
      }
    }
  ]
}
  • Version : 정책의 버전을 나타냅니다. 현재는 "2012-10-17" 에서 고정되었습니다.
  • Statement : 정책의 규칙을 나타냅니다. 배열 형태로 여러 개의 규칙을 작성할 수 있습니다.
  • Effect : 규칙의 적용 여부를 나타냅니다. "allow" 또는 "deny" 중 하나를 선택합니다.
  • Action : 규칙이 적용되는 작업의 종류를 나타냅니다. 예를 들어 "s3:ListBucket"과 같은 형식으로 작성합니다.
  • Resource : 규칙이 적용되는 리소스의 ARN (Amazon Resource Name)을 나타냅니다. 예를 들어 "arn:aws:s3:::my-bucket/*"과 같은 형식으로 작성합니다.
  • Condition : 규칙이 적용되는 조건을 나타냅니다. 필수는 아니며, 필요한 경우 추가할 수 있습니다. 다양한 조건 연산자를 사용할 수 있습니다. 예를 들어 "IpAddress" 조건 연산자를 사용하면 특정 IP 주소에서만 작업을 수행할 수 있도록 제한할 수 있습니다.

 

 

 

Multi-Factor Authentication(MFA)

    다중 인증 요소 인증 방식을 의미합니다. 이 방식은 일반적인 사용자 ID와 비밀번호 입력 외에 추가적인 인증 요소를 요구하여 보안을 강화하는 방법입니다.

  • 계정에서 반드시 활성화 시키는 것이 좋습니다.
  • 활성화 된 MFA는 기기 변경시 추가인증 혹은 백업파일이 필요합니다. 핸드폰 바꿀 때 주의하세요.

 

'aws' 카테고리의 다른 글

04.5. [aws] SSL과 HTTPS  (0) 2023.05.14
04. [aws] ELB  (0) 2023.05.07
03. [aws] EBS(Elastic Block Store)  (0) 2023.05.07
02. [aws] EC2  (0) 2023.05.07
00. [aws] AZ  (0) 2023.05.01

AWS 클라우드 소개

    AWS는 아마존닷컴이 제공하는 클라우드 컴퓨팅 플랫폼입니다. AWS는 전 세계에 분산되어 있는 데이터 센터에서 고객에게 IT 인프라를 제공하며, 이를 사용하여 고객은 필요한 인프라를 빠르고 쉽게 설정하고 관리할 수 있습니다.

 

 

 

 

 

Onpremise란?

    On-premise 서버는 조직 내부에 설치되고 유지보수되는 서버입니다. 즉, 서버가 조직의 물리적인 위치에 있으며 조직의 IT 인프라를 관리하는 팀이 해당 서버를 관리하고 유지보수합니다. 이러한 서버는 일반적으로 조직의 중요한 데이터나 애플리케이션을 호스팅하고 보호하기 위해 사용됩니다.

    On-premise 서버는 클라우드 서비스와 대조적입니다. 클라우드 서비스는 일반적으로 인터넷을 통해 액세스할 수 있는 외부 데이터 센터에서 호스팅됩니다. 클라우드 서비스를 사용하면 조직은 자체 IT 인프라를 보유하지 않아도 됩니다. 대신 클라우드 제공 업체가 서버를 관리하고 유지보수합니다.

 

 

 

 

 

AWS Region과 AvailabilityZone

    Region : 세계 각지에 있는 AWS 데이터 센터의 물리적인 위치를 의미합니다.

    Availability Zone : 각 리전은 여러 개의 가용 영역(AZ)으로 구성되어 있습니다.  가용영역은 독립적인 데이터 센터로 구성되어 있으며, 네트워크 연결로 연결되어 있습니다. 여러개의 AZ를 사용하여 데이터센터가 재해상황에 빠졌을때도 서비스를 유지할 수 있는 고가용성을 확보할 수 있습니다.

 

 

 

 

고가용성(High availability)

    고가용성은 시스템이 에러 또는 중단되어도 작동할 수 있는 능력을 말합니다.

    AWS에서는 여러 가용 영역(AZ)에 애플리케이션 및 인프라를 배포함으로써 고객에게 높은 서비스 가용성을 유지하고 업무 중단의 영향을 최소화 하고 있습니다.

 

 

 

https://aws.amazon.com/ko/about-aws/global-infrastructure/

 

글로벌 인프라

 

aws.amazon.com

 

 

 

 

 

AWS의 주요 서비스 

  • EC2 (Elastic Compute Cloud) : 클라우드 위의 서버
  • Elastic Beanstalk : 많은 서비스들을 한 번에 설정
  • S3 (Simple Storage Service) : 클라우드 위의 데이터저장소
  • EBS (Elastic Block Store) : EC2의 볼륨(하드웨어)
  • CloudFront : 세계 각지의 캐시 서비스
  • RDS (Relational Database Service) : 클라우드 위의 DB
  • VPC (Virtual Private Cloud) : 클라우드 위의 나만의 네트워크
  • Route 53 : 도메인(주소) 관리
  • IAM (Identity and Access Management) : 보안, 계정관리
  • Elastic Load Balancer : 트래픽 관리 

'aws' 카테고리의 다른 글

04.5. [aws] SSL과 HTTPS  (0) 2023.05.14
04. [aws] ELB  (0) 2023.05.07
03. [aws] EBS(Elastic Block Store)  (0) 2023.05.07
02. [aws] EC2  (0) 2023.05.07
01. [aws] IAM  (0) 2023.05.05

Faker

  • 더미데이터를 만든다.

https://pypi.org/project/django-faker/

pip install Faker

 

from faker import Faker

faker = Faker()
# 이름에만 한글이 적용됨
faker = Faker("ko_KR")

print(faker.name())
print(faker.first_name())
print(faker.last_name())
print(faker.word())
print(faker.sentence())
print(faker.text())

 

 

Faker로 게시글 여러개 만들기

from articles.models import Article
from faker import Faker
# 그 밖에 import 안 한게 있다면 추가하기

class ArticleReadTest(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.faker = Faker()
        cls.articles = []
        #10명의 유저가 게시글 작성
        for i in range(10):
            cls.user = User.objects.create_user(cls.faker.name(), cls.faker.word())
            cls.articles.append(
                Article.objects.create(
                title=cls.faker.sentence(),
                content=cls.faker.text(),
                user=cls.user,
                )
            )

 

 

 

 

(app - urls.py)

urlpatterns = [
    path('<int:pk>/', views.ArticleDetailView.as_view(),name='article_detail_view'),
]

 

(app - models.py)

from django.urls import reverse

class Article(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

    #추가하기
    def get_absolute_url(self):
        # 'pk'값으로 self.pk값을 kwargs에 넣어줌
        # article_detail_view에 pk 값을 넣고 그 url의 문자열을 가져옴
        return reverse('article_detail_view', kwargs={'pk':self.pk})

 

(app - views.py)

class ArticleDetailView(APIView):
    def get(self, request, pk):
        article = ArticleModel.objects.get(pk=pk)
        serializer = ArticleSerializer(article)
        return Response(serializer.data)

 

(app - test.py)

from articles.serializers import ArticleSerializer


class ArticleReadTest(APITestCase):
    def test_get_article(self):
        for article in self.articles:
            # 함수의 return 값으로 url 값을 가져옴
            url = article.get_absolute_url()
            response = self.client.get(url)
            serialize = ArticleSerializer(article).data

            #items : key와 value를 뽑아내고 싶을 때 사용
            for k, v in serialize.items():
                # response.data[k]는 reponse의 value값
                self.assertEqual(response.data[k], v)
                print(k, v)
            
            #위와 똑같음
            #self.assertEqual(article.title, response.data['title'])

 

 

(app - models.py)  유저를 이름으로 보여주기

class ArticleSerializer(serializers.ModelSerializer):
    user = serializers.SerializerMethodField()

    # get + 언더바(_) + serializers.SerializerMethodField()
    def get_user(self, obj):
        return obj.user.username

 

'Python > Django' 카테고리의 다른 글

[DRF] 16. setUpTestData  (0) 2023.04.30
[DRF] 15. setUp, @classmethod, @staticmethod  (0) 2023.04.27
[DRF] 14.5 테스트 코드 종류  (0) 2023.04.27
[DRF] 14. 테스트 코드란?  (0) 2023.04.27
[DRF] 13. 개인페이지 (Q객체, F객체)  (0) 2023.04.27

setUpTestData

  • setUpTestData : 생성된 데이터베이스 픽스쳐는 모든 테스트 메소드에서 사용할 수 있다.
  • setUP: 각각의 테스트 메소드가 실행되기 전에 실행되는 메소드
class ArticleCreateTest(APITestCase):
    @classmethod
    def setUpTestData(cls):
        cls.user_data = {'username':'John', 'password':'password'}
        cls.article_data = {'title':'테스트', 'content':'내용 테스트'}
        cls.user = User.objects.create_user('John', 'password')
        #토큰을 가져올 때 cls.client로 쓰면 에러남

    def setUp(self):
        self.access_token = self.client.post(reverse('token_obtain_pair'), self.user_data).data['access']

 

 

로그인 하지 않고, 로그인 하고 글작성하기

    def test_fail_if_not_logged_in(self):
        url = reverse("article_view")
        response = self.client.post(url, self.article_data)
        self.assertEqual(response.status_code, 401)
        
        
    def test_fail_if_not_logged_in(self):
        response = self.client.post(
            path=reverse("article_view"),
            data=self.article_data,
            HTTP_AUTHORIZATION = f'Bearer {self.access_token}'
        )
        self.assertEqual(response.data["message"], "글 작성 완료!!")

 

 

 

 

이미지 게시글

# 이미지 업로드 및 임시 이미지파일
from django.test.client import MULTIPART_CONTENT, encode_multipart, BOUNDARY
from PIL import Image
import tempfile

# 임시 파일을 만들어 임시 이미지를 만듬

def get_temporary_image(temp_file):
    size = (200, 200)
    color = (255, 0, 0, 0)
    image = Image.new("RGBA", size, color)
    image.save(temp_file, 'png')
    return temp_file
    
    
    
    # 얘는 article class 아래 만들어야 함
    def test_create_article_with_image(self):
        # 임시 이미지 생성
        temp_file = tempfile.NamedTemporaryFile()
        temp_file.name = 'image.png'
        image_file = get_temporary_image(temp_file)
        # 파일 포인터를 이미지 파일의 첫 번째 프레임의 시작 위치로 이동시킴
        image_file.seek(0)
        self.article_data['image'] = image_file

    
        # 이미지 전송
        response = self.client.post(
            path=reverse('article_view'),
            data=encode_multipart(data=self.article_data, boundary=BOUNDARY),
            content_type=MULTIPART_CONTENT,
            HTTP_AUTHORIZATION=f'Bearer {self.access_token}'
        )
        self.assertEqual(response.data['message'], '글 작성 완료!!')

 

 

'Python > Django' 카테고리의 다른 글

[DRF] 17. Faker  (0) 2023.04.30
[DRF] 15. setUp, @classmethod, @staticmethod  (0) 2023.04.27
[DRF] 14.5 테스트 코드 종류  (0) 2023.04.27
[DRF] 14. 테스트 코드란?  (0) 2023.04.27
[DRF] 13. 개인페이지 (Q객체, F객체)  (0) 2023.04.27

+ Recent posts