SDK リファレンス
FPT Object Storage は AWS S3 API と互換性があるため、アプリケーションから公式の AWS SDK を使用してデータを読み書きできます。以下の各セクションでは、SDK のインストール、クライアントの作成、bucket と object の基本操作の方法を説明します。
コードを書かずにデータを管理する場合は、代わりに S3 クライアントを使用してください。詳しくは、S3 クライアントで接続するを参照してください。
開始する前に
すべての例で次のプレースホルダーを使用しています。Portal で確認した実際の値に置き換えてください。詳しくは、Access Key を管理するを参照してください。
| プレースホルダー | 値 |
|---|---|
YOUR_ACCESS_KEY | Access Key。 |
YOUR_SECRET_KEY | Secret Key。 |
YOUR_ENDPOINT | Region の endpoint。https:// を含む完全な URL で指定します(例: https://s3-hcm04.fptcloud.com)。 |
YOUR_REGION | bucket の Region。 |
共有またはデプロイするソースコードに Admin Access Key をハードコードしないでください。アプリケーションに必要な権限だけを持つ SubUser または IAM User のキーを使用し、環境変数やシークレットストアから読み込むようにしてください。
2025 年以降にリリースされた SDK バージョンでは、アップロードリクエストにデータ整合性のチェックサムがデフォルトで追加されます。XAmzContentSHA256Mismatch や MissingContentLength などのエラーでアップロードが失敗する場合は、SDK のリクエストチェックサム計算オプションを when_required に設定してください。詳しくは、トラブルシューティングを参照してください。
Python
Python 用の公式 AWS SDK である boto3 を使用します。
インストール
pip install boto3
クライアントの初期化
import boto3
s3_endpoint = "YOUR_ENDPOINT"
s3_access_key_id = "YOUR_ACCESS_KEY"
s3_secret_access_key = "YOUR_SECRET_KEY"
s3client = boto3.client(
"s3",
endpoint_url=s3_endpoint,
aws_access_key_id=s3_access_key_id,
aws_secret_access_key=s3_secret_access_key,
)
s3 = boto3.resource(
"s3",
endpoint_url=s3_endpoint,
aws_access_key_id=s3_access_key_id,
aws_secret_access_key=s3_secret_access_key,
)
基本的な例
bucket_name = "my-unique-bucket-name"
object_key = "my-object-key"
s3client.create_bucket(Bucket=bucket_name)
s3client.put_object(Bucket=bucket_name, Key=object_key, Body="Hello, world!")
response = s3client.get_object(Bucket=bucket_name, Key=object_key)
print(response["Body"].read().decode("utf-8"))
s3client.delete_object(Bucket=bucket_name, Key=object_key)
s3client.delete_bucket(Bucket=bucket_name)
詳細なドキュメント: boto3 のドキュメント
Java
AWS SDK for Java 2.x を使用します。
インストール
Maven プロジェクトの pom.xml ファイルに依存関係を追加します。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.17.42</version> <!-- Use the latest 2.x version -->
</dependency>
クライアントの初期化
String accessKey = "YOUR_ACCESS_KEY";
String secretKey = "YOUR_SECRET_KEY";
String endpoint = "YOUR_ENDPOINT";
String region = "YOUR_REGION";
S3Client s3Client = S3Client.builder()
.endpointOverride(URI.create(endpoint))
.region(Region.of(region))
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretKey)))
.serviceConfiguration(S3Configuration.builder().pathStyleAccessEnabled(true).build())
.build();
基本的な例
import java.net.URI;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.S3Configuration;
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
import software.amazon.awssdk.services.s3.model.DeleteBucketRequest;
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.S3Object;
public class S3Example {
public static void main(String[] args) {
String bucketName = "my-unique-bucket-name";
String objectKey = "my-object-key";
S3Client s3Client = S3Client.builder()
.endpointOverride(URI.create("YOUR_ENDPOINT"))
.region(Region.of("YOUR_REGION"))
.credentialsProvider(StaticCredentialsProvider.create(
AwsBasicCredentials.create("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY")))
.serviceConfiguration(S3Configuration.builder().pathStyleAccessEnabled(true).build())
.build();
// Create a bucket
s3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());
// Upload an object
s3Client.putObject(
PutObjectRequest.builder().bucket(bucketName).key(objectKey).build(),
RequestBody.fromString("Hello, world!"));
// List objects
for (S3Object object : s3Client.listObjectsV2(
ListObjectsV2Request.builder().bucket(bucketName).build()).contents()) {
System.out.println("Object Key: " + object.key());
}
// Read an object
String content = s3Client.getObjectAsBytes(
GetObjectRequest.builder().bucket(bucketName).key(objectKey).build()).asUtf8String();
System.out.println(content);
// Delete the object, then the empty bucket
s3Client.deleteObject(DeleteObjectRequest.builder().bucket(bucketName).key(objectKey).build());
s3Client.deleteBucket(DeleteBucketRequest.builder().bucket(bucketName).build());
s3Client.close();
}
}
詳細なドキュメント: AWS SDK for Java
C#
AWS SDK for .NET を使用します。
インストール
dotnet add package AWSSDK.S3
クライアントの初期化
var config = new AmazonS3Config
{
ServiceURL = "YOUR_ENDPOINT",
ForcePathStyle = true
};
var client = new AmazonS3Client("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", config);
基本的な例
using System;
using System.IO;
using System.Threading.Tasks;
using Amazon.S3;
using Amazon.S3.Model;
class Program
{
static async Task Main()
{
var config = new AmazonS3Config
{
ServiceURL = "YOUR_ENDPOINT",
ForcePathStyle = true
};
using var client = new AmazonS3Client("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", config);
string bucketName = "my-unique-bucket-name";
string objectKey = "my-object-key";
// Create a bucket
await client.PutBucketAsync(new PutBucketRequest { BucketName = bucketName });
// Upload an object
await client.PutObjectAsync(new PutObjectRequest
{
BucketName = bucketName,
Key = objectKey,
ContentBody = "Hello, world!"
});
// Read an object
using (GetObjectResponse response = await client.GetObjectAsync(bucketName, objectKey))
using (var reader = new StreamReader(response.ResponseStream))
{
Console.WriteLine(await reader.ReadToEndAsync());
}
// Delete the object, then the empty bucket
await client.DeleteObjectAsync(bucketName, objectKey);
await client.DeleteBucketAsync(bucketName);
}
}
詳細なドキュメント: AWS SDK for .NET
PHP
AWS SDK for PHP を使用します。
インストール
composer require aws/aws-sdk-php
クライアントの初期化
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'YOUR_REGION',
'endpoint' => 'YOUR_ENDPOINT',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'YOUR_ACCESS_KEY',
'secret' => 'YOUR_SECRET_KEY',
],
]);
基本的な例
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$s3Client = new S3Client([
'version' => 'latest',
'region' => 'YOUR_REGION',
'endpoint' => 'YOUR_ENDPOINT',
'use_path_style_endpoint' => true,
'credentials' => [
'key' => 'YOUR_ACCESS_KEY',
'secret' => 'YOUR_SECRET_KEY',
],
]);
$bucketName = 'my-unique-bucket-name';
$objectKey = 'my-object-key';
// Create a bucket
$s3Client->createBucket(['Bucket' => $bucketName]);
// Upload an object
$s3Client->putObject([
'Bucket' => $bucketName,
'Key' => $objectKey,
'Body' => 'Hello, world!',
]);
// Read an object
$result = $s3Client->getObject(['Bucket' => $bucketName, 'Key' => $objectKey]);
echo $result['Body']->getContents();
// Delete the object, then the empty bucket
$s3Client->deleteObject(['Bucket' => $bucketName, 'Key' => $objectKey]);
$s3Client->deleteBucket(['Bucket' => $bucketName]);
詳細なドキュメント: AWS SDK for PHP
ブラウザーでの JavaScript
ブラウザーでは、Access Key を使って S3 クライアントを作成しないでください。ページを開いた誰でもキーを読み取れてしまいます。代わりに、バックエンドで有効期間の短い presigned URL を生成し、その URL を使ってブラウザーから直接アップロードまたはダウンロードします。ウェブサイトのオリジンを許可するように Bucket CORS を設定してください。
インストール
npm install @aws-sdk/client-s3 @aws-sdk/s3-request-presigner
クライアントの初期化
// Backend (Node.js, ES module)
import { S3Client } from '@aws-sdk/client-s3';
const s3 = new S3Client({
region: 'YOUR_REGION',
endpoint: 'YOUR_ENDPOINT',
forcePathStyle: true,
credentials: {
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_KEY',
},
});
基本的な例
// Backend: create a presigned upload URL that is valid for 15 minutes
import { PutObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
const uploadUrl = await getSignedUrl(
s3,
new PutObjectCommand({ Bucket: 'my-unique-bucket-name', Key: 'uploads/photo.jpg' }),
{ expiresIn: 900 },
);
// Browser: upload the selected file with the presigned URL
const file = document.querySelector('input[type="file"]').files[0];
await fetch(uploadUrl, { method: 'PUT', body: file });
詳細なドキュメント: AWS SDK for JavaScript v3
Node.js
AWS SDK for JavaScript v3 を使用します。バージョン 2(aws-sdk)はサポートが終了しています。
インストール
npm install @aws-sdk/client-s3
クライアントの初期化
const { S3Client } = require('@aws-sdk/client-s3');
const s3 = new S3Client({
region: 'YOUR_REGION',
endpoint: 'YOUR_ENDPOINT',
forcePathStyle: true,
credentials: {
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_KEY',
},
});
基本的な例
const {
S3Client,
CreateBucketCommand,
PutObjectCommand,
GetObjectCommand,
DeleteObjectCommand,
DeleteBucketCommand,
} = require('@aws-sdk/client-s3');
const s3 = new S3Client({
region: 'YOUR_REGION',
endpoint: 'YOUR_ENDPOINT',
forcePathStyle: true,
credentials: {
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_KEY',
},
});
async function main() {
const Bucket = 'my-unique-bucket-name';
const Key = 'my-object-key';
// Create a bucket
await s3.send(new CreateBucketCommand({ Bucket }));
// Upload an object
await s3.send(new PutObjectCommand({ Bucket, Key, Body: 'Hello, world!' }));
// Read an object
const response = await s3.send(new GetObjectCommand({ Bucket, Key }));
console.log('Object content:', await response.Body.transformToString());
// Delete the object, then the empty bucket
await s3.send(new DeleteObjectCommand({ Bucket, Key }));
await s3.send(new DeleteBucketCommand({ Bucket }));
}
main().catch(console.error);
詳細なドキュメント: AWS SDK for JavaScript v3
Go
AWS SDK for Go v2 を使用します。バージョン 1(aws-sdk-go)はサポートが終了しています。
インストール
go get github.com/aws/aws-sdk-go-v2/aws github.com/aws/aws-sdk-go-v2/credentials github.com/aws/aws-sdk-go-v2/service/s3
クライアントの初期化
client := s3.New(s3.Options{
Region: "YOUR_REGION",
BaseEndpoint: aws.String("YOUR_ENDPOINT"),
UsePathStyle: true,
Credentials: credentials.NewStaticCredentialsProvider("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", ""),
})
基本的な例
package main
import (
"context"
"io"
"log"
"strings"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
func main() {
ctx := context.Background()
client := s3.New(s3.Options{
Region: "YOUR_REGION",
BaseEndpoint: aws.String("YOUR_ENDPOINT"),
UsePathStyle: true,
Credentials: credentials.NewStaticCredentialsProvider("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", ""),
})
bucketName := "my-unique-bucket-name"
objectKey := "my-object-key"
// Create a bucket
if _, err := client.CreateBucket(ctx, &s3.CreateBucketInput{Bucket: aws.String(bucketName)}); err != nil {
log.Fatal(err)
}
// Upload an object
if _, err := client.PutObject(ctx, &s3.PutObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
Body: strings.NewReader("Hello, world!"),
}); err != nil {
log.Fatal(err)
}
// Read an object
out, err := client.GetObject(ctx, &s3.GetObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
})
if err != nil {
log.Fatal(err)
}
data, err := io.ReadAll(out.Body)
out.Body.Close()
if err != nil {
log.Fatal(err)
}
log.Println("Object content:", string(data))
// Delete the object, then the empty bucket
if _, err := client.DeleteObject(ctx, &s3.DeleteObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
}); err != nil {
log.Fatal(err)
}
if _, err := client.DeleteBucket(ctx, &s3.DeleteBucketInput{Bucket: aws.String(bucketName)}); err != nil {
log.Fatal(err)
}
}
詳細なドキュメント: AWS SDK for Go v2