0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

S3入門 — ファイルアップロードとアクセス制御の基本

0
Posted at

S3入門 — ファイルアップロードとアクセス制御の基本

はじめに

S3(Simple Storage Service)はAWSのオブジェクトストレージサービスです。

画像・PDF・CSV・ログなどあらゆるファイルを保存でき、URLでアクセスできます。Javaアプリで「ファイルをどこかに保存したい」という場面でよく使われます。


基本概念

用語 説明
バケット(Bucket) ファイルを入れる「箱」。名前はAWS全体でユニーク
オブジェクト(Object) バケット内のファイル1つ1つ

バケットの作成

  1. AWSコンソールでS3を開く
  2. 「バケットを作成」をクリック
  3. バケット名を入力(例: my-app-uploads-2024
  4. リージョンを選択(例: ap-northeast-1 = 東京)
  5. 「パブリックアクセスをすべてブロック」はデフォルトでONのまま
  6. 作成完了

アクセス制御の基本

方法 用途
バケットポリシー バケット単位でアクセスを制御
IAMポリシー ユーザー・ロール単位でアクセスを制御

公開ファイル(画像など)の設定

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-app-uploads-2024/*"
    }
  ]
}

JavaアプリからS3を操作する

依存関係(Maven)

<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>s3</artifactId>
  <version>2.25.0</version>
</dependency>

ファイルのアップロード

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.core.sync.RequestBody;

S3Client s3 = S3Client.builder()
    .region(Region.AP_NORTHEAST_1)
    .build();

PutObjectRequest request = PutObjectRequest.builder()
    .bucket("my-app-uploads-2024")
    .key("images/profile.jpg")
    .contentType("image/jpeg")
    .build();

s3.putObject(request, RequestBody.fromFile(Path.of("/tmp/profile.jpg")));

ファイルのダウンロード

GetObjectRequest request = GetObjectRequest.builder()
    .bucket("my-app-uploads-2024")
    .key("images/profile.jpg")
    .build();

ResponseBytes<GetObjectResponse> response = s3.getObjectAsBytes(request);
byte[] data = response.asByteArray();

Spring Bootとの組み合わせ

# application.properties
aws.s3.bucket=my-app-uploads-2024
aws.region=ap-northeast-1
@Value("${aws.s3.bucket}")
private String bucketName;

まとめ

やること 方法
バケット作成 AWSコンソールから作成
公開ファイルの設定 バケットポリシーで s3:GetObject を許可
アップロード AWS SDK の PutObjectRequest
ダウンロード AWS SDK の GetObjectRequest

JavaのFile I/OでローカルにファイルI/Oするのと同じ感覚で、クラウドのストレージを操作できます。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?