View a markdown version of this page

Amazon S3를 PowerShell 드라이브로 사용 - AWS Tools for PowerShell (버전 5)

버전 5(V5) AWS Tools for PowerShell 가 릴리스되었습니다.

변경 사항 해제 및 애플리케이션 마이그레이션에 대한 자세한 내용은 마이그레이션 주제를 참조하세요.

Orange button with text "Click here for details".

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon S3를 PowerShell 드라이브로 사용

적용 대상: AWS.Tools.S3 5.0.288 이상. S3 드라이브 공급자와 해당 cmdlet은 Windows PowerShell 5.1 및 PowerShell 7 이상(Windows, Linux, macOS)에서 실행되는 AWS.Tools.S3 모듈에 제공됩니다.

S3 PowerShell 드라이브를 사용하면 Amazon S3 스토리지를 드라이브로 탑재하고 로컬 디스크와 동일한 방식으로 사용할 수 있습니다. 드라이브를 탑재한 후 공급자는 버킷과 접두사를 폴더로, 객체를 파일로 표시합니다. 일반적인 탐색 명령은 , , Get-ChildItem, Get-ContentSet-Content, Set-Location등 S3에 대해 직접 작동합니다Remove-Item.

이 주제에서는 S3 드라이브의 보안 인증 정보, 리전 및 안전 동작과 함께 설치, 탑재, 탐색, 콘텐츠 전송 및 탑재 해제를 다룹니다.

경로 구분자는 플랫폼에 따라 다릅니다.

이 주제의 예제에서는 드라이브/가 모든 플랫폼에서 허용하는 경로 구분자로를 사용합니다. Windows에서는 드라이브도를 허용\하므로 S3:\amzn-s3-demo-bucket\reports와 S3:/amzn-s3-demo-bucket/reports는 동일합니다. Linux 및 macOS에서만 구분/자이므로 둘 이상의 플랫폼에서 실행되는 스크립트에서 해당 양식을 사용합니다. 와 같이 드라이브가 반환하는 경로는 Windows와 / Linux 및 macOS\에서 운영 체제의 기본 구분자를 PSPath사용합니다.

사전 조건

  • AWS.Tools.S3 모듈, 5.0.288 이상. PowerShell Gallery에서 직접 설치합니다(이는 AWS.Tools.Common 종속성도 가져옵니다).

    Install-Module -Name AWS.Tools.S3 -MinimumVersion 5.0.288

    또는 AWS.Tools.Installer 모듈로 모듈식 도구를 관리하는 경우 먼저 설치한 다음를 사용합니다Install-AWSToolsModule.

    Install-Module -Name AWS.Tools.Installer # provides Install-AWSToolsModule Install-AWSToolsModule AWS.Tools.S3

    드라이브 공급자와 해당 cmdlet은 내부에 제공됩니다AWS.Tools.S3. 추가 설치는 필요하지 않습니다.

  • AWS 자격 증명은 모든 S3 cmdlet(명명된 프로필, 환경 변수, IAM 역할 또는 SSO)과 동일한 방식으로 구성되었습니다. 자세한 내용은 시작하기 AWS Tools for PowerShell 섹션을 참조하세요.

모듈을 가져오면 이름이 인 PowerShell 공급자가 등록됩니다AWS.S3. 사용 가능한지 확인할 수 있습니다.

Get-PSProvider AWS.S3

드라이브 탑재

Mount-S3PSDrive를 사용하여 드라이브를 생성합니다. -Name 파라미터는 모든 경로의 드라이브 이름이 됩니다(예:는와 같은 경로를 -Name S3 제공합니다S3:/amzn-s3-demo-bucket/reports/index.txt).

# Mount an S3: drive using a named profile and Region Mount-S3PSDrive -Name S3 -ProfileName my-profile -Region us-east-1 # List buckets Get-ChildItem S3:/

샘플 출력:

Type LastModified Size Name ---- ------------ ---- ---- Bucket 2026-06-02 09:14:03 amzn-s3-demo-app-logs Bucket 2026-01-08 16:47:51 amzn-s3-demo-reports

Set-AWSCredential 및를 사용하여 세션 기본값을 이미 설정한 경우 다른 파라미터 없이 탑재Set-DefaultAWSRegion할 수 있습니다.

Set-AWSCredential -ProfileName my-profile Set-DefaultAWSRegion us-west-2 Mount-S3PSDrive -Name S3

Mount-S3PSDrive는 PowerShell 내장의 얇은 래퍼입니다New-PSDrive. 원하는 경우 드라이브를 직접 생성하고 동일한 자격 증명 및 리전 파라미터를 전달할 수 있습니다.

New-PSDrive -Name S3 -PSProvider AWS.S3 -Root '' -Scope Global -ProfileName my-profile -Region us-east-1
New-PSDrive 직접 사용

를 New-PSDrive 직접 사용할 -Scope Global 때 전달합니다. 드라이브가 없으면 드라이브가 현재 범위에서 생성되고 해당 범위가 종료되면 사라집니다(예: 드라이브가 생성된 스크립트 또는 함수가 반환되는 경우). -Scope Global가 자동으로 Mount-S3PSDrive 설정됩니다.

기본적으로는 출력을 Mount-S3PSDrive 생성하지 않습니다. PSDriveInfo 객체를 되돌리-PassThru려면를 추가합니다.

자격 증명 파라미터 이름

자격 증명 파라미터의 이름은가 -AWSCredential아니라 입니다-Credential.는 New-PSDrive 이미 다른 유형PSCredential인 -Credential로를 정의하므로 S3 드라이브는 충돌을 방지하기 위해 고유한 이름을 사용합니다.

자격 증명 및 리전 확인 방법

S3 드라이브는 S3 파라미터를 먼저 지정한 다음 세션 기본값을 Set-AWSCredential 및 로 설정한 Set-DefaultAWSRegion다음 SDK 기본 체인의 프로파일, 환경 및 인스턴스 메타데이터 소스와 같이 리전을 인증하고 선택합니다. 전체 해상도 순서는 AWS 자격 증명 사용 및 섹션을 참조하세요의 AWS 리전 지정 AWS Tools for PowerShell.

리전에 아무 것도 제공하지 않으면 드라이브가 로 돌아갑니다us-east-1. 를 사용하여 탑재하는 리전은 시작 리전일 뿐입니다. 단일 드라이브가 리전 간 버킷에 도달할 수 있습니다( 참조한 드라이브에서 리전 간 버킷에 액세스).

에서 잘못된 프로필 또는 누락된 버킷 또는 접두사가 실패합니다Mount-S3PSDrive. 객체에 액세스할 때까지 일부 권한 오류가 표시되지 않을 수 있습니다.

로컬 드라이브처럼 Amazon S3 탐색

드라이브를 탑재한 후 일반적인 PowerShell 드라이브 명령으로 이동합니다. S3에는 실제 폴더가 없지만 공급자는 접두사를 폴더로 제시하므로 동일한 방식으로 탐색할 수 있습니다.

# Change into a bucket, then a prefix Set-Location S3:/amzn-s3-demo-reports/2026 # List the current location Get-ChildItem

샘플 출력:

Type LastModified Size Name ---- ------------ ---- ---- Folder q1 Folder q2 Object 2026-03-31 18:02:11 48210 summary.txt
# List a path without changing location Get-ChildItem S3:/amzn-s3-demo-bucket/reports/2026

탭 완성은 버킷, 접두사 및 객체에서 작동하므로 전체 이름을 입력하지 않고도 경로를 완료할 수 있습니다.

Get-ChildItem는 각 항목을 Name, TypeSize, 및 LastModified 속성을 노출하는 객체로 반환합니다. 이러한 속성을 사용하면 리스팅이 Where-Object 및와 같은 명령으로 직접 파이프할 수 있습니다Sort-Object. Type는 Bucket, Folder또는 중 하나입니다Object. 폴더와 버킷에는 크기가 없습니다.

# List the 10 largest objects with the prefix "2026" Get-ChildItem S3:/amzn-s3-demo-app-logs/2026 -Recurse | Where-Object Type -eq 'Object' | Sort-Object Size -Descending | Select-Object -First 10 Name, Size, LastModified

다른 탐색 명령도 드라이브에서 작동합니다.

# Retrieve the single item at an exact path (no children) Get-Item S3:/amzn-s3-demo-bucket/reports/index.txt # Test whether a path exists and whether it is a folder or an object Test-Path S3:/amzn-s3-demo-bucket/reports # -> True Test-Path S3:/amzn-s3-demo-bucket/reports -PathType Container # -> True (a prefix) Test-Path S3:/amzn-s3-demo-bucket/reports/index.txt -PathType Leaf # -> True (an object)
명령 별칭은 운영 체제에 따라 다릅니다.

이는 드라이브가 아닌 PowerShell 동작입니다. Windows에서는 Unix 스타일 별칭 ls, rm및가 PowerShell cmdlet에 cat 매핑되므로 ls S3:/amzn-s3-demo-bucket 작동합니다. Linux 및 macOS에서 PowerShell은 이러한 이름을 S3 경로를 인식하지 못하는 네이티브 도구(/bin/ls, /bin/rm, /bin/cat)에 바인딩된 상태로 둡니다. 따라서는 시스템을 ls S3:/amzn-s3-demo-bucket 실행ls하고 실패합니다. 모든 플랫폼에서 실행되는 스크립트의 경우 전체 cmdlet 이름 Get-ChildItem, Remove-Item및를 사용합니다Get-Content. (cd 및 dir는 모든 플랫폼에서 별칭이 지정되므로 어디에서나 작동합니다.)

-Recurse를 사용하면 항목의 Name가 접두사를 기준으로 하는 키이며(따라서를 포함할 수 있음/), 동일한 리프 이름이 다른 접두사 아래에 나타날 수 있습니다. 나열된 항목을 명확하게 식별해야 하는 경우(예: 계속 파이프하려면) PSPath 대신를 사용합니다Name.

Windows PowerShell 5.1에서 -AsByteStream을 사용하여 나열된 객체 피핑

Windows PowerShell 5.1에서는 Get-ChildItem에 피핑이 실패할 Get-Content -AsByteStream 수 있습니다. 파이프된 입력이 S3 경로임을 알기 -AsByteStream 전에 엔진이 바인딩될 수 있으며, 5.1의 FileSystem 공급자에는 이러한 파라미터가 없습니다( 참조로컬 파일 바이트 읽기는 에디션마다 다릅니다.). PSPath 두 에디션 모두에서 작동하는 명시적 항목으로 각 항목을 읽습니다.

# Read each listed object by explicit PSPath Get-ChildItem S3:/amzn-s3-demo-bucket/prefix | ForEach-Object { Get-Content -LiteralPath $_.PSPath -AsByteStream -Raw }

PowerShell 7+에서는 다이렉트 파이프가 작동하지만 두 에디션 모두에서 실행되는 스크립트의 경우 항목별 형식이 안전한 기본값입니다.

목록은 중단해도 안전합니다.

결과의 각 페이지가 S3에서 도착하고 Ctrl+C를 사용하여 중단해도 안전할 때 스트림을 나열합니다. 객체 수가 많은 접두사는 전체 목록이 완료될 때까지 기다리는 대신 즉시 출력을 생성하기 시작합니다.

키의 와일드카드 문자

S3 키에는 PowerShell 와일드카드 문자([, ], *, ?)가 포함될 수 있습니다. 이러한 키를 문자 그대로 해결하려면 파일 시스템 공급자에서와 동일한 방식으로 -LiteralPath (Get-Item, Get-ContentSet-Content, 및에서 지원Remove-Item)를 사용합니다.

Get-Content -LiteralPath 'S3:/amzn-s3-demo-bucket/data[2026].csv' -Raw
읽을 수 없는 Test-Path 및 객체

Test-Path는 읽을 수 없는 경로에 $true 대해를 반환합니다. 경로가 확인되는지 확인합니다. 경로를 읽거나 쓸 수 있는 권한이 있는지는 확인하지 않습니다.

S3에서 객체 읽기

Get-Content는 객체를 다운로드합니다. 기본적으로 텍스트 줄을 줄별로 반환합니다. -Raw를 추가하여 전체 객체를 단일 문자열로 반환합니다. Get-Content 및 -Encoding는 모두 텍스트 및 -AsByteStream 바이너리 콘텐츠를 Set-Content 지원합니다.

# Read an object line by line Get-Content S3:/amzn-s3-demo-reports/2026/summary.txt # Read the whole object as one string Get-Content S3:/amzn-s3-demo-reports/2026/summary.txt -Raw

텍스트가 아닌 객체의 경우 -AsByteStream를 사용하여 원시 바이트를 가져옵니다. S3 공급자가 파라미터를 제공하기 때문에 S3 경로에서 PowerShell 7+ 및 Windows PowerShell 5.1 모두에서 작동합니다. 로컬 파일만 에디션에 따라 다릅니다( 참조로컬 파일 바이트 읽기는 에디션마다 다릅니다.). 텍스트 디코딩을 제어하려면 표준 PowerShell 인코딩 이름(UTF8, UTF8BOM, Unicode, ASCII등)-Encoding을 사용하여를 추가합니다. 기본값은 Get-Content 및 모두에서 BOM이 없는 UTF-8입니다Set-Content.

# Read raw bytes Get-Content S3:/amzn-s3-demo-bucket/images/logo.png -AsByteStream -Raw # Decode as a specific text encoding Get-Content S3:/amzn-s3-demo-bucket/data/report.csv -Encoding UTF8

Get-Content는 또한 멀티파트 다운로드 파트 크기를 바이트 단위로 S3 최소 5MiB와 최대 5GiB 사이에서 -PartSize 설정할 수 있습니다. 업로드 파트 크기를 Set-Content설정하는 -PartSize에 미러링됩니다( 참조매우 큰 객체 업로드).

원시 바이트를 변수로 읽기

객체의 바이트를 변수에 로드하는 경우(해시, 측정 또는 다른 API로 전달) 먼저 -AsByteStream 결과를 평면화합니다. 그렇지 않으면 .Length 및 바이트 비교로 인해 잘못된 결과가 생성됩니다.

$bytes = [byte[]]((Get-Content S3:/amzn-s3-demo-bucket/images/logo.png -AsByteStream -Raw) | ForEach-Object { $_ })

파일 또는 다른 명령(예:에서Set-Content -AsByteStream처럼 S3와 로컬 디스크 간에 객체 복사)에 피핑할 때는 평면화가 필요하지 않습니다.

S3에 객체 쓰기

Set-Content는 객체를 업로드(및 덮어쓰기)합니다.

# Write text Set-Content S3:/amzn-s3-demo-reports/2026/notes.txt -Value 'Draft complete' # Write several lines Set-Content S3:/amzn-s3-demo-bucket/notes/list.txt -Value @('alpha', 'beta', 'gamma') # Write raw bytes Set-Content S3:/amzn-s3-demo-bucket/images/logo.png -AsByteStream -Value $bytes

업로드에는 다음과 같은 옵션이 있습니다.

파라미터 용도

-Encoding

on-the-wire바이트의 텍스트 인코딩(기본 UTF-8, BOM 없음).

-NoNewline

각 텍스트 값 뒤에 후행 줄 바꿈을 생략합니다.

-StorageClass

이 객체의 스토리지 클래스(예: STANDARD_IA, GLACIER).

-PartSize

이 업로드의 멀티파트 파트 크기는 바이트 단위입니다(S3 최소 5MiB에서 최대 5GiB 사이). 매우 큰 객체 업로드 섹션을 참조하세요.

Ctrl+C를 사용하여 언제든지 업로드를 취소할 수 있습니다. 업로드가 완료될 때까지 아무것도 커밋되지 않으므로 취소해도 이전 객체 대신 반 쓰기 객체가 남지 않습니다.

텍스트 업로드는 LF 줄 끝을 사용합니다.

텍스트 업로드는 LF 줄 끝을 사용하므로 Windows, Linux 또는 macOS에 작성된 객체는 바이트와 동일합니다. 바이트를 정확하게 제어해야 하는 경우를 사용합니다-AsByteStream.

매우 큰 객체 업로드

드라이브를 통한 모든 업로드는 멀티파트 업로드이며 S3는 멀티파트 업로드를 10,000개 파트로 제한합니다. 단일 객체를 약 48MiB이고 캡을 지난 업로드는 파트가 부족하여 실패합니다. GiB 더 큰 것을 업로드하려면 최소한 -PartSize가 되도록를 올립니다object size / 10,000.

# Upload a ~200 GiB object with 64 MiB parts (200 GiB / 10,000 = 21 MiB, so 64 MiB is plenty) # PowerShell 7+ Get-Content ./huge.bin -AsByteStream -ReadCount 8MB | Set-Content S3:/amzn-s3-demo-bucket/archive/huge.bin -AsByteStream -PartSize 64MB # Windows PowerShell 5.1 (local read uses -Encoding Byte; the S3 write keeps -AsByteStream -PartSize) Get-Content ./huge.bin -Encoding Byte -ReadCount 8MB | Set-Content S3:/amzn-s3-demo-bucket/archive/huge.bin -AsByteStream -PartSize 64MB

-PartSize 및 -StorageClass는 S3 대상 파라미터입니다. 파이프라인 바운드 대상 객체가 아닌 명시적 S3 대상 경로(이전 예제 참조)와 함께 사용합니다.

-PartSize는 S3 최소 5MiB에서 최대 5GiB 사이의 값을 허용합니다. 최대 5GiB에서 10,000개의 파트가 S3가 지원하는 가장 큰 객체(5TiB)를 포함합니다.

부분 크기 선택

또한 파트 크기가 클수록 대용량 업로드를 위한 왕복 횟수가 줄어들지만 각 진행 중 파트는 메모리에 보관되므로 매우 큰 파트는 더 많은 메모리를 사용합니다. 5MiB~수백MiB가 적절한 범위입니다. 객체 크기에 필요한 경우에만 더 높게 이동합니다.

S3와 로컬 디스크 간에 객체 복사

를 사용하여 S3 내에서 복사Copy-Item는 지원되지 않습니다( 참조지원되는 작업과 지원되지 않는 작업). 로컬 디스크와 S3 간에 데이터를 이동하려면 Get-Content 및를 통해 콘텐츠를 파이프합니다Set-Content.

바이너리 데이터의 경우 바이트를 정확하게 읽고 씁니다. S3 경로는 두 PowerShell 에디션 -AsByteStream 모두에서를 사용합니다.에 설명된 대로 로컬 측만 다릅니다로컬 파일 바이트 읽기는 에디션마다 다릅니다..

# Upload a local file (PowerShell 7+; on Windows PowerShell 5.1 the local read uses -Encoding Byte) Get-Content ./report.csv -AsByteStream -ReadCount 8MB | Set-Content S3:/amzn-s3-demo-bucket/data/report.csv -AsByteStream # Download to a local file (on Windows PowerShell 5.1 the local write uses -Encoding Byte) Get-Content S3:/amzn-s3-demo-bucket/data/report.csv -AsByteStream | Set-Content ./report.csv -AsByteStream
바이너리 데이터에 대해 양쪽 끝에서 바이트 모드 사용

바이너리 데이터를 복사할 때 양쪽 끝의 읽기 및 쓰기 바이트 수입니다. 텍스트 모드에서는 콘텐츠가 디코딩되고 다시 인코딩됩니다. 줄마다 줄 바꿈이 정규화되거나 추가되어 텍스트가 아닌 데이터가 손상됩니다. 읽기 및 쓰기의 바이트 모드는 바이트를 정확하게 복사합니다. 텍스트 파일의 경우 일반 작업이 Get-Content | Set-Content 작동합니다. 단, 텍스트 모드는 후행 줄 바꿈(LF)을 Set-Content 추가하고 줄 끝을 정규화하므로 복사본이 소스와 byte-for-byte 동일하지 않습니다. 정확한 사본이 필요한 경우 양쪽 끝에 -AsByteStream를 사용합니다.

로컬 파일 바이트 읽기는 에디션마다 다릅니다.

로컬 파일을 대상으로 지정하는 것은 PowerShell의 기본 제공 FileSystem 공급자를 사용하며, 해당 공급자는 Windows PowerShell 5.1(PowerShell 6에 도착함)-AsByteStream에가 없습니다. 대신 -Encoding Byte 사용하세요. 이는 S3 드라이브가 제어하는 것이 아니라 5.1 제한 사항입니다. S3 경로는 두 에디션 -AsByteStream 모두에 적용됩니다.

Edition 로컬 파일 바이트 읽기 로컬 파일 바이트 쓰기

PowerShell 7 이상

Get-Content $f -AsByteStream -ReadCount 8MB

Set-Content $f -AsByteStream

Windows PowerShell 5.1

Get-Content $f -Encoding Byte -ReadCount 8MB

Set-Content $f -Encoding Byte

서버 측 S3-to-S3 복사본의 경우 Copy-S3Object cmdlet을 사용합니다.

객체 및 접두사 삭제

Remove-Item는 단일 객체를 삭제합니다. 접두사(콘텐츠가 있는 폴더)를 삭제하려면가 필요합니다. 그러면 접두사 아래에 -Recurse있는 모든 항목이 배치로 제거됩니다.

# Delete a single object Remove-Item S3:/amzn-s3-demo-bucket/notes/todo.txt # Delete a prefix and everything under it Remove-Item S3:/amzn-s3-demo-bucket/old-logs -Recurse

Remove-Item 프롬프트가 대상에 따라 달라지는지 여부:

  • 가 없는 단일 객체-Recurse: 프롬프트가 없습니다. 객체가 삭제됩니다.

  • 접두사, -Recurse: 프롬프트 없음. 접두사 아래의 모든 항목이 삭제됩니다.

  • 가 없는 비어 있지 않은 접두사-Recurse: PowerShell에서 확인 메시지를 표시합니다. 이는 파일 시스템 공급자의 container-has-children 동작입니다. 확인하면 삭제가 반복되고, 거부하면 아무것도 삭제되지 않습니다. 비대화형 호스트에서는 해당 프롬프트가 차단됩니다. -Recurse를 전달하여 프롬프트 없이 계속 진행합니다.

기본 PowerShell 스위치를 사용하여 삭제를 미리 보거나 게이트합니다.

# Preview without deleting Remove-Item S3:/amzn-s3-demo-bucket/old-logs -Recurse -WhatIf # Ask for confirmation Remove-Item S3:/amzn-s3-demo-bucket/notes/todo.txt -Confirm
버전 관리가 활성화된 버킷은 최신이 아닌 버전을 유지합니다.

Amazon S3 버전 관리가 활성화된 버킷에서는 표준 삭제를 Remove-Item 수행합니다. 삭제 마커를 추가하고 현재 버전을 숨기지만 비최신 버전은 제거하지 않습니다.이 버전은 유지되며 스토리지 비용이 계속 발생합니다. 버전을 영구적으로 제거하려면 S3 cmdlet(예: 버전 ID가 있는 Remove-S3Object) 또는 Amazon S3 수명 주기 규칙을 사용합니다.

Remove-Item - 프롬프트 없이 반복 삭제

Remove-Item -Recurse는와 동일한 프롬프트 없이 접두사 아래의 모든 객체를 삭제합니다rm -r. 버전 관리가 없는 버킷에서 재귀 삭제는 영구적입니다. 버전 관리가 활성화된 버킷에서는 이전 참고 사항에 설명된 대로 삭제 마커를 추가합니다. 무엇을 제거할지 잘 모르는 경우 -WhatIf 먼저를 사용합니다.

버킷 수명 주기 작업이 범위를 벗어나므로 드라이브를 통해 전체 버킷을 삭제할 수 없습니다. 대신 Remove-S3Bucket을 사용합니다.

하나의 버킷 또는 접두사로 드라이브 범위 지정

를와 함께 탑재-Root하여 버킷 또는 버킷 내의 접두사로 드라이브를 제한합니다. 그러면 드라이브의 루트가 해당 위치이고 탐색이 그 아래에 제한됩니다.

# Mount rooted at a bucket: the drive root lists the bucket's top-level entries Mount-S3PSDrive -Name Data -Root amzn-s3-demo-bucket -ProfileName my-profile -Region us-east-1 Get-ChildItem Data:/ # top-level keys in amzn-s3-demo-bucket Get-Content Data:/reports/index.txt # -> amzn-s3-demo-bucket/reports/index.txt # Mount rooted at a bucket + prefix Mount-S3PSDrive -Name Reports -Root amzn-s3-demo-reports/2026 -ProfileName my-profile -Region us-east-1 Get-ChildItem Reports:/ # contents of amzn-s3-demo-reports/2026/

루트가 이미 있어야 합니다. 존재하지 않는 버킷 또는 접두사는 탑재에 실패합니다. 상대 경로가 루트 위로 오를 수 없으므로(.. 엔진에 의해 차단됨) 범위가 지정된 마운트를 사용하면 정확히 하나의 프로젝트 데이터를 집중적으로 볼 수 있습니다.

한 드라이브에서 리전 간 버킷에 액세스

탑재된 단일 드라이브는 여러 리전의 버킷에 도달할 수 있습니다. 버킷을 처음 터치하면 공급자는 해당 리전을 조회하고 후속 호출을 올바른 엔드포인트로 자동으로 라우팅합니다. 각 리전마다 별도의 드라이브가 필요하지 않습니다.

# Mounted in us-east-1, but this bucket is in us-west-2 and commands work without extra configuration Mount-S3PSDrive -Name S3 -ProfileName my-profile -Region us-east-1 Get-ChildItem S3:/amzn-s3-demo-west-bucket Get-Content S3:/amzn-s3-demo-west-bucket/data/report.csv -Raw

기본 스토리지 클래스 설정

를 사용하여 마운트 시 드라이브 전체의 기본 스토리지 클래스를 설정합니다-StorageClass. 특정가 자체 로 Set-Content 재정의하지 않는 한 해당 드라이브를 통한 모든 업로드는 지정된 클래스를 사용합니다-StorageClass.

# Set all uploads to default to STANDARD_IA Mount-S3PSDrive -Name Archive -ProfileName my-profile -Region us-east-1 -StorageClass STANDARD_IA Set-Content Archive:/amzn-s3-demo-bucket/cold/data.txt -Value '...' # STANDARD_IA Set-Content Archive:/amzn-s3-demo-bucket/hot/data.txt -Value '...' -StorageClass STANDARD # overrides to STANDARD

드라이브 탑재 해제

Dismount-S3PSDrive (를 통한 래퍼Remove-PSDrive)를 사용하여 드라이브를 제거합니다. PowerShell은 현재 위치인 드라이브를 제거하지 않으므로 먼저 다른 위치로 변경합니다.

Set-Location $HOME # or C:\ on Windows Dismount-S3PSDrive -Name S3

지원되는 작업과 지원되지 않는 작업

드라이브를 사용하여 객체 콘텐츠를 검색하고 이동할 수 있습니다. 버킷 수명 주기 및 서버 측 복사 작업은 전용 S3 cmdlet과 함께 유지됩니다.

지원됨

  • 탐색 및 나열: Set-Location, Get-ChildItem ( 포함-Recurse), Get-Item, Test-Path, 탭 완성

  • 콘텐츠: Get-Content (다운로드), Set-Content (업로드)

  • 삭제: Remove-Item (단일 객체, 접두사 -Recurse)

  • 나열된 항목을 Get-Content 및에 피핑 Remove-Item

지원되지 않음

명령 대신 사용해야 하는 이유/대상

Copy-Item

S3-to-S3 복사는 드라이브를 통해 노출되지 않습니다. 서버 측 복사본에는 Copy-S3Object를 사용합니다. local-to-S3 또는 S3-to-local 경우 파이프 Get-Content | Set-Content.

Move-Item, Rename-Item

S3에는 이름이 바뀌지 않습니다. cmdlet을 사용하여 복사 및 삭제를 수행합니다.

New-Item (디렉터리)

S3에는 실제 폴더가 없습니다. 그 아래에 객체를 쓰면 접두사가 나타납니다.

Clear-Content, Add-Content

객체는에 의해 전체적으로 작성됩니다Set-Content. 현재 위치 추가 또는 지우기는 없습니다.

Get-ItemProperty, Set-ItemProperty, Clear-ItemProperty

드라이브는 PowerShell 속성 인터페이스를 구현하지 않으므로 이러한 명령은 드라이브 메시지 대신 PowerShell 엔진의 자체 interface-not-supported 오류와 함께 실패합니다. Get-ChildItem 및 Get-Item 반환 항목에는 Name, Type, Size및 만 포함됩니다LastModified. S3 객체 메타데이터를 읽거나 설정하려면 Get-S3ObjectMetadata 또는 Write-S3Object를 사용합니다.

버킷 생성 또는 삭제

New-S3Bucket / Remove-S3Bucket을 사용합니다.

지원되지 않는 명령은 명령의 이름을 지정하고 대체 명령을 가리키는 메시지와 함께 실패합니다. 예를 들어 "Copy-Item은 S3 드라이브에서 지원되지 않습니다. Copy-S3Object를 사용하거나 Get-Content를 Set-Content로 파이프합니다.” 위 표에 설명된 대로 *-ItemProperty 명령은 예외입니다.

명령 참조

Mount-S3PSDrive 및 Dismount-S3PSDrive의 전체 파라미터 목록은 AWS Tools for PowerShell Cmdlet 참조를 참조하세요.

S3 경로에서 드라이브는 해당 cmdlet에 대한 PowerShell 설명서Get-ContentSet-Content에서 다루지 않는 및에 동적 파라미터도 추가합니다.

명령 파라미터

Get-Content

-AsByteStream, -Raw, -Encoding, -PartSize

Set-Content

-AsByteStream, -Encoding, -NoNewline, -StorageClass, -PartSize ( 참조매우 큰 객체 업로드)

문제 해결

“드라이브가 사용 중이므로 마운트를 해제할 수 없습니다.”

S3 드라이브가 현재 위치입니다. 와 같은 다른 드라이브의 위치로 변경$HOME한 다음 Dismount-S3PSDrive 다시 실행합니다.

"루트를 찾을 수 없거나 연결할 수 없습니다"와 함께 탑재가 실패합니다.

의 버킷 또는 접두사가 존재하지 -Root 않습니다. 이름(및 버킷이 자격 증명의 기본값이 아닌 버킷에 있는 경우 리전)을 확인합니다. 자격 증명 실패는이 "연결할 수 없음" 메시지가 아닌 다른 오류를 생성합니다. 객체에 액세스할 때까지 루트에 대한 권한 오류가 나타나지 않을 수 있습니다. 따라서 성공적으로 마운트를 한다고 해서 루트 아래의 모든 경로를 읽을 수 있는 것은 아닙니다.

비어 있지 않은 접두사를 삭제하면 스크립트에서 중단됩니다.

이는를 사용하지 않고 비어 있지 않은 접두사를 삭제할 때 발생합니다-Recurse. 접두사에 하위 항목(파일 시스템 공급자의 container-has-children 동작)이 있기 때문에 PowerShell 엔진은 확인 프롬프트를 표시합니다. 비대화형 호스트는 프롬프트에 응답할 수 없으므로 명령이 차단됩니다.

를 전달-Recurse하여 프롬프트 없이 접두사의 콘텐츠를 삭제하거나 대화식으로 확인하여 계속 진행합니다. (-Force는 드라이브의 삭제 경로에서 참조하지 않으므로 여기서는 아무런 효과가 없습니다.)

“드라이브 외부에서 방금 변경한 객체는 여전히 이전 목록을 표시합니다.”

목록은 탐색 속도를 높이기 위해 잠시(약 1초) 캐시됩니다. 드라이브를 통해 변경한 내용은 즉시 표시됩니다. 다른 도구에서 변경한 내용은 짧은 캐시가 만료된 후에 나타납니다.

“키에는 백슬래시가 포함되어 있습니다.”

드라이브는 플랫폼의 기본 경로 구분자를 허용하므로 드라이브가 백슬래시가 포함된 키를 처리할 수 있는지 여부는 운영 체제에 따라 달라집니다.

  • Windows - \는 경로 구분자이므로 드라이브는 이를 하나로 읽고 로 정규화합니다/. 리터럴 백슬래시가 포함된 키는 드라이브를 통해 해결할 수 없습니다. 대신 Get-S3Object 또는 Read-S3Object cmdlet을 사용합니다. Get-S3Object

  • Linux 및 macOS - / 만 경로 구분자입니다. 백슬래시는 키의 일반 문자이므로 드라이브는 이러한 키를 정상적으로 처리합니다.