본문 바로가기
Cloud/AWS

[2021.06.29] 인턴 +120 How to connect AWS S3 using Python ?(+boto3)

by injekim97 2021. 6. 29.
반응형

[2021.06.29]  인턴 +120  How to connect AWS S3 using Python ?(+boto3)

 

 

Boto3 란?
-> Python 언어 용 AWS 서비스와 쉽게 통합 할 수 있도록 AWS는 boto3 라는 SDK를 제공
-> Python 애플리케이션을 S3 , DynamoDB , SQS 및 더 많은 서비스와 통합 할 수 있음 (데이터 저장, 검색 및 삭제가능)

 

 

 

how to install Boto3 ?

pip install boto3

 

 

Sample code for using boto3 module

import boto3

lambda_client = boto3.client('lambda',
                             region_name='ap-northeast-2',
                             aws_access_key_id='자격증명 생성시 나오는 access_key',
                             aws_secret_access_key='자격증명 생성시 나오는 secret_key'
                             )      
                             
                             
  response = lambda_client.invoke(
            FunctionName='1900crawtest', 
            InvocationType='RequestResponse',
            Payload=json.dumps({"ispass": "0", "temperature": "36.5"})
        )                           

* boto3 모듈을 사용할 때, ec2를 사용하고 싶으면 lambda 자리에 ec2 , s3 사용하고 싶으면 s3로 대체

* region_name = 'ap-northeast-2' # AWS에서 제공해주는 지역이름을 뜻함. 즉 ap-northeast-2은 서울임

 

 

* lambda_client.invoke 안에 선언 된 변수와 값에 대해 알아 보자

- FunctionName ="AWS_LAMBDA_FUNCTION_NAME"

- InvocationType='RequestResponse',  # 호출 타입을 말하는 것

* RequestResponse(API용), Event(비동기 호출용), DryRun(인증용)

- Payload=json.dumps  # Payload는 데이터 출력 형식을 말함.

 

 

----------------------------------------------------------------------------------------------------------------------------------

InvocationType: RequestResponse 

 

InvocationType: Event

 

InvocationType: DryRun

 

 

-------------------------------------------------------------------------------------------------------------------------------
AWS Lambda 에서 boto3 모듈 사용하는 방법 ★

 

import json
import random
import time
import boto3


def lambda_handler(event, context):
    video_url_lists = [
        'https://www.youtube.com/watch?v=veHqJSC-9Lo',
        'https://www.youtube.com/watch?v=VMYUXR1W4Qg',
        'https://www.youtube.com/watch?v=EbywYGogH6A']

    for video_url in video_url_lists:
        event_data = dict(video_url=video_url)
        print(event_data)
 
 
        lambda_client = boto3.client('lambda',
                             region_name='ap-northeast-2',
                             aws_access_key_id='',
                             aws_secret_access_key=''
                             )      
        
        
        result = lambda_client.invoke(
            FunctionName="1900crawtest",
            InvocationType='Event',
            Payload=json.dumps(event_data),
        )

        code = result['StatusCode']

        wait_sec = random.randint(1,3)
        time.sleep(wait_sec)
        
        return { "wait_second" : wait_sec, 
                "http_code_status": code
                }

 

 

-> Layer에, selenium, webdriver 모듈을 추가해줘야 함

 

+@ AWS Lambda 의 메모리도 설정해줘야 한다.(해당 에러가 떴을 때 - 해결방법)

{
  "errorMessage": "2021-06-29T08:45:11.933Z a6b987d2-7806-4d6d-b27c-eb048476217f Task timed out after 3.00 seconds"
}

 

-> 편집 눌러서, 메모리 1000, 제한 시간 5분으로 설정해주면 됨

 

 

 

 

-------------------------------------------------------------------------------------------------------------------------------
+@ boto3 로 S3 조회 하기

import boto3

s3 = boto3.client('s3',
                             region_name='ap-northeast-2',
                             aws_access_key_id='키 입력',
                             aws_secret_access_key='키 입력'
                             )      

response = s3.list_buckets()
response

 

 

결과

-------------------------------------------------------------------------------------------------------------------------------
HTTP 상태코드 정리
200

-> 정상적으로 에러없이 전송 성공

 

201 (Created)

-> 요청에 따라 새 자원이 작성

e.g : POST & PUT  작업이 성공했을 때 반환하는 것

 

202 (Accepted)

-> 서버가 클라이언트의 명령을 받음.

 

204
-> 서버가 요청을 성공적으로 수행했으며 응답 페이로드 본문에 보낼 추가 콘텐츠가 없다는 뜻

반응형

댓글