728x90
- Amazon CloudFront는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 사용자에게 더 빨리 배포하도록 지원하는 웹 서비스
- https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/GettingStarted.SimpleDistribution.html 배포 시작하기 따라서 진행
- https://aws.amazon.com/ko/polly/getting-started/
- 설명서나 유튜브 영상을 이용, 다 영어로 되어있으니 ai를 통해서 번역해서 이용 또는 구글에서 translate.google.com에서 문서 선택해서 번역해서 이용
- Amazon Polly는 텍스트를 생생한 음성으로 변환하는 클라우드 서비스
- 만들어진 문장을 텍스트 투 스피치로 다운로드 하거나 S3에 저장해서 사용할 수 있다.
- https://aws.amazon.com/ko/lex/getting-started/
- Amazon Lex는 음성과 텍스트를 사용하는 애플리케이션에 대화형 인터페이스를 구축하는 서비스
- https://blog.naver.com/PostView.naver?blogId=classmethodkr&logNo=223435350049&noTrackingCode=true
- https://realyun99.tistory.com/entry/AWS-Amazon-Rekognition-%EC%8B%A4%EC%8A%B5 람다 이용
- Amazon Rekognition을 사용한 얼굴 감지 및 분석 실습
- 데모를 이용하거나 또는 SDK로 직접 개발해서 사용해야함
- 데모 사용해봄
- https://ap-northeast-2.console.aws.amazon.com/rekognition/home?region=ap-northeast-2#/face-detection 데모를 통해서 다양한 실습을 진행해봄 실습 예시
- 이외 더 자세하게 하기 위해서는 sdk 설명서를 읽고 개발을 통해 진행해야함
- https://docs.aws.amazon.com/rekognition/latest/dg/sdk-programmatic-access.html
- 콘솔을 이용해서 엑세스 키 생성 진행
- https://aws.amazon.com/ko/ec2/getting-started/
- https://docs.aws.amazon.com/ko_kr/lightsail/latest/userguide/what-is-amazon-lightsail.html 설명
- https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-test-data-using-an-aws-glue-job-and-python.html
- Glue작업 전에는 데이터 소스를 준비하는 것이 좋다(좋은 소스일수록 더 좋음?)
- https://ap-northeast-2.console.aws.amazon.com/glue/home?region=ap-northeast-2#/v2/getting-started
- https://docs.aws.amazon.com/ko_kr/code-library/latest/ug/python_3_s3_code_examples.html 가상환경window에서 가상환경 s3 venv만들어 boto3설치
- https://docs.aws.amazon.com/ko_kr/code-library/latest/ug/python_3_s3_code_examples.html 여기 사이트 예시 내용을 통해 실습을 진행
- SDK파이썬용 (보토3) 기본코드 이용 학습
- 버킷을 만들고 버킷에 파일을 업로드합
- 버킷에서 객체를 다운로드
- 버킷의 하위 폴더에 객체를 복사
- 버킷의 객체를 나열
- 버킷 객체와 버킷을 삭제
import io
import os
import uuid
import boto3
from boto3.s3.transfer import S3UploadFailedError
from botocore.exceptions import ClientError
def do_scenario(s3_resource):
print("-" * 88)
print("Welcome to the Amazon S3 getting started demo!")
print("-" * 88)
bucket_name = f"doc-example-bucket-{uuid.uuid4()}"
bucket = s3_resource.Bucket(bucket_name)
try:
bucket.create(
CreateBucketConfiguration={
"LocationConstraint": s3_resource.meta.client.meta.region_name
}
)
print(f"Created demo bucket named {bucket.name}.")
except ClientError as err:
print(f"Tried and failed to create demo bucket {bucket_name}.")
print(f"\t{err.response['Error']['Code']}:{err.response['Error']['Message']}")
print(f"\nCan't continue the demo without a bucket!")
return
file_name = None
while file_name is None:
file_name = input("\nEnter a file you want to upload to your bucket: ")
if not os.path.exists(file_name):
print(f"Couldn't find file {file_name}. Are you sure it exists?")
file_name = None
obj = bucket.Object(os.path.basename(file_name))
try:
obj.upload_file(file_name)
print(
f"Uploaded file {file_name} into bucket {bucket.name} with key {obj.key}."
)
except S3UploadFailedError as err:
print(f"Couldn't upload file {file_name} to {bucket.name}.")
print(f"\t{err}")
answer = input(f"\nDo you want to download {obj.key} into memory (y/n)? ")
if answer.lower() == "y":
data = io.BytesIO()
try:
obj.download_fileobj(data)
data.seek(0)
print(f"Got your object. Here are the first 20 bytes:\n")
print(f"\t{data.read(20)}")
except ClientError as err:
print(f"Couldn't download {obj.key}.")
print(
f"\t{err.response['Error']['Code']}:{err.response['Error']['Message']}"
)
answer = input(
f"\nDo you want to copy {obj.key} to a subfolder in your bucket (y/n)? "
)
if answer.lower() == "y":
dest_obj = bucket.Object(f"demo-folder/{obj.key}")
try:
dest_obj.copy({"Bucket": bucket.name, "Key": obj.key})
print(f"Copied {obj.key} to {dest_obj.key}.")
except ClientError as err:
print(f"Couldn't copy {obj.key} to {dest_obj.key}.")
print(
f"\t{err.response['Error']['Code']}:{err.response['Error']['Message']}"
)
print("\nYour bucket contains the following objects:")
try:
for o in bucket.objects.all():
print(f"\t{o.key}")
except ClientError as err:
print(f"Couldn't list the objects in bucket {bucket.name}.")
print(f"\t{err.response['Error']['Code']}:{err.response['Error']['Message']}")
answer = input(
"\nDo you want to delete all of the objects as well as the bucket (y/n)? "
)
if answer.lower() == "y":
try:
bucket.objects.delete()
bucket.delete()
print(f"Emptied and deleted bucket {bucket.name}.\n")
except ClientError as err:
print(f"Couldn't empty and delete bucket {bucket.name}.")
print(
f"\t{err.response['Error']['Code']}:{err.response['Error']['Message']}"
)
print("Thanks for watching!")
print("-" * 88)
if __name__ == "__main__": # 프로그램 진입점, 이게 없음 모듈로만 사용, 있으면 실행으로도 사용 가능해짐
do_scenario(boto3.resource("s3"))
이런식으로 진행하게 되면 기존에 만들었던 bucket에
- 문제에서 나온 순서를 토대로 배열을 만들면
- 버킷을 만들고 버킷에 파일을 업로드합
- 버킷에서 객체를 다운로드
- 버킷의 하위 폴더에 객체를 복사
- 버킷의 객체를 나열
- 버킷 객체와 버킷을 삭제
- 동작을 진행하게 된다.
<오늘의 회고>
728x90
'PYTHON-BACK' 카테고리의 다른 글
# 24.10.17_ 마켓컬리 클론코딩_회원정보 수정 (1) | 2024.10.17 |
---|---|
#파이썬 24.09.25_AWS CloudFront 실습3+클라우드 서버 내 Docker & Kubernates (6) | 2024.09.27 |
#파이썬 24.09.25_AWS AWS Free Tier 실습 (3) | 2024.09.25 |
#파이썬 24.09.24_AWS 기초 서비스 이론 (5) | 2024.09.24 |
#파이썬 24.09.23_클라우드 시스템 (5) | 2024.09.23 |