*전체 일정 : 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, 보안그룹 형성
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, 보안그룹 형성
Amazon VPC 환경 구성 및 각 요소 배치
리소스 대장문서를 엑셀로 정리하여 VPC, Subnet, Routing table, Internet gateway, Nat gateway, key pair, 보안그룹 형성
Terraform 모듈 이용, 모든 리소스 격리화
가장 일반적인 방법은 Terraform 모듈을 사용하여 각각의 리소스를 별도의 가상 네트워크(VPC), 서브넷, 보안 그룹 등에 배치하는 것입니다. 이를 통해 리소스들을 논리적으로 격리시키고, 네트워크 트래픽 및 보안 정책을 적용할 수 있습니다.
예를 들어, AWS의 경우, Terraform 모듈을 사용하여 VPC 모듈, 서브넷 모듈, 보안 그룹 모듈 등을 정의하고, 각 리소스를 해당 모듈에 배치함으로써 격리를 달성할 수 있습니다.
또한, Terraform의 변수와 데이터 소스를 적절히 활용하여 각각의 리소스를 동적으로 생성하고, 관리할 수 있습니다. 이를 통해 리소스를 격리화하고, 확장 가능한 방식으로 인프라스트럭처를 관리할 수 있습니다.
시스템 배포 자동화를 위한 Ansible PlayBook 구성
이러한 Playbook은 Ansible을 사용하여 원격 시스템에 배포하고 구성하기 위한 효율적인 방법을 제공합니다. 또한, 변수, 조건문, 반복문과 같은 다양한 기능을 활용하여 보다 유연하고 강력한 자동화를 구성할 수 있습니다.
따라서, 시스템 배포 자동화를 위한 Ansible Playbook을 구성함으로써 반복적이고 복잡한 작업을 효율적으로 자동화할 수 있습니다.
예시는 간단한 Ansible Playbook으로, "web_servers" 그룹의 호스트에 대해 웹 서버를 배포하고 설정합니다. 각각의 task는 특정한 동작을 수행하며, 패키지 설치, 파일 복사, 서비스 시작 등을 정의하고 있습니다.
Terraform 구성 파일을 통한 배포 자동화
장애테스트 및 모니터링 구성
서버의 중단, 데이터베이스의 손상, 네트워크 장애 등과 같은 상황에서 시스템이 어떻게 반응하는지 확인하는 것입니다.
모니터링 구성은 시스템의 상태를 지속적으로 감시하고, 성능 지표를 수집하여 시스템의 건강 상태를 파악하는 것을 의미합니다.
이를 위해 다양한 모니터링 도구를 사용하여 CPU 사용량, 메모리 사용량, 네트워크 트래픽, 로그 데이터 등을 지속적으로 수집하고 분석하여 시스템의 문제를 조기에 발견하고 대응할 수 있습니다.
이를 위해 AWS에서는 CloudWatch와 같은 서비스를 사용하여 시스템의 모니터링을 구성할 수 있습니다.
프로젝트 보고용 비즈니스 문서작성
설명: 온라인 설문 조사를 생성하고 결과를 분석할 수 있는 플랫폼을 구축합니다.
구현 기술:
Amazon Cognito를 사용하여 사용자 인증 및 보안을 관리할 수 있고, Amazon S3를 사용하여 데이터를 안전하게 저장하고 Amazon CloudFront를 통해 전 세계 사용자들에게 빠르게 서비스를 제공할 수 있습니다.
QuickSight는 좋은 선택이지만, Amazon Quicksight 외에도 Grafana, Kibana 등의 도구들을 고려해 볼 수도 있을 것입니다.
엑셀 표 정리, 계획서 작성, terraform vpc 모듈화 역할 분담
cloud fornt
dynamoDB 빈 테이블 생성

iam 정책 권한 연결

S3 버킷 생성 및 JSON 파일 업로드
Lambda 함수 생성
API Gateway 설정
Lambda 함수와 API Gateway 연결
테스트 및 확인
1.1. S3 버킷 생성
AWS Management Console에 로그인합니다.
서비스 목록에서 "S3"를 선택합니다.
"버킷 만들기" 버튼을 클릭합니다.
버킷 이름을 입력합니다 (예: bucket-test-phj).
다른 기본 설정을 그대로 두고 "버킷 만들기" 버튼을 클릭합니다.
1.2. JSON 파일 업로드
생성한 S3 버킷을 클릭하여 엽니다.
"업로드" 버튼을 클릭합니다.
"파일 추가"를 클릭하여 로컬 JSON 파일을 선택합니다.
"업로드" 버튼을 클릭하여 파일을 버킷에 업로드합니다.
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"
}
}
3.1. API Gateway 생성
AWS Management Console에서 "API Gateway"를 선택합니다.
"API 생성" 버튼을 클릭합니다.
"HTTP API"를 선택하고 "API 생성" 버튼을 클릭합니다.
3.2. 경로 및 통합 설정
API 생성 후, "경로"에서 "경로 추가" 버튼을 클릭합니다.
경로를 입력합니다 (예: /processjson).
"통합 설정"에서 "Lambda 함수"를 선택합니다.
이전에 생성한 Lambda 함수 (ProcessS3JsonToDynamoDB)를 선택합니다.
"저장" 버튼을 클릭합니다.
4.1. API Gateway 권한 설정
Lambda 함수로 돌아가서 "권한" 탭을 클릭합니다.
실행 역할을 편집하고, AmazonS3ReadOnlyAccess 및 AmazonDynamoDBFullAccess 정책을 추가합니다.
API Gateway가 Lambda 함수를 호출할 수 있도록 AWSLambdaBasicExecutionRole 권한을 포함해야 합니다.
결론: S3에 업로드된 json 파일을 dynamoDB 저장소에 저장하는 lambda함수를 사용할 수 있고, API Gateway 콘솔에서 배포된 API의 엔드포인트 URL을 확인하여 lambda 함수 코드에서 API Gateway의 엔드포인트 URL을 사용하여 JSON 파일을 처리하도록 구현할 수 있다.
전체적인 역할 구성
S3 <-> APIgateway <-> Lambda <-> DynamoDB
S3를 통해 html(create survey 및 다른 html 등등) 에서 요청받은 이벤트를 APIgateway를 통해 배포받은 Lambda 함수로 처리하여 dynamoDB에 저장
주의할 점:
전체적인 리소스는 테라폼으로 격리화시켜 생성하고 세부설정을 하거나, terraform을 통해 리소스를 생성하면서 권한이나 함수 지정하면서 생성
주의할 점: api gateway endpoint를 불러오는 방법
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을 띄워주는 역할 )
파일 업로드/ create survey 및 나머지 html 업로드
lambda 함수 생성
api gateway 생성
rest api 구축
리소스 설정, 경로에 survey로 지정해서 설정
메서드 생성
post 유형으로 지정, proxy 통합 설정, 생성한 lambda 함수 지정
/survey 리소스에서 cors 활성화로 이동 기본 상태로 저장
api 배포, 새 스테이지 생성 후
create html에 엔드포인트 붙여넣기
dynamo db
테이블 이름 정하고, 파티션 키와 정렬키 지정 ( 키의 이름이 json 파일의 형식의 이름과 일치해야 함 )
테이블 이름 정한 것을 lambda 함수에 지정해 준다
iam 역할에서 인라인 정책 생성에서 직접 입력 가능하거나, 정책 연결에서 dynamoDB accesss로 전부 엑세스 가능한 정책 연결 가능
json형식의 질문 저장의 형태
설정을 끝낸 후에 api 배포를 해주는 것을 권장
실패가 될 경우 웹 페이지에서 F12로 오류 수정