Powershellを利用したAWS S3操作まとめ


はじめに

AWS S3に対して PowershellのCmdletを利用してダウンロードやアップロードなどの操作を行うための方法を備忘録として残しておきます。

本記事では、下記についてまとめておきます。

  • AWS S3Bucketの作成
  • AWS S3へのファイルアップロード
  • AWS S3のBucketおよびKey情報の取得
  • AWS S3からのファイルダウンロード
  • AWS S3からファイルを削除する

実行環境

項目 バージョン
PS Version 5.1.18362.752
OS Windows 10 1909 Pro 64bit
.Net Framework 4.7.2
AWS Tool Version aws-cli/2.0.44

共通引数

AWS S3用のコマンドレットに対して、共通で利用できるパラメータについては下記の通りです。(基本的によく使うもののみを抜粋)

AWS Tools for PowerShell - Amazon Simple Storage Service (S3)

-AccessKey <String>    : アクセスキー

-ProfileName <String>  : プロファイル名

-Region <Object>       : リージョン

-SecretKey <String>    : シークレットキー

-SessionToken <String> : セッショントークン

S3 Bucketの作成

まずはAWS S3にBucketを作成します。

Syntax

New-S3Bucket Cmdlet

New-S3Bucket
    -BucketName <String>
    -CannedACLName <S3CannedACL>
    -PublicReadOnly <SwitchParameter>
    -PublicReadWrite <SwitchParameter>
    -Force <SwitchParameter>
    -Select <String>
    -UseAccelerateEndpoint <SwitchParameter>
    -UseDualstackEndpoint <SwitchParameter>
    -ForcePathStyleAddressing <Boolean>

Sample

New-S3Bucket -BucketName samplebucket -Region ap-northeast-1

CreationDate        BucketName
------------        ----------
2020/09/09 13:12:54 samplebucket

ファイルのアップロード

先ほど作成したBucketにファイルをアップロードします。

アップロードするファイルは「C:¥Sample」フォルダ内にあるsample01.txt、sample02.txtとします。

Syntax

Write-S3Object Cmdlet

Write-S3Object
    -BucketName <String>
    -Key <String>
    -File <String>
    -CannedACLName <S3CannedACL>
    -PublicReadOnly <SwitchParameter>
    -PublicReadWrite <SwitchParameter>
    -ContentType <String>
    -StorageClass <S3StorageClass>
    -StandardStorage <SwitchParameter>
    -ReducedRedundancyStorage <SwitchParameter>
    -ServerSideEncryption <ServerSideEncryptionMethod>
    -ServerSideEncryptionKeyManagementServiceKeyId <String>
    -ServerSideEncryptionCustomerMethod <ServerSideEncryptionCustomerMethod>
    -ServerSideEncryptionCustomerProvidedKey <String>
    -ServerSideEncryptionCustomerProvidedKeyMD5 <String>
    -Metadata <Hashtable>
    -HeaderCollection <Hashtable>
    -TagSet <Tag[]>
    -ConcurrentServiceRequest <Int32>
    -Force <SwitchParameter>
    -UseAccelerateEndpoint <SwitchParameter>
    -UseDualstackEndpoint <SwitchParameter>
    -ForcePathStyleAddressing <Boolean>

Sample

Write-S3Object -BucketName samplebucket -KeyPrefix sampleKey -Folder C:¥Sample

アップロードしたファイル情報を確認する

先ほどアップロードしたファイルを確認します。

Syntax

Get-S3Object

Get-S3Object
    -BucketName <String>
    -Prefix <String>
    -Encoding <EncodingType>
    -RequestPayer <RequestPayer>
    -Delimiter <String>
    -Marker <String>
    -MaxKey <Int32>
    -Select <String>
    -PassThru <SwitchParameter>
    -NoAutoIteration <SwitchParameter>
    -UseAccelerateEndpoint <SwitchParameter>
    -UseDualstackEndpoint <SwitchParameter>
    -ForcePathStyleAddressing <Boolean>

Sample

Get-S3Object -BucketName samplebucket -KeyPrefix sampleKey

ETag         : "ed92477a90933697ae437028efcf9034"
BucketName   : samplebucket
Key          : sampleKey/sample01.txt
LastModified : 2020/09/03 12:34:05
Owner        : 
Size         : 382
StorageClass : STANDARD

ETag         : "39d930f8vk29d6e54be20i3oe8f120do"
BucketName   : samplebucket
Key          : sampleKey/sample02.txt
LastModified : 2020/09/03 12:34:05
Owner        : 
Size         : 5678
StorageClass : STANDARD

問題なくアップロードができていることを確認できました。

ファイルダウンロード

アップロードしたファイルをダウンロードしてみます。

Syntax

Read-S3Object

Read-S3Object
    -BucketName <String>
    -Key <String>
    -File <String>
    -Version <String>
    -ModifiedSinceDate <DateTime>
    -UnmodifiedSinceDate <DateTime>
    -UtcModifiedSinceDate <DateTime>
    -UtcUnmodifiedSinceDate <DateTime>
    -ServerSideEncryptionCustomerMethod <ServerSideEncryptionCustomerMethod>
    -ServerSideEncryptionCustomerProvidedKey <String>
    -ServerSideEncryptionCustomerProvidedKeyMD5 <String>
    -UseAccelerateEndpoint <SwitchParameter>
    -UseDualstackEndpoint <SwitchParameter>
    -ForcePathStyleAddressing <Boolean>

Sample

Read-S3Object -BucketName samplebucket -KeyPrefix sampleKey -Folder C:¥Sample2

上記で、Sample2のフォルダに先ほどアップロードしたファイルがダウンロードされました。

ファイルの削除

アップロードしたファイルを削除します。

Syntax

Remove-S3Bucket

Remove-S3Bucket
    -BucketName <String>
    -DeleteBucketContent <SwitchParameter>
    -Force <SwitchParameter>
    -Select <String>
    -UseAccelerateEndpoint <SwitchParameter>
    -UseDualstackEndpoint <SwitchParameter>
    -ForcePathStyleAddressing <Boolean>

Sample

Remove-S3Object -BucketName samplebucket -KeyPrefix sampleKey

確認
この操作を実行しますか?
対象 "" に対して操作 "Remove-S3Object (DeleteObjects)" を実行しています。
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

DeleteMarker VersionId RequestCharged
------------ --------- --------------

上記で削除が完了しました。

最後に

S3コンテナの基本的なCmdletについてまとめました。

default意外のプロファイルを利用する場合は「-ProfileName [profile名]」を指定し、リージョンを個別に指定することも可能です。

AWS S3の利用が多くなっていきている中、まず基本的なCmdletは抑えておきたいですね。

次回は、AWS .NETでの操作についてまとめたいと思います。