팀 프로젝트 일정

박형준·2024년 6월 10일

팀 프로젝트 일정

*전체 일정 : 6/10 ~ 7/26

  • 팀 구성 및 팀장 선출, 주제 선정 : 6/10 ~ 6/14

  • 프로젝트 제작 : 6/17 ~ 7/19

  • 프로젝트 결과물 제출 : 7/19(금) 업로드 해야함

  • 프로젝트 발표 연습 : 7/ 24 ~ 28

  • 프로젝트 발표 : 7/ 30 or 31(예정)


팀 프로젝트 사진 찍기


팀 프로젝트 주제


요구 사항 분석

주제 - 1

워크로드별 클라우드 아키텍처 설계

코어서비스 및 마이크로 서비스 구성 및 Well-Architercted FrameWork 구조 반영

Amazon VPC 환경 구성 및 각 요소 배치 설정

  • 리소스 대장문서를 엑셀로 정리하여 VPC, Subnet, Routing table, Internet gateway, Nat gateway, key pair, 보안그룹 형성

    • public, private network 형성

AWS CloudFormation & OpsWorks를 통한 자동화

  • CloudFormation은 인프라스트럭처를 코드로 정의하고, 해당 코드를 사용하여 AWS 리소스를 프로비저닝하고 관리하는 서비스입니다

    • 이를 통해 반복적이고 확장 가능한 방식으로 인프라스트럭처를 관리
  • OpsWorks는 애플리케이션 스택을 자동으로 배포, 운영 및 확장하는 데 사용되는 서비스입니다

    • 이를 통해 애플리케이션을 보다 쉽게 관리하고 스케일링할 수 있으며, Chef 및 Puppet과 같은 구성 관리 도구를 이용하여 애플리케이션을 자동화

    • 애플리케이션의 예시로는 웹 애플리케이션, 모바일 애플리케이션, 데이터베이스 애플리케이션, 엔터프라이즈 애플리케이션 등이 있습니다.

장애테스트 및 모니터링 구성

  • 서버의 중단, 데이터베이스의 손상, 네트워크 장애 등과 같은 상황에서 시스템이 어떻게 반응하는지 확인하는 것입니다.

    • 장애 테스트를 위해서는 다양한 시나리오를 고려하여 시스템을 테스트하고, 복구 계획을 검증하는 것이 중요
  • 모니터링 구성은 시스템의 상태를 지속적으로 감시하고, 성능 지표를 수집하여 시스템의 건강 상태를 파악하는 것을 의미합니다.

    • 이를 위해 다양한 모니터링 도구를 사용하여 CPU 사용량, 메모리 사용량, 네트워크 트래픽, 로그 데이터 등을 지속적으로 수집하고 분석하여 시스템의 문제를 조기에 발견하고 대응할 수 있습니다.

    • 이를 위해 AWS에서는 CloudWatch와 같은 서비스를 사용하여 시스템의 모니터링을 구성할 수 있습니다.

배포 자동화를 위한 CI/CD 구성

  • 소스 코드 버전 관리: 먼저, 코드를 안전하게 보관하고 관리하기 위해 Git과 같은 버전 관리 시스템을 사용합니다.

    • 지속적 통합 (CI): 새로운 코드 변경사항이 발생할 때마다 자동으로 빌드 및 테스트를 수행하는 CI 파이프라인을 구성합니다. Jenkins, GitLab CI, 또는 CircleCI와 같은 도구를 사용하여 CI 파이프라인을 설정할 수 있습니다.

    • 지속적 배포 (CD): 테스트를 통과한 코드 변경사항을 자동으로 스테이징 환경 또는 프로덕션 환경에 배포하는 CD 파이프라인을 구성합니다. 배포 도구로는 Ansible, Puppet, 또는 Terraform과 같은 도구를 사용하여 자동화된 배포를 구현할 수 있습니다.

프로젝트 보고용 비지니스 문서 작성


주제- 2

요구사항 분석

워크로드별 클라우드 아키텍처 설계

코어 서비스 설계

  • 리소스 대장문서를 엑셀로 정리하여 VPC, Subnet, Routing table, Internet gateway, Nat gateway, key pair, 보안그룹 형성

    • public, private network 형성

Amazon VPC 환경 구성 및 각 요소 배치

  • 리소스 대장문서를 엑셀로 정리하여 VPC, Subnet, Routing table, Internet gateway, Nat gateway, key pair, 보안그룹 형성

    • public, private network 형성

Terraform 모듈 이용, 모든 리소스 격리화

  • 가장 일반적인 방법은 Terraform 모듈을 사용하여 각각의 리소스를 별도의 가상 네트워크(VPC), 서브넷, 보안 그룹 등에 배치하는 것입니다. 이를 통해 리소스들을 논리적으로 격리시키고, 네트워크 트래픽 및 보안 정책을 적용할 수 있습니다.

    • 예를 들어, AWS의 경우, Terraform 모듈을 사용하여 VPC 모듈, 서브넷 모듈, 보안 그룹 모듈 등을 정의하고, 각 리소스를 해당 모듈에 배치함으로써 격리를 달성할 수 있습니다.

    • 또한, Terraform의 변수와 데이터 소스를 적절히 활용하여 각각의 리소스를 동적으로 생성하고, 관리할 수 있습니다. 이를 통해 리소스를 격리화하고, 확장 가능한 방식으로 인프라스트럭처를 관리할 수 있습니다.

시스템 배포 자동화를 위한 Ansible PlayBook 구성

  • 이러한 Playbook은 Ansible을 사용하여 원격 시스템에 배포하고 구성하기 위한 효율적인 방법을 제공합니다. 또한, 변수, 조건문, 반복문과 같은 다양한 기능을 활용하여 보다 유연하고 강력한 자동화를 구성할 수 있습니다.

    • 따라서, 시스템 배포 자동화를 위한 Ansible Playbook을 구성함으로써 반복적이고 복잡한 작업을 효율적으로 자동화할 수 있습니다.

    • 예시는 간단한 Ansible Playbook으로, "web_servers" 그룹의 호스트에 대해 웹 서버를 배포하고 설정합니다. 각각의 task는 특정한 동작을 수행하며, 패키지 설치, 파일 복사, 서비스 시작 등을 정의하고 있습니다.

Terraform 구성 파일을 통한 배포 자동화

  • Terraform을 통해 인프라스트럭처를 코드화하고, 해당 코드를 실행함으로써 인프라를 배포하고 관리할 수 있습니다.

장애테스트 및 모니터링 구성

  • 서버의 중단, 데이터베이스의 손상, 네트워크 장애 등과 같은 상황에서 시스템이 어떻게 반응하는지 확인하는 것입니다.

    • 장애 테스트를 위해서는 다양한 시나리오를 고려하여 시스템을 테스트하고, 복구 계획을 검증하는 것이 중요
  • 모니터링 구성은 시스템의 상태를 지속적으로 감시하고, 성능 지표를 수집하여 시스템의 건강 상태를 파악하는 것을 의미합니다.

    • 이를 위해 다양한 모니터링 도구를 사용하여 CPU 사용량, 메모리 사용량, 네트워크 트래픽, 로그 데이터 등을 지속적으로 수집하고 분석하여 시스템의 문제를 조기에 발견하고 대응할 수 있습니다.

    • 이를 위해 AWS에서는 CloudWatch와 같은 서비스를 사용하여 시스템의 모니터링을 구성할 수 있습니다.

프로젝트 보고용 비즈니스 문서작성


서버리스 온라인 설문 조사 플랫폼

  • 설명: 온라인 설문 조사를 생성하고 결과를 분석할 수 있는 플랫폼을 구축합니다.

  • 구현 기술:

    • API Gateway: 설문 조사 생성 및 응답 제출 엔드포인트
    • Lambda: 설문 조사 관리 및 응답 처리 로직
    • DynamoDB: 설문 조사 및 응답 데이터 저장
    • QuickSight: 설문 조사 결과 시각화
    • Terraform: 인프라 프로비저닝
    • Ansible: Lambda 함수 배포 및 설정

Amazon Cognito를 사용하여 사용자 인증 및 보안을 관리할 수 있고, Amazon S3를 사용하여 데이터를 안전하게 저장하고 Amazon CloudFront를 통해 전 세계 사용자들에게 빠르게 서비스를 제공할 수 있습니다.

QuickSight는 좋은 선택이지만, Amazon Quicksight 외에도 Grafana, Kibana 등의 도구들을 고려해 볼 수도 있을 것입니다.


엑셀 표 정리, 계획서 작성, terraform vpc 모듈화 역할 분담


cloud fornt


S3, lambda, API gateway, DynamoDB 연결

dynamoDB 빈 테이블 생성

iam 정책 권한 연결

  1. S3 버킷 생성 및 JSON 파일 업로드

  2. Lambda 함수 생성

  3. API Gateway 설정

  4. Lambda 함수와 API Gateway 연결

  5. 테스트 및 확인


  1. S3 버킷 생성 및 JSON 파일 업로드
  • 1.1. S3 버킷 생성

    • AWS Management Console에 로그인합니다.

    • 서비스 목록에서 "S3"를 선택합니다.

    • "버킷 만들기" 버튼을 클릭합니다.

    • 버킷 이름을 입력합니다 (예: bucket-test-phj).

    • 다른 기본 설정을 그대로 두고 "버킷 만들기" 버튼을 클릭합니다.

  • 1.2. JSON 파일 업로드

    • 생성한 S3 버킷을 클릭하여 엽니다.

    • "업로드" 버튼을 클릭합니다.

    • "파일 추가"를 클릭하여 로컬 JSON 파일을 선택합니다.

    • "업로드" 버튼을 클릭하여 파일을 버킷에 업로드합니다.


  1. Lambda 함수 생성
  • 2.1. Lambda 함수 생성

    • AWS Management Console에서 "Lambda"를 선택합니다.

    • "함수 생성" 버튼을 클릭합니다.

    • 함수 이름을 입력합니다 (예: ProcessS3JsonToDynamoDB).

    • 런타임을 선택합니다 (예: Python 3.12).

    • "권한 변경"에서 "기본 Lambda 실행 역할 만들기"를 선택합니다.

    • "함수 생성" 버튼을 클릭합니다.

  • 2.2. Lambda 함수 코드 작성

import json
import boto3

# AWS 리소스 초기화
s3 = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('dynamoDB-test')

def lambda_handler(event, context):
    try:
        # API Gateway로부터 버킷 이름과 파일 키를 추출
        bucket_name = event['queryStringParameters']['bucket']
        file_key = event['queryStringParameters']['key']
        
        # S3에서 JSON 파일을 읽어옴
        response = s3.get_object(Bucket=bucket_name, Key=file_key)
        content = response['Body'].read().decode('utf-8')
        items = json.loads(content)
        
        # DynamoDB에 각 항목 추가
        if isinstance(items, dict):
            # items가 단일 딕셔너리인 경우
            table.put_item(Item=items)
        elif isinstance(items, list):
            # items가 딕셔너리 리스트인 경우
            for item in items:
                if isinstance(item, dict):
                    table.put_item(Item=item)
                else:
                    return {
                        'statusCode': 400,
                        'body': json.dumps({'error': f'Invalid item format: {item}'})
                    }
        else:
            return {
                'statusCode': 400,
                'body': json.dumps({'error': 'Invalid JSON format'})
            }
        
        return {
            'statusCode': 200,
            'body': json.dumps('Items added successfully')
        }
    
    except KeyError as e:
        return {
            'statusCode': 400,
            'body': json.dumps({'error': f'Missing key: {str(e)}'})
        }
    
    except Exception as e:
        return {
            'statusCode': 500,
            'body': json.dumps({'error': str(e)})
        }

테스트 이벤트 설정

{
  "queryStringParameters": {
    "bucket": "bucket-test-phj",
    "key": "list2.json"
  }
}

  1. API Gateway 설정
  • 3.1. API Gateway 생성

    • AWS Management Console에서 "API Gateway"를 선택합니다.

    • "API 생성" 버튼을 클릭합니다.

    • "HTTP API"를 선택하고 "API 생성" 버튼을 클릭합니다.

  • 3.2. 경로 및 통합 설정

    • API 생성 후, "경로"에서 "경로 추가" 버튼을 클릭합니다.

    • 경로를 입력합니다 (예: /processjson).

    • "통합 설정"에서 "Lambda 함수"를 선택합니다.

    • 이전에 생성한 Lambda 함수 (ProcessS3JsonToDynamoDB)를 선택합니다.

    • "저장" 버튼을 클릭합니다.

  1. Lambda 함수와 API Gateway 연결
  • 4.1. API Gateway 권한 설정

    • Lambda 함수로 돌아가서 "권한" 탭을 클릭합니다.

    • 실행 역할을 편집하고, AmazonS3ReadOnlyAccess 및 AmazonDynamoDBFullAccess 정책을 추가합니다.

    • API Gateway가 Lambda 함수를 호출할 수 있도록 AWSLambdaBasicExecutionRole 권한을 포함해야 합니다.

결론: S3에 업로드된 json 파일을 dynamoDB 저장소에 저장하는 lambda함수를 사용할 수 있고, API Gateway 콘솔에서 배포된 API의 엔드포인트 URL을 확인하여 lambda 함수 코드에서 API Gateway의 엔드포인트 URL을 사용하여 JSON 파일을 처리하도록 구현할 수 있다.


6/14 회의록

전체적인 역할 구성

  1. html 람다함수 구성
  • S3 <-> APIgateway <-> Lambda <-> DynamoDB

    • S3를 통해 html(create survey 및 다른 html 등등) 에서 요청받은 이벤트를 APIgateway를 통해 배포받은 Lambda 함수로 처리하여 dynamoDB에 저장

    • 주의할 점:

      • 메서드: cors 활성화(OPTIONS)를 통해 모든 도메인 POST 허용
      • S3: 퍼블릭 엑세스 권한
      • dynamoDB: IAM 권한 설정
  1. terraform 구성
  • 전체적인 리소스는 테라폼으로 격리화시켜 생성하고 세부설정을 하거나, terraform을 통해 리소스를 생성하면서 권한이나 함수 지정하면서 생성

  • 주의할 점: api gateway endpoint를 불러오는 방법

  1. Ansible을 통해 lambda 함수 배포
  • VPC구성: public network, private network

    • public network(VEC-PRD-VPC-NGINX-PUB-2A)의 서브넷을 통해 lambda 함수 배포

    • private network(VEC-PRD-VPC-DB-PRI-2A)를 통해 DB 저장

  • ansible을 통해 Lambda 배포

    • S3에서 html 자동 배포

    • lambda 함수를 zip 파일로 압축해서 배포 ( S3에서 html 자동 배포 )


create html 구성

S3 생성

  • 버킷 만들기
    • 이름 설정
    • 퍼블릭 엑세스 차단 해제, 나머지는 기본 설정
  • 속성, 정적 웹 호스팅/ 활성화( S3에서 html을 띄워주는 역할 )

    • 호스팅할 html 설정 ( create survey )
  • 파일 업로드/ create survey 및 나머지 html 업로드

    • 객체의 엔드포인트로 접속시 create survey 접속 확인

lambda 함수 생성

  • 이름 정하고 파이썬 3.12 지정하기, 함수 생성
    • 코드 작성 부분에 람다 함수 코드 붙여넣고 deploy
  • lambda 함수 내용 : 이벤트 발생시 json 형식의 item을 불러와서 dynamdb에 저장
    • ansible을 통해 zip파일로 배포

api gateway 생성

  • rest api 구축

    • 이름 지정하고, 나머지는 기본으로 설정
  • 리소스 설정, 경로에 survey로 지정해서 설정

  • 메서드 생성

    • post 유형으로 지정, proxy 통합 설정, 생성한 lambda 함수 지정

    • /survey 리소스에서 cors 활성화로 이동 기본 상태로 저장

  • api 배포, 새 스테이지 생성 후

    • lambda함수로 이동해서 트리거 구성에서 엔드포인트를 가져오기
  • create html에 엔드포인트 붙여넣기

    • s3에 create html 삭제하고 다시 업로드

dynamo db

  • 테이블 이름 정하고, 파티션 키와 정렬키 지정 ( 키의 이름이 json 파일의 형식의 이름과 일치해야 함 )

  • 테이블 이름 정한 것을 lambda 함수에 지정해 준다

  • iam 역할에서 인라인 정책 생성에서 직접 입력 가능하거나, 정책 연결에서 dynamoDB accesss로 전부 엑세스 가능한 정책 연결 가능

    • 인라인 정책을 생성할 때 오류가 난 부분을 고쳐서 입력 ( 각자 설정한 부분으로, region, dynamdb table과 계정 id 입력)
    • 정책 이름 지정하고 생성 확인
  • json형식의 질문 저장의 형태

    • id, title, 설명, question 저장

설정을 끝낸 후에 api 배포를 해주는 것을 권장

실패가 될 경우 웹 페이지에서 F12로 오류 수정

0개의 댓글