구체적이고 명확한 질문을 작성하면 더 정확한 답변을 받을 수 있습니다.
나쁜 예시: "테라폼에 대해 설명해 주세요."
좋은 예시: "테라폼을 사용하여 AWS에 VPC를 생성하는 방법을 단계별로 알려주세요."
질문에 필요한 배경 정보를 제공하면 더 유용한 답변을 받을 수 있습니다.
나쁜 예시: "배포 문제가 있어요."
좋은 예시: "앤서블을 사용하여 Nginx를 배포하려고 하는데, ansible-playbook 실행 시 'host unreachable' 오류가 발생합니다. 해결 방법을 알려주세요."
코드와 관련된 질문에는 현재 작성한 코드나 시도한 내용을 포함합니다.
나쁜 예시: "설문 목록 조회 함수가 작동하지 않아요."
좋은 예시: "아래는 제가 작성한 설문 목록 조회 함수입니다. listSurveys 함수에서 데이터베이스 연결 오류가 발생하는데, 어떤 부분을 수정해야 할까요?"
import sqlite3
def listSurveys():
try:
conn = sqlite3.connect('surveys.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM surveys")
surveys = cursor.fetchall()
conn.close()
return surveys
except Exception as e:
print(f"Error: {e}")
문제가 발생한 경우, 기대한 결과와 실제 결과를 설명합니다.
나쁜 예시: "내 코드가 작동하지 않아요."
좋은 예시: "아래 코드를 실행하면 설문 목록이 반환되기를 기대했는데, 대신 빈 목록이 반환됩니다. 문제가 무엇인지 알 수 있을까요?"
import sqlite3
def listSurveys():
conn = sqlite3.connect('surveys.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM surveys")
surveys = cursor.fetchall()
conn.close()
return surveys
print(listSurveys())
왜 이 질문을 하는지, 무엇을 달성하고자 하는지 명확히 합니다.
나쁜 예시: "API 호출하는 방법이 뭐예요?"
좋은 예시: "Python에서 REST API를 호출하여 JSON 응답을 파싱하는 방법을 알고 싶습니다. 예시 코드가 있을까요?"
질문을 이해하기 쉽게 포맷팅하고 단락을 구분합니다.
테라폼과 앤서블을 사용하여 인프라를 설정하고 배포를 자동화하고 싶습니다.
1. 테라폼을 사용하여 AWS에 VPC를 생성했습니다.
2. 이 VPC 내에 EC2 인스턴스를 생성했습니다.
3. 앤서블을 사용하여 이 EC2 인스턴스에 Nginx를 배포하고 싶습니다.
테라폼과 앤서블 설정 파일의 예시를 제공해 주실 수 있나요?
종합 예시
안녕하세요, 테라폼과 앤서블을 사용하여 인프라를 설정하고 배포를 자동화하고자 합니다.
1. 테라폼을 사용하여 AWS에 VPC를 생성하고, 이 VPC 내에 EC2 인스턴스를 생성했습니다.
2. 이제 앤서블을 사용하여 이 EC2 인스턴스에 Nginx를 배포하고 싶습니다.
3. 테라폼과 앤서블 설정 파일의 예시를 제공해 주실 수 있나요?
현재 작성한 테라폼 코드와 앤서블 플레이북은 아래와 같습니다:
```python
hcl
# VPC 생성 테라폼 코드
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
# 앤서블 플레이북
- name: Install Nginx
hosts: webservers
tasks:
- name: Ensure Nginx is installed
apt:
name: nginx
state: present
IAM을 통해 역할 지정
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:PutItem"
],
"Resource": "arn:aws:dynamodb:your-region:your-account-id:table/Surveys"
}
]
}
(인라인 정책 형성으로 역할 생성)

(기존의 정책으로 역할 생성)
dynamoDB table 생성

Lambda 함수 생성
함수 이름과 런타임을 python 3.12로 지정 후에 생성한 역할 지정하고 함수 생성
밑의 코드를 참조하여 배포할 코드 작성 ( dynamodb table의 이름 지정해주기 )
import json
import boto3
from botocore.exceptions import ClientError
# DynamoDB 클라이언트 생성
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('dynamodb-html')
def lambda_handler(event, context):
try:
# API Gateway로부터 전달된 요청 바디를 파싱
survey = json.loads(event['body'])
# DynamoDB에 저장할 항목 생성
item = {
'SurveyId': survey['title'].replace(' ', '-').lower(), # Title을 이용하여 SurveyId 생성
'Title': survey['title'],
'Description': survey['description'],
'Questions': survey['questions']
}
# DynamoDB 테이블에 항목 추가
table.put_item(Item=item)
return {
'statusCode': 200,
'headers': {
'Access-Control-Allow-Origin': '*', # 모든 도메인에서의 요청을 허용
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
},
'body': json.dumps({'message': 'Survey data saved successfully!'})
}
except ClientError as e:
print('Error processing survey:', e.response['Error']['Message'])
return {
'statusCode': 500,
'headers': {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
},
'body': json.dumps({'message': 'Failed to process survey.'})
}
except Exception as e:
print('Error processing survey:', str(e))
return {
'statusCode': 500,
'headers': {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
},
'body': json.dumps({'message': 'Failed to process survey.'})
}
except Exception as e:
print('Error processing survey:', str(e))
return {
'statusCode': 500,
'body': json.dumps({'message': 'Failed to process survey.'})
}
api-gateway 연결
REST API 구축 / 이름 지정하고 생성
리소스 생성 ( 이름 지정 )
메서드 생성 / 유형 POST로 지정 후에 프록시 통합 체크 후에 lambda 함수 지정
리소스에서 cors 활성화 ( 기본 설정으로 활성 )

API 배포 ( 스테이지 이름 지정해서 생성한 후에 )
S3 생성
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::bucket-html/*"
}
]
}

이미지 업로드
create-survey.html의 api-gateway endpoint를 입력해서 저장후에 파일 업로드
파일 업로드 후에 create-survey.html 접속해서 내용 입력 후 저장되는지 확인

