Skip to content

Latest commit

 

History

History
275 lines (192 loc) · 7.98 KB

File metadata and controls

275 lines (192 loc) · 7.98 KB

S3ストレージ設定手順書

概要

LabCodeシステムでAWS S3をストレージバックエンドとして使用するための設定手順を説明します。

前提条件

  • AWSアカウントを持っていること
  • AWS Management Consoleへのアクセス権があること
  • Docker/Docker Composeがインストールされていること

1. AWS S3バケットの作成

1.1 AWSコンソールにログイン

  1. AWS Management Console にアクセス
  2. ログイン後、サービス検索で「S3」を検索してS3コンソールを開く

1.2 バケットの作成

  1. 「バケットを作成」ボタンをクリック

  2. 一般的な設定

    • バケット名: labcode-dev-artifacts(任意の名前に変更可)
    • AWSリージョン: アジアパシフィック (東京) ap-northeast-1(推奨)
  3. オブジェクト所有者

    • 「ACL無効(推奨)」を選択
  4. このバケットのブロックパブリックアクセス設定

    • 「パブリックアクセスをすべてブロック」にチェック(推奨)
  5. バケットのバージョニング

    • 「無効にする」(任意)
  6. デフォルトの暗号化

    • 「Amazon S3マネージドキー (SSE-S3)」を選択
  7. 「バケットを作成」をクリック


2. IAMユーザーの作成とアクセスキー発行

2.1 IAMコンソールにアクセス

  1. AWSコンソールで「IAM」を検索してIAMコンソールを開く
  2. 左メニューから「ユーザー」を選択
  3. 「ユーザーを作成」をクリック

2.2 ユーザーの作成

  1. ユーザー詳細

    • ユーザー名: labcode-s3-user(任意)
    • 「次へ」をクリック
  2. 許可を設定

    • 「ポリシーを直接アタッチする」を選択
    • 「ポリシーを作成」をクリック(新しいタブが開く)

2.3 カスタムポリシーの作成

  1. 「JSON」タブを選択
  2. 以下のポリシーを貼り付け(バケット名を適宜変更):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "LabCodeS3Access",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::labcode-dev-artifacts",
                "arn:aws:s3:::labcode-dev-artifacts/*"
            ]
        }
    ]
}
  1. 「次へ」をクリック
  2. ポリシー名: LabCodeS3Policy
  3. 「ポリシーを作成」をクリック

2.4 ポリシーをユーザーにアタッチ

  1. 元のユーザー作成画面に戻る
  2. 作成したLabCodeS3Policyを検索して選択
  3. 「次へ」→「ユーザーを作成」をクリック

2.5 アクセスキーの発行

  1. 作成したユーザー(labcode-s3-user)をクリック
  2. 「セキュリティ認証情報」タブを選択
  3. 「アクセスキーを作成」をクリック
  4. ユースケース: 「コマンドラインインターフェイス (CLI)」を選択
  5. 確認チェックボックスにチェックを入れて「次へ」
  6. 「アクセスキーを作成」をクリック
  7. 重要: アクセスキーIDシークレットアクセスキーをメモ(この画面を閉じると二度と表示されない)

3. LabCode環境設定

3.1 環境変数ファイルの作成

labcode-test-environment/labcode-log-server/.env を作成または編集:

# S3ストレージ設定
AWS_ACCESS_KEY_ID=<取得したアクセスキーID>
AWS_SECRET_ACCESS_KEY=<取得したシークレットアクセスキー>
AWS_DEFAULT_REGION=ap-northeast-1
S3_BUCKET_NAME=labcode-dev-artifacts

3.2 設定例

AWS_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXXXXXXX
AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AWS_DEFAULT_REGION=ap-northeast-1
S3_BUCKET_NAME=labcode-dev-artifacts

3.3 環境変数一覧

環境変数 説明 必須 デフォルト値
AWS_ACCESS_KEY_ID IAMアクセスキーID Yes -
AWS_SECRET_ACCESS_KEY IAMシークレットアクセスキー Yes -
AWS_DEFAULT_REGION AWSリージョン No ap-northeast-1
S3_BUCKET_NAME S3バケット名 No labcode-dev-artifacts
S3_ENDPOINT_URL S3互換エンドポイント(MinIO等) No -
STORAGE_MODE ストレージモード (s3 or local) No s3

4. 動作確認

4.1 Dockerコンテナの起動

cd labcode-test-environment
docker compose up -d

4.2 S3接続テスト

# コンテナ内でPythonシェルを起動
docker exec -it labcode_log_server python

# 以下のコードを実行
>>> from services.storage_service import get_storage
>>> storage = get_storage()
>>> print(storage.list_objects("runs/"))
# 空リストまたはオブジェクト一覧が表示されればOK

4.3 API経由での確認

# ストレージ情報取得(Run ID 1の場合)
curl http://localhost:8000/api/v2/storage/info/1

5. ローカルストレージモード(オプション)

S3を使用せずにローカルストレージのみで動作させる場合:

5.1 環境変数ファイル(.env.local)

# ローカルモード設定
STORAGE_MODE=local
LOCAL_STORAGE_PATH=/data/storage

# ダミーS3設定(ローカルモードでは使用されない)
AWS_ACCESS_KEY_ID=dummy
AWS_SECRET_ACCESS_KEY=dummy
AWS_DEFAULT_REGION=ap-northeast-1
S3_BUCKET_NAME=labcode-dev-artifacts

5.2 Docker Compose起動

docker compose -f compose.local.yaml up -d

6. トラブルシューティング

6.1 「AccessDenied」エラー

原因: IAMポリシーが正しく設定されていない

解決策:

  1. IAMユーザーに正しいポリシーがアタッチされているか確認
  2. ポリシーのリソースARNがバケット名と一致しているか確認
  3. バケットのブロックパブリックアクセス設定を確認

6.2 「NoSuchBucket」エラー

原因: バケットが存在しない、またはリージョンが異なる

解決策:

  1. バケット名のスペルミスを確認
  2. AWS_DEFAULT_REGIONがバケットのリージョンと一致しているか確認

6.3 「InvalidAccessKeyId」エラー

原因: アクセスキーIDが無効

解決策:

  1. .envファイルのアクセスキーIDを確認
  2. IAMコンソールでアクセスキーが有効か確認
  3. アクセスキーを再発行

6.4 接続タイムアウト

原因: ネットワーク接続の問題

解決策:

  1. インターネット接続を確認
  2. プロキシ設定を確認(企業ネットワークの場合)
  3. AWS VPCエンドポイントの設定を確認(VPC内の場合)

7. セキュリティ推奨事項

  1. アクセスキーの定期ローテーション

    • 90日ごとにアクセスキーを更新することを推奨
  2. 最小権限の原則

    • 必要最小限のS3操作権限のみを付与
  3. 環境変数ファイルの保護

    • .envファイルを.gitignoreに追加
    • 本番環境ではAWS Secrets Managerの使用を検討
  4. バケットポリシーの確認

    • パブリックアクセスを無効化
    • 必要に応じてバケットポリシーでIPアドレス制限を追加

8. 参考リンク


関連ドキュメント