파이썬으로 S3 서비스를 사용하는 방법

7695 단어 pythonawscloud

소개




안녕하세요, 이 기사에서는 vultr 객체 스토리지를 Python과 연결하는 방법에 대해 설명합니다.

You can also use (digitalocean, aws or etc..)




처음에 Object Storage란 무엇입니까?

개체 저장소는 파일 개체를 저장하고 검색하기 위한 Vultr의 S3 호환 가능 웹 액세스 가능 클라우드 개체 저장소 서비스입니다.
개체는 웹을 통해 비공개 또는 공개적으로 액세스할 수 있습니다. 다음을 포함한 클라우드 객체 스토리지의 사용 사례:
  • 파일 공유(이미지, 비디오, pdf 등)
  • 소프트웨어 또는 비즈니스 파일 공유
  • 이미지, JavaScript, CSS 또는 미디어 파일과 같은 자산에 대한 정적 웹 사이트 호스팅 공유

  • 요약하면 기본 파일 시스템을 관리하거나 확장할 필요 없이 방대한 수의 파일 객체를 처리해야 하는 경우 객체 스토리지가 적합합니다.

    시작하기



    오브젝트 스토리지 생성 방법



    Vultr customer portal 상단에 있는 개체 메뉴를 선택하여 개체 스토리지 구독 목록으로 이동한 다음 Add Object Storage 양식을 사용하여 배포합니다. 배포 후 subscription listing page에서 액세스 키를 확인합니다.


    객체 스토리지에 대한 질문이 있는 경우 이 항목article을 참조하십시오.

    설치 요구 사항


  • Vultr로 새 개체 스토리지를 만듭니다.
  • python.org에서 Python을 다운로드하고 설치합니다.
  • pip 라인으로 boto3 설치:
  • Windows용 cmd 또는 MacOS용 터미널을 엽니다.
  • 및 유형pip install boto3


  • boto3란?



    Boto3는 Python 개발자가 Vultr Object Storage와 같은 서비스를 사용하는 소프트웨어를 작성할 수 있게 해주는 Python용 소프트웨어 개발 키트(SDK)입니다.

    시작하자:


  • 즐겨 사용하는 코드 편집기를 엽니다.
  • 임의의 이름으로 새 Python 파일을 만듭니다.
  • 코드 작성:


  • 먼저 subscription listing page의 객체 스토리지 페이지에서 Acess Key 및 Secret Key를 가져와야 합니다.

    변수에 저장해 보겠습니다.

    object_storage_config = {
        'region_name': 'ewr1',
        'endpoint_url': 'https://ewr1.vultrobjects.com',
        'aws_access_key_id': 'Your_access_key',
        'aws_secret_access_key': 'Your_secret_key'
    }
    

    파일 디렉토리에 파일을 업로드하는 방법:



    import boto3
    client = boto3.client('s3', **object_storage_config)
    

    이제 vultr s3 객체 스토리지에 연결했습니다.


    오브젝트 스토리지에 파일을 업로드하겠습니다. 먼저 새 버킷을 생성해야 합니다.

    객체는 버킷에 저장됩니다. 객체 업로드를 시작하려면 먼저 하나 이상의 버킷을 생성해야 합니다. 버킷은 파일 시스템의 폴더와 유사합니다.
    이 기사article에서 자세히 알아보십시오.

    이제 새 버킷을 만듭니다.

    client.create_bucket(Bucket="bucket_name")
    

    이제 boto3으로 파일을 업로드합니다.

    client.upload_file("file_name", "bucket_name", "object_name.extention")
    

    위의 예제 코드:

    import boto3
    
    object_storage_config = {
        'region_name': 'ewr1',
        'endpoint_url': 'https://ewr1.vultrobjects.com',
        'aws_access_key_id': 'Your_access_key',
        'aws_secret_access_key': 'Your_secret_key'
    }
    
    client = boto3.client('s3', **object_storage_config)
    client.create_bucket(Bucket="uploaded_images")
    client.upload_file("./images/logo.png", "uploaded_images", "logo.png")
    

    멀티파트 파일은 어떻습니까



    upload_fileobj 함수를 사용하여 멀티파트 파일을 업로드할 수 있습니다.

    client.upload_fileobj(file, "bucket_name", "object_name.extention")
    

    예시:

    import boto3
    object_storage_config = {
        'region_name': 'ewr1',
        'endpoint_url': 'https://ewr1.vultrobjects.com',
        'aws_access_key_id': 'Your_access_key',
        'aws_secret_access_key': 'Your_secret_key'
    }
    
    client = boto3.client('s3', **object_storage_config)
    # WE ALREADY CREATED BUCKET
    with open("FILE_NAME", "rb") as file:
        client.upload_fileobj(file, "uploaded_images", "logo.png")
    

    이제 s3 저장소에 파일을 업로드했지만 문제가 있습니다. 문제는 우리가 업로드한 파일이 비공개 모드이며 액세스 키 없이는 아무도 액세스할 수 없다는 것입니다.
    이 문제를 해결하는 두 가지 옵션이 있습니다. 먼저 파일을 업로드할 때 파일을 공개 모드로 만들고 두 번째로 미리 서명된 URL을 만들 수 있습니다.

    미리 서명된 URL이란 무엇입니까?



    개체에 액세스할 수 있는 Vultr 사용자는 미리 서명된 URL을 생성합니다. 생성된 URL은 승인되지 않은 사용자에게 전달됩니다. 미리 서명된 URL은 브라우저에 입력하거나 HTML 웹 페이지 또는 애플리케이션에서 사용할 수 있습니다. 미리 서명된 URL을 사용하는 자격 증명은 URL을 생성한 Vultr 사용자의 자격 증명입니다.
    미리 서명된 URL은 URL이 생성될 때 지정된 제한된 시간 동안 유효합니다.

    response = client.generate_presigned_url(
        'get_object', 
        Params={'Bucket': "bucket_name", 'Key': "object_name"},
        ExpiresIn=expiration
    )
    

    Expiration: Time in seconds for the presigned URL to remain valid



    예시:

    import boto3
    object_storage_config = {
        'region_name': 'ewr1',
        'endpoint_url': 'https://ewr1.vultrobjects.com',
        'aws_access_key_id': 'Your_access_key',
        'aws_secret_access_key': 'Your_secret_key'
    }
    
    client = boto3.client('s3', **object_storage_config)
    response = client.generate_presigned_url('get_object', Params={'Bucket': "uploaded_images", 'Key': "logo.png"}, ExpiresIn=3600)
    print(response)
    

    옵션 2는 공개 모드에서 파일을 업로드하는 것입니다.



    upload_file 또는 upload_fileobj 함수에 ExtraArgs를 추가하여 이를 수행할 수 있습니다.
    예시:

    import boto3
    
    object_storage_config = {
            'region_name': 'ewr1',
            'endpoint_url': 'https://ewr1.vultrobjects.com',
            'aws_access_key_id': 'Your_access_key',
            'aws_secret_access_key': 'Your_secret_key'
    }
    
    client = boto3.client('s3', **object_storage_config)
    client.create_bucket(Bucket="uploaded_images")
    client.upload_file("./images/logo.png", "uploaded_images", "logo2.png", ExtraArgs={"ACL": "public-read"})
    

    좋은 웹페이지 즐겨찾기