.NET용 AWS SDK (aws-sdk-net)로 R2 사용하기
.NET용 AWS SDK v3(AWSSDK.S3)로 R2를 사용하는 예시예요. 클라이언트를 설정하고 버킷·객체를 나열·업로드·조회하며 사전 서명 URL을 생성하는 방법을 다뤄요.
출처: 문서
본문
이 예시는 aws-sdk-net ↗︎ 패키지 3버전을 사용해요. S3 서비스 클라이언트를 만들 때 R2 구성 자격 증명을 반드시 전달해야 해요.
클라이언트 설정 (Client setup)
이 예시에서는 IAmazonS3 초기화에 자격 증명을 명시적으로 전달해요. 원한다면 공유 AWS 자격 증명 파일이나 SDK 스토어를 다른 AWS SDK와 함께 사용해도 돼요. 자세한 내용은 AWS 자격 증명 구성 ↗︎을 참고하세요.
private static IAmazonS3 s3Client;
public static void Main(string[] args)
{
// Retrieve your S3 API credentials for your R2 bucket via API tokens (see: https://developers.cloudflare.com/r2/api/tokens)
var accessKey = "<ACCESS_KEY_ID>";
var secretKey = "<SECRET_ACCESS_KEY>";
var credentials = new BasicAWSCredentials(accessKey, secretKey);
s3Client = new AmazonS3Client(credentials, new AmazonS3Config
{
// Provide your Cloudflare account ID
ServiceURL = "https://<ACCOUNT_ID>.r2.cloudflarestorage.com",
});
}
버킷과 객체 나열 (List buckets and objects)
ListBucketsAsync ↗︎와 ListObjectsAsync ↗︎ 메서드를 사용해서 계정의 버킷과 각 버킷의 내용을 각각 나열할 수 있어요.
static async Task ListBuckets()
{
var response = await s3Client.ListBucketsAsync();
foreach (var s3Bucket in response.Buckets)
{
Console.WriteLine("{0}", s3Bucket.BucketName);
}
}
sdk-example
my-bucket
static async Task ListObjectsV2()
{
var request = new ListObjectsV2Request
{
BucketName = "my-bucket"
};
var response = await s3Client.ListObjectsV2Async(request);
foreach (var s3Object in response.S3Objects)
{
Console.WriteLine("{0}", s3Object.Key);
}
}
dog.png
cat.png
객체 업로드와 조회 (Upload and retrieve objects)
PutObjectAsync ↗︎와 GetObjectAsync ↗︎ 메서드를 사용해서 R2 버킷에 객체를 업로드하고 다운로드할 수 있어요.
static async Task PutObject()
{
var request = new PutObjectRequest
{
FilePath = @"/path/file.txt",
BucketName = "my-bucket",
DisablePayloadSigning = true,
DisableDefaultChecksumValidation = true
};
var response = await s3Client.PutObjectAsync(request);
Console.WriteLine("ETag: {0}", response.ETag);
}
ETag: "186a71ee365d9686c3b98b6976e1f196"
static async Task GetObject()
{
var bucket = "my-bucket";
var key = "file.txt";
var response = await s3Client.GetObjectAsync(bucket, key);
Console.WriteLine("ETag: {0}", response.ETag);
}
ETag: "186a71ee365d9686c3b98b6976e1f196"
사전 서명 URL 생성 (Generate presigned URLs)
GetPreSignedURL ↗︎ 메서드를 사용하면 미리 서명해 두어 특정 작업에 대한 임시 접근 권한을 부여할 수 있어요. 여기서는 sdk-example/file.txt에 대한 PutObject 요청을 사전 서명하고 있어요.
static string? GeneratePresignedUrl()
{
AWSConfigsS3.UseSignatureVersion4 = true;
var presign = new GetPreSignedUrlRequest
{
BucketName = "my-bucket",
Key = "file.txt",
Verb = HttpVerb.GET,
Expires = DateTime.Now.AddDays(7),
};
var presignedUrl = s3Client.GetPreSignedURL(presign);
Console.WriteLine(presignedUrl);
return presignedUrl;
}
https://<ACCOUNT_ID>.r2.cloudflarestorage.com/my-bucket/file.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<credential>&X-Amz-Date=<timestamp>&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature>