1. IAM
2. S3
3. CI/CD
AWS Identity and Access Management(IAM)
AWS 서비스 내 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스
( 즉, 역할과 권한 관리를 해주는 서비스 )
IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여된 대상을 제어한다.
( Root계정 혹은 이메일주소 & 암호로 로그인하여 액세스 )
일상적인 작업에 Root 계정을 사용하지 않을 것을 권장
AWS 계정에 대한 공유 액세스를 제공
액세스 키를 공유하지 않고도 AWS 계정의 리소스를 관리하고 사용할 수 있는 권한을 다른 사람에게 부여할 수 있음
세분화된 권한
EC2, Elastic Beanstalk 등 세부적으로 권한을 나눠 부여할 수 있음
멀티 팩터 인증 (MFA) 제공
MFA를 사용할 경우, 계정 소유자나 사용자가 계정 작업을 위해 암호나 액세스 키뿐 아니라 특별히 구성된 디바이스 코드도 제공해야함
ID 페더레이션
기업 네트워크 등 다른 곳에 이미 암호가 있는 사용자에게 AWS 계정에 대해 임시 액세스할 수 있는 권한을 부여
PCI DSS 준수
신용카드, 데이터 처리, 저장 및 전송 처리에 대한 국제 표준
무료 사용

정책을 만들고 개인에게 직접 줄지, 그룹에 줄지, 역할에 줄지 선택
( Root 계정으로 접속 -> AWS 웹 페이지에서 IAM를 검색 -> 사용자 )
사용자 추가

액세스 키
( 액세스 키를 주어 AWS CLI를 통해서 리소스에 접근 가능하게 함 )
사용자 추가 완료 후 액세스 키를 안전한 곳에 보관할 것

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

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

개인 뿐아니라 서비스와 서비스 간 연결을 할 때에도 액세스에 대한 에러가 발생할 수 있다.
권한에 대한 문제나 역할에 대한 문제로 인해 발생한 경우,
사용하는 곳에 알맞는 역할과 정책을 선택하여 추가하는 작업을 해야한다.
Amazon Simple Storage Service(Amazon S3)
객체 스토리지 서비스
( 객체를 저장해서 활용할 수 있는 공간 스토리지 )
데이터 레이크, 웹 사이트, APP, 백업 및 복원, IoT 디바이스, 빅데이터 분석 등 다양한 사례에서 원하는 양의 데이터를 저장하고 보호할 수 있다.
S3는 스토리지 리소스의 크기도 자율적으로 조정 할 수 있는 유연한 스토리지 옵션을 가짐
스토리지 내에서 세분화된 데이터를 제어할 수 있는 기능도 제공
RDS와 S3의 차이
RDS는 견고한 스키마를 통해 저장되기에 데이터 저장의 한계가 있는 반면,
S3는 객체 공간 스토리지로 모든 범위의 데이터를 저장할 수 있다.즉, 프로덕션 데이터베이스(OLTP), 데이터웨어하우스(OLAP)의 차이라고 볼 수 있다.
스토리지 클래스
( 스토리지 별로 데이터를 넣을 수 있음 )
스토리지 관리
액세스 관리
( Public / Private )
데이터 처리
( CRUD 제공 )
스토리지 로깅 및 모니터링
분석 및 인사이트
강력한 일관성
S3는 정적 웹 사이트 호스팅 기능을 보유
Client 측 스크립트를 포함하기에 별도의 서버를 띄울 필요 없이 호스팅이 가능
동적 웹 사이트는 PHP, JSP, ASP.NET 등 서버 측 스크립트를 포함한 서버 측 처리에 의존한다.
버킷
S3에 저장된 객체에 대한 컨테이너
모든 객체는 어떤 버킷에 포함
윈도우의 폴더와 유사
객체
S3에 저장되는 기본 개체
객체는 객체데이터와 메타데이터로 구성
저장되는 파일들이 바로 객체
키
버킷 내 객체의 고유한 식별자
버킷 내 모든 객체는 정확히 하나의 키를 갖는다.
"버킷+키+버전"의 조합이 각 객체를 고유하게 식별
S3는 "버킷+키+버전" 조합과 객체 자체 사이의 기본 데이터 맵으로 간주
버킷 만들기
( AWS 웹 페이지에서 S3를 검색 -> 버킷 )


업로드한 html으로 웹 정적 호스팅
( 버킷 -> 만든 버킷 선택 -> 속성 -> 정적 웹 사이트 호스팅)

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

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

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


지속적 통합(Continuous Integration) : CI
지속적 전달(Continuous Devlivery) : CD
CI/CD : 일반적으로 빌드하고 배포하는 과정을 뜻함

일반적으로 소스 보관은 Github를 많이 사용하나, AWS에서도 Github와 같은 서비스들을 제공한다. ( AWS CodeCommit )
물론, AWS에서 Github를 연동시켜서 사용도 가능
Github나 CodeCommit과 같은 Repository를
CodePipeline을 통해 빌드, 배포 등 다 엮을 수 있다.CodeBuild에서 빌드하고 CodeDeploy에서 배포
이러한 과정을 모두 자동화시키는 것이 CI/CD이다.
Github와 같은 역할
( flow가 Git과 동일 )
소스에 대한 Repository 역할
비공개로 저장하여 관리
Github와 거의 동일한 기능을 보유
Version 관리 프로젝트를 쉽게 확장할 수 있다
( 대용량 파일 크기들을 기용하고 처리할 수 있는 기능이 있음 )
Github 같은 다른 Remote Repository에서 쉽게 migrate할 수 있다.
리포지토리 생성
( AWS 웹 페이지에서 CodeCommit를 검색 -> 리포지토리 )

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


클라우드 상의 완전관리형 빌드 서비스
( AWS에서 자동으로 빌드해주는 서비스 )
소스 코드 컴파일(Build), 단위 테스트 실행(Test), 배포 준비가 완료된 아티팩트 생성하는 기능을 제공
( AWS 웹 페이지에서 CodeBuild를 검색 -> 빌드 프로젝트 )

소스 공급자로 CodeCommit을 선택해도 되고 Github를 선택해도 된다.
( 일반적으로 develop 브랜치를 개발 서버로 이용하고 main 브랜치를 운영 서버로 이용 )
Buildspec
( Build Script가 필요 )
./gradlew 프로젝트명:bootjar -> 해당 프로젝트에 대해서 jar파일로 빌드하게 됨
아티팩트
( 빌드가 진행된 이후에 배포 단계에 알려야할 파라미터가 있는 경우에 추가)
AWS에서 자동으로 배포해주는 서비스
다양한 애플리케이션 컨텐츠를 거의 무제한으로 배포 가능
CodeDeploy를 사용하기 위해 기존 코드를 변경할 필요가 없다.
( AWS 웹 페이지에서 CodeDeploy를 검색 -> 애플리케이션 )
애플리케이션 생성

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

CI/CD 전 과정을 자동화시키는 서비스
( 위의 CodeCommit부터 CodeBuild, CodeDeploy까지 한번에 다 엮음 )
업데이트를 위해 릴리스 파이프라인을 자동화하는데 도움이 되는 완전관리형의 지속적 전달 서비스
서버 설정이나 프로비저닝을 할 필요성을 줄일 수 있다.
CLI를 통해 프로세스 단계를 선택할 수 있다.
자체 플러그인이나 사전 구축된 플러그인을 사용하여 조정이 가능하다.
( AWS 웹 페이지에서 CodePipeline를 검색 -> 파이프라인 )

소스 공급자(CodeCommit), 빌드 스테이지(CodeBuild), 배포 스테이지(CodeDeploy)를 등록
e.g.) CodeDeploy 대신 Elastic Beanstalk을 바로 사용할 경우, 서버 설정할 필요 없이 손쉽게 자동적으로 배포

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