このトピックでは、バケットインベントリ設定の追加、表示、リスト、削除の方法について説明します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
インベントリ設定を追加、表示、リスト、削除する権限があることを確認してください。 デフォルトでは、バケットの所有者がこれらの権限を持っています。 これらの権限がない場合は、バケットの所有者に権限を要求する必要があります。
1 つのバケットに対して最大 1,000 個のインベントリルールを設定できます。
インベントリルールを設定するソースバケットと、マニフェストファイルが保存される宛先バケットは、同じリージョンにある必要があります。
インベントリ設定の追加
次のコードは、バケットにインベントリ設定を追加する方法を示しています。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、必要に応じてエンドポイントを設定します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、必要に応じてリージョンを設定します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
IsEnabled := true
// KMS を使用してインベントリを暗号化するには、次の設定を参照してください。
//var invEncryption oss.InvEncryption
//var invSseOss oss.InvSseOss
//var invSseKms oss.InvSseKms
//invSseKms.KmsId = "<yourKmsId>" // KMS キー ID を指定します。
//invEncryption.SseOss = &invSseOss // OSS マネージドキーによるサーバー側暗号化 (SSE-OSS) を使用してインベントリを暗号化します。
//invEncryption.SseKms = &invSseKms // KMS マネージドキーによるサーバー側暗号化 (SSE-KMS) を使用してインベントリを暗号化します。
invConfig := oss.InventoryConfiguration{
// インベントリの名前。 名前はバケット内で一意である必要があります。
Id: "yourInventoryId2",
// インベントリ設定を有効にします。
IsEnabled: &IsEnabled,
// オブジェクトをフィルタリングするためのプレフィックスを指定するインベントリフィルター ルールを設定します。
Prefix: "yourFilterPrefix",
OSSBucketDestination: oss.OSSBucketDestination{
// エクスポートされたマニフェストファイルのファイル形式。
Format: "CSV",
// バケットの所有者によって付与されたアカウントの ID (例: 109885487000****)。
AccountId: "yourGrantAccountId",
// 操作に対してバケットの所有者によって付与されたロールの名前 (例: acs:ram::109885487000****:role/ram-test)。
RoleArn: "yourRoleArn",
// エクスポートされたインベントリ結果が保存されるバケットの名前。
Bucket: "acs:oss:::" + "yourDestBucketName",
// インベントリ結果のストレージパスのプレフィックス。
Prefix: "yourDestPrefix",
// インベントリを暗号化する必要がある場合は、次のコードを参照してください。
//Encryption: &invEncryption,
},
// マニフェストファイルのエクスポート頻度。
Frequency: "Daily",
// インベントリにオブジェクトのすべてのバージョンを含めるかどうかを指定します。
IncludedObjectVersions: "All",
OptionalFields: oss.OptionalFields{
// インベントリ結果に含まれる設定項目。
Field: []string{
"Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
},
},
}
// yourBucketName を、インベントリルールを設定するバケットの名前に設定します。
err = client.SetBucketInventory("yourBucketName", invConfig)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
インベントリ設定の表示
次のコードは、バケットのインベントリ設定を表示する方法を示しています。
package main
import (
"encoding/xml"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、必要に応じてエンドポイントを設定します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、必要に応じてリージョンを設定します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// yourBucketName をバケットの名前に設定します。
// yourInventoryId をインベントリルールの名前に設定します。
result, err := client.GetBucketInventory("yourBucketName", "yourInventoryId")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// インベントリ情報を出力します。
bs, err := xml.MarshalIndent(result, " ", " ")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(string(bs))
}
インベントリ設定のリスト
1 回のリクエストで取得できるインベントリ設定は最大 100 件です。 100 件を超えるインベントリ設定を取得するには、複数のリクエストを送信する必要があります。 前のリクエストから返されたトークンを次のリクエストのパラメーターとして使用してください。
次のコードは、バケットのインベントリ設定をリストする方法を示しています。
package main
import (
"encoding/xml"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、必要に応じてエンドポイントを設定します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、必要に応じてリージョンを設定します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
var sumResult oss.ListInventoryConfigurationsResult
vmarker := ""
for {
// yourBucketName をバケットの名前に設定します。
listResult, err := client.ListBucketInventory("yourBucketName", vmarker)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
sumResult.InventoryConfiguration = append(sumResult.InventoryConfiguration, listResult.InventoryConfiguration...)
if listResult.IsTruncated != nil && *listResult.IsTruncated {
vmarker = listResult.NextContinuationToken
} else {
break
}
}
// すべてのインベントリ情報を出力します。
bs, err := xml.MarshalIndent(sumResult, " ", " ")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println(string(bs))
}
インベントリ設定の削除
次のコードは、バケットのインベントリ設定を削除する方法を示しています。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数からアクセス認証情報を取得します。 このサンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、必要に応じてエンドポイントを設定します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、必要に応じてリージョンを設定します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// インベントリ設定を削除します。
// yourBucketName をバケットの名前に設定します。
// yourInventoryId をインベントリルールの名前に設定します。
err = client.DeleteBucketInventory("yourBucketName", "yourInventoryId")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
関連ドキュメント
バケットインベントリの完全なサンプルコードについては、「GitHub」をご参照ください。
バケットのインベントリ設定を追加するための API 操作の詳細については、「PutBucketInventory」をご参照ください。
バケットのインベントリ設定を表示するための API 操作の詳細については、「GetBucketInventory」をご参照ください。
バケットのインベントリ設定をリストするための API 操作の詳細については、「ListBucketInventory」をご参照ください。
バケットのインベントリ設定を削除するための API 操作の詳細については、「DeleteBucketInventory」をご参照ください。