AWS 클라우드 (TIL 23)

석형원·2024년 5월 1일

TIL

목록 보기
23/52

✏️ 오늘 학습한 내용

1. IAM
2. S3
3. CI/CD


🔎 IAM

AWS Identity and Access Management(IAM)

  • AWS 서비스 내 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
    ( 즉, 역할과 권한 관리를 해주는 서비스 )

  • IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여된 대상을 제어한다.
    ( Root계정 혹은 이메일주소 & 암호로 로그인하여 액세스 )

  • 일상적인 작업에 Root 계정을 사용하지 않을 것을 권장

IAM 특징

  • AWS 계정에 대한 공유 액세스를 제공

    액세스 키를 공유하지 않고도 AWS 계정의 리소스를 관리하고 사용할 수 있는 권한을 다른 사람에게 부여할 수 있음

  • 세분화된 권한

    EC2, Elastic Beanstalk 등 세부적으로 권한을 나눠 부여할 수 있음

  • 멀티 팩터 인증 (MFA) 제공

    MFA를 사용할 경우, 계정 소유자나 사용자가 계정 작업을 위해 암호나 액세스 키뿐 아니라 특별히 구성된 디바이스 코드도 제공해야함

  • ID 페더레이션

    기업 네트워크 등 다른 곳에 이미 암호가 있는 사용자에게 AWS 계정에 대해 임시 액세스할 수 있는 권한을 부여

  • PCI DSS 준수

    신용카드, 데이터 처리, 저장 및 전송 처리에 대한 국제 표준

  • 무료 사용

IAM 정책

정책을 만들고 개인에게 직접 줄지, 그룹에 줄지, 역할에 줄지 선택

AWS에서 IAM 사용

( Root 계정으로 접속 -> AWS 웹 페이지에서 IAM를 검색 -> 사용자 )

  • 사용자 추가

    • 액세스 키
      ( 액세스 키를 주어 AWS CLI를 통해서 리소스에 접근 가능하게 함 )

    • 사용자 추가 완료 후 액세스 키를 안전한 곳에 보관할 것

  • 정책 생성
    ( 원하는 서비스에 리소스 접근 권한을 설정 )

  • 역할(Role) 생성
    ( 역할 : 정책들을 묶어서 한번에 제공할 수 있는 기능 )

개인 뿐아니라 서비스와 서비스 간 연결을 할 때에도 액세스에 대한 에러가 발생할 수 있다.

권한에 대한 문제나 역할에 대한 문제로 인해 발생한 경우,

사용하는 곳에 알맞는 역할과 정책을 선택하여 추가하는 작업을 해야한다.


🔎 S3

Amazon Simple Storage Service(Amazon S3)

  • 객체 스토리지 서비스
    ( 객체를 저장해서 활용할 수 있는 공간 스토리지 )

  • 데이터 레이크, 웹 사이트, APP, 백업 및 복원, IoT 디바이스, 빅데이터 분석 등 다양한 사례에서 원하는 양의 데이터를 저장하고 보호할 수 있다.

  • S3는 스토리지 리소스의 크기도 자율적으로 조정 할 수 있는 유연한 스토리지 옵션을 가짐

  • 스토리지 내에서 세분화된 데이터를 제어할 수 있는 기능도 제공

  • RDS와 S3의 차이

    RDS는 견고한 스키마를 통해 저장되기에 데이터 저장의 한계가 있는 반면,
    S3는 객체 공간 스토리지로 모든 범위의 데이터를 저장할 수 있다.

    즉, 프로덕션 데이터베이스(OLTP), 데이터웨어하우스(OLAP)의 차이라고 볼 수 있다.

S3 기능

  • 스토리지 클래스
    ( 스토리지 별로 데이터를 넣을 수 있음 )

  • 스토리지 관리

  • 액세스 관리
    ( Public / Private )

  • 데이터 처리
    ( CRUD 제공 )

  • 스토리지 로깅 및 모니터링

  • 분석 및 인사이트

  • 강력한 일관성

S3를 사용하여 정적 웹 사이트 호스팅

  • S3는 정적 웹 사이트 호스팅 기능을 보유

  • Client 측 스크립트를 포함하기에 별도의 서버를 띄울 필요 없이 호스팅이 가능

  • 동적 웹 사이트는 PHP, JSP, ASP.NET 등 서버 측 스크립트를 포함한 서버 측 처리에 의존한다.

알아야할 용어

  • 버킷

    • S3에 저장된 객체에 대한 컨테이너

    • 모든 객체는 어떤 버킷에 포함

    • 윈도우의 폴더와 유사

  • 객체

    • S3에 저장되는 기본 개체

    • 객체는 객체데이터와 메타데이터로 구성

    • 저장되는 파일들이 바로 객체

    • 버킷 내 객체의 고유한 식별자

    • 버킷 내 모든 객체는 정확히 하나의 키를 갖는다.

    • "버킷+키+버전"의 조합이 각 객체를 고유하게 식별

    • S3는 "버킷+키+버전" 조합과 객체 자체 사이의 기본 데이터 맵으로 간주

AWS에서 S3 사용

  • 버킷 만들기
    ( AWS 웹 페이지에서 S3를 검색 -> 버킷 )

    • 버킷 내에 원하는 파일 업로드 가능
  • 업로드한 html으로 웹 정적 호스팅
    ( 버킷 -> 만든 버킷 선택 -> 속성 -> 정적 웹 사이트 호스팅)

    • 버킷 엔드포인트가 생성됨
      ( 권한 설정 후 url로 접근 가능 )

    • 권한 설정
      ( 만든 버킷 선택 -> 권한 )

      • 버킷 정책 생성
        ( 버킷 정책 편집 -> 정책 생성기 )

        • 버킷 ARN은 이전에 적혀있던 부분을 복사하여 입력

🔎 CI/CD

지속적 통합(Continuous Integration) : CI

  • 모든 개발자가 개발한 코드를 공유 레포지토리에 하루에도 여러번 코드를 커밋하고 병합하는 것

지속적 전달(Continuous Devlivery) : CD

  • 개발팀이 짧은 주기로 소프트웨어를 개발하고 언제든지 운영환경으로 안정적으로 배포하는 것

CI/CD : 일반적으로 빌드하고 배포하는 과정을 뜻함

일반적으로 소스 보관은 Github를 많이 사용하나, AWS에서도 Github와 같은 서비스들을 제공한다. ( AWS CodeCommit )

물론, AWS에서 Github를 연동시켜서 사용도 가능

Github나 CodeCommit과 같은 Repository를
CodePipeline을 통해 빌드, 배포 등 다 엮을 수 있다.

CodeBuild에서 빌드하고 CodeDeploy에서 배포

이러한 과정을 모두 자동화시키는 것이 CI/CD이다.


CodeCommit

  • Github와 같은 역할
    ( flow가 Git과 동일 )

  • 소스에 대한 Repository 역할

  • 비공개로 저장하여 관리

CodeCommit의 특징

  • Github와 거의 동일한 기능을 보유

  • Version 관리 프로젝트를 쉽게 확장할 수 있다
    ( 대용량 파일 크기들을 기용하고 처리할 수 있는 기능이 있음 )

  • Github 같은 다른 Remote Repository에서 쉽게 migrate할 수 있다.

AWS에서 CodeCommit 사용

  • 리포지토리 생성
    ( AWS 웹 페이지에서 CodeCommit를 검색 -> 리포지토리 )

  • 리포지토리 복사
    git clone을 통해 기존의 Github와 동일한 방식으로 사용할 수 있음


CodeBuild

  • 클라우드 상의 완전관리형 빌드 서비스
    ( AWS에서 자동으로 빌드해주는 서비스 )

  • 소스 코드 컴파일(Build), 단위 테스트 실행(Test), 배포 준비가 완료된 아티팩트 생성하는 기능을 제공

AWS에서 CodeBuild 사용

( AWS 웹 페이지에서 CodeBuild를 검색 -> 빌드 프로젝트 )

  • 소스 공급자로 CodeCommit을 선택해도 되고 Github를 선택해도 된다.
    ( 일반적으로 develop 브랜치를 개발 서버로 이용하고 main 브랜치를 운영 서버로 이용 )

  • Buildspec
    ( Build Script가 필요 )

    • 직접 Script 파일을 사용해도 되고
    • 부분적으로 Script 내에 명령어를 삽입할 수 도 있다.
      e.g.) gradlew을 사용하는 경우
      ./gradlew 프로젝트명:bootjar -> 해당 프로젝트에 대해서 jar파일로 빌드하게 됨
  • 아티팩트
    ( 빌드가 진행된 이후에 배포 단계에 알려야할 파라미터가 있는 경우에 추가)


CodeDeploy

  • AWS에서 자동으로 배포해주는 서비스

  • 다양한 애플리케이션 컨텐츠를 거의 무제한으로 배포 가능

  • CodeDeploy를 사용하기 위해 기존 코드를 변경할 필요가 없다.

AWS에서 CodeDeploy 사용

( AWS 웹 페이지에서 CodeDeploy를 검색 -> 애플리케이션 )

  • 애플리케이션 생성

  • 배포 그룹 생성
    ( 생성한 애플리케이션 내에서 생성 )


CodePipeline

  • CI/CD 전 과정을 자동화시키는 서비스
    ( 위의 CodeCommit부터 CodeBuild, CodeDeploy까지 한번에 다 엮음 )

  • 업데이트를 위해 릴리스 파이프라인을 자동화하는데 도움이 되는 완전관리형의 지속적 전달 서비스

CodePipeline 특징

  • 서버 설정이나 프로비저닝을 할 필요성을 줄일 수 있다.

  • CLI를 통해 프로세스 단계를 선택할 수 있다.

  • 자체 플러그인이나 사전 구축된 플러그인을 사용하여 조정이 가능하다.

AWS에서 CodePipeline 사용

( AWS 웹 페이지에서 CodePipeline를 검색 -> 파이프라인 )

  • 소스 공급자(CodeCommit), 빌드 스테이지(CodeBuild), 배포 스테이지(CodeDeploy)를 등록

    e.g.) CodeDeploy 대신 Elastic Beanstalk을 바로 사용할 경우, 서버 설정할 필요 없이 손쉽게 자동적으로 배포

만약, 개발 서버, 운영 서버 이렇게 서버가 2개가 있는 경우 파이프라인이 2개를 각각 만들어줘야한다.

profile
데이터 엔지니어를 꿈꾸는 거북이, 한걸음 한걸음

0개의 댓글