1
0

More than 1 year has passed since last update.

[AWS] S3ライフサイクルによるObject削除

Last updated at Posted at 2023-07-06

AWS S3ライフサイクルによるObject削除

特定のオブジェクトをFilterで削除するための方法をJava, Go, C#で残しておく。

Java

以下はJavaを使用してAWS S3にファイルをアップロードする際にTTLを付与する方法。

ライフサイクル設定のコード

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

public class S3FileUploadExample {

  public static void main(String[] args) {
    String bucketName = "your-bucket-name";
    String key = "your-file-key";
    String filePath = "path/to/your/file";

    AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
            .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
            .withRegion("your-region")
            .build();

    // バケットを作成(既に存在する場合はスキップ)
    if (!s3Client.doesBucketExistV2(bucketName)) {
        s3Client.createBucket(bucketName);
    }

    // ファイルをアップロード
    s3Client.putObject(new PutObjectRequest(bucketName, key, new java.io.File(filePath)));

    // ライフサイクル設定の作成
    Transition transition = new Transition()
            .withDays(30) // 30日後にオブジェクトがIAに移動する
            .withStorageClass(StorageClass.StandardInfrequentAccess);

    Rule rule = new Rule()
            .withId("TTLRule")
            .withFilter(new LifecycleFilter(new LifecycleFilterPredicate(new LifecyclePrefixPredicate(key))))
            .addTransition(transition)
            .withStatus(BucketLifecycleConfiguration.ENABLED);

    BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration()
            .withRules(rule);

    SetBucketLifecycleConfigurationRequest lifecycleRequest = new SetBucketLifecycleConfigurationRequest(
            bucketName, configuration);

    // ライフサイクル設定をバケットに適用
    s3Client.setBucketLifecycleConfiguration(lifecycleRequest);
  }
}

クライアントのコード

import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;

public class S3ClientExample {

  public static void main(String[] args) {
    AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
            .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
            .withRegion("your-region")
            .build();

    // S3クライアントを使用してファイルをアップロードするコード
    // ...

  }
}

Go

以下はGoを使用してAWS S3にファイルをアップロードする際にTTLを付与する方法。

ライフサイクル設定のコード

package main

import (
	"log"
	"time"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
)

func main() {
	bucketName := "your-bucket-name"
	fileKey := "your-file-key"
	filePath := "path/to/your/file"

	sess, err := session.NewSession(&aws.Config{
		Region: aws.String("your-region")},
	)

	if err != nil {
		log.Fatal("Failed to create AWS session: ", err)
	}

	svc := s3.New(sess)

	// ファイルをアップロード
	_, err = svc.PutObject(&s3.PutObjectInput{
		Body:   aws.ReadSeekCloser("path/to/your/file"),
		Bucket: aws.String(bucketName),
		Key:    aws.String(fileKey),
	})

	if err != nil {
		log.Fatal("Failed to upload file: ", err)
	}

	// ライフサイクル設定の作成
	transition := &s3.Transition{
		StorageClass: aws.String("STANDARD_IA"),
		TransitionInDays: aws.Int64(30),
	}

	rules := []*s3.Rule{
		{
			ID:     aws.String("TTLRule"),
			Status: aws.String("Enabled"),
			Filter: &s3.LifecycleFilter{
				Prefix: aws.String(fileKey),
			},
			Transitions: []*s3.Transition{transition},
		},
	}

	configuration := &s3.BucketLifecycleConfiguration{
		Rules: rules,
	}

	_, err = svc.PutBucketLifecycleConfiguration(&s3.PutBucketLifecycleConfigurationInput{
		Bucket:                  aws.String(bucketName),
		LifecycleConfiguration: configuration,
	})

	if err != nil {
		log.Fatal("Failed to set bucket lifecycle configuration: ", err)
	}
}

クライアントのコード

package main

import (
	"log"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
)

func main() {
	sess, err := session.NewSession(&aws.Config{
		Region: aws.String("your-region")},
	)

	if err != nil {
		log.Fatal("Failed to create AWS session: ", err)
	}

	svc := s3.New(sess)

	// S3クライアントを使用してファイルをアップロードするコード
	// ...

}

C#

以下はC#を使用してAWS S3にファイルをアップロードする際にTTLを付与する方法。

ライフサイクル設定のコード

using Amazon.S3;
using Amazon.S3.Model;

class Program
{
    static void Main(string[] args)
    {
        string bucketName = "your-bucket-name";
        string fileKey = "your-file-key";
        string filePath = "path/to/your/file";

        using (var client = new AmazonS3Client(Amazon.RegionEndpoint.YourRegion))
        {
            // ファイルをアップロード
            client.PutObject(new PutObjectRequest
            {
                BucketName = bucketName,
                Key = fileKey,
                FilePath = filePath
            });

            // ライフサイクル設定の作成
            var transition = new Transition
            {
                Days = 30, // 30日後にオブジェクトがIAに移動する
                StorageClass = S3StorageClass.StandardInfrequentAccess
            };

            var rule = new LifecycleRule
            {
                Id = "TTLRule",
                Filter = new LifecycleFilter
                {
                    LifecycleFilterPredicate = new LifecyclePrefixPredicate
                    {
                        Prefix = fileKey
                    }
                },
                Transitions = new List<Transition> { transition },
                Status = LifecycleRuleStatus.Enabled
            };

            var configuration = new LifecycleConfiguration
            {
                Rules = new List<LifecycleRule> { rule }
            };

            client.PutLifecycleConfiguration(new PutLifecycleConfigurationRequest
            {
                BucketName = bucketName,
                Configuration = configuration
            });
        }
    }
}

クライアントのコード

using Amazon.S3;
using Amazon.S3.Model;

class Program
{
    static void Main(string[] args)
    {
        using (var client = new AmazonS3Client(Amazon.RegionEndpoint.YourRegion))
        {
            // S3クライアントを使用してファイルをアップロードするコード
            // ...
        }
    }
}

以上のサンプルコードにおいて、"your-bucket-name"を使用するバケット名、"your-file-key"を使用するファイルキー、"path/to/your/file"をアップロードするファイルのパスに適切な値を設定する。
"your-region"を適切なリージョンに置き換えて検証可能である。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0