プロジェクト

全般

プロフィール

Temp3

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/kb-how-it-works.html?utm_source=chatgpt.com
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/choosing-an-aws-vector-database-for-rag-use-cases/vector-db-comparison.html?utm_source=chatgpt.com
https://docs.aws.amazon.com/prescriptive-guidance/latest/retrieval-augmented-generation-options/choosing-option.html?utm_source=chatgpt.com

https://dev.classmethod.jp/articles/methods-to-select-target-document-in-kendra-search/

environment: production

your_command > /dev/null 2>&1 &

https://zenn.dev/solvio/articles/5675473b392b7f

SELECT * FROM your_table
INTO OUTFILE S3 's3://my-export-bucket/export_data.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
#!/bin/bash
set -e

# ---- 設定 ----
DLQ_URL="https://sqs.ap-northeast-1.amazonaws.com/123456789012/my-dead-letter-queue"
S3_BUCKET="my-dlq-backup-bucket"
MAX_MESSAGES=10  # 一度に取得する件数(最大10)
REGION="ap-northeast-1"

while true; do
  # 1. DLQからメッセージ取得
  MESSAGES=$(aws sqs receive-message \
    --queue-url "$DLQ_URL" \
    --max-number-of-messages $MAX_MESSAGES \
    --visibility-timeout 60 \
    --wait-time-seconds 2 \
    --region "$REGION" \
    --output json)

  # メッセージがなければ終了
  if [ -z "$(echo "$MESSAGES" | jq -r '.Messages | .[]?')" ]; then
    echo "DLQ is empty. Backup done."
    break
  fi

  # 2. S3に保存 & 3. DLQから削除
  echo "$MESSAGES" | jq -c '.Messages[]' | while read -r MSG; do
    BODY=$(echo "$MSG" | jq -r '.Body')
    RECEIPT=$(echo "$MSG" | jq -r '.ReceiptHandle')
    ID=$(echo "$MSG" | jq -r '.MessageId')

    FILE="/tmp/${ID}.json"
    echo "$MSG" > "$FILE"

    aws s3 cp "$FILE" "s3://${S3_BUCKET}/dlq-backup/${ID}.json" --region "$REGION"

    aws sqs delete-message \
      --queue-url "$DLQ_URL" \
      --receipt-handle "$RECEIPT" \
      --region "$REGION"

    echo "Saved and deleted: ${ID}"
  done
done
#!/bin/bash
set -e

# ---- 設定 ----
S3_BUCKET="my-dlq-backup-bucket"
ORIGINAL_QUEUE_URL="https://sqs.ap-northeast-1.amazonaws.com/123456789012/my-original-queue"
REGION="ap-northeast-1"

# すべてのバックアップファイルを処理
aws s3 ls "s3://${S3_BUCKET}/dlq-backup/" --region "$REGION" | while read -r line; do
  FILE=$(echo $line | awk '{print $4}')
  echo "Processing $FILE"

  # 1. ダウンロード
  aws s3 cp "s3://${S3_BUCKET}/dlq-backup/${FILE}" "/tmp/${FILE}" --region "$REGION"

  # 2. メッセージ抽出
  BODY=$(jq -r '.Body' "/tmp/${FILE}")

  # FIFOキューの場合は以下も考慮
  # GROUP_ID=$(jq -r '.Attributes.MessageGroupId // "default-group"' "/tmp/${FILE}")

  # 3. 元キューへ送信
  aws sqs send-message \
    --queue-url "$ORIGINAL_QUEUE_URL" \
    --message-body "$BODY" \
    --region "$REGION"

  echo "Re-sent: $FILE"
done
#!/bin/bash
set -euo pipefail

DLQ_URL="https://sqs.ap-northeast-1.amazonaws.com/123456789012/my-dead-letter-queue"
S3_BUCKET="my-dlq-backup-bucket"
REGION="ap-northeast-1"
MAX_MESSAGES=10

# 一時ファイル(全メッセージを格納)
TMP_FILE="/tmp/dlq_all.json"
echo "[]" > "$TMP_FILE"

while true; do
  # 1. DLQからメッセージ取得
  MESSAGES=$(aws sqs receive-message \
    --queue-url "$DLQ_URL" \
    --max-number-of-messages $MAX_MESSAGES \
    --visibility-timeout 60 \
    --wait-time-seconds 2 \
    --region "$REGION" \
    --output json)

  # メッセージがなければ終了
  if [ -z "$(echo "$MESSAGES" | jq -r '.Messages | .[]?')" ]; then
    echo "DLQ is empty."
    break
  fi

  # 2. 一時ファイルにマージ(JSON配列結合)
  jq ". + $(echo "$MESSAGES" | jq '.Messages')" "$TMP_FILE" > "${TMP_FILE}.new"
  mv "${TMP_FILE}.new" "$TMP_FILE"

  # 3. DLQから削除
  echo "$MESSAGES" | jq -c '.Messages[]' | while read -r MSG; do
    RECEIPT=$(echo "$MSG" | jq -r '.ReceiptHandle')
    aws sqs delete-message \
      --queue-url "$DLQ_URL" \
      --receipt-handle "$RECEIPT" \
      --region "$REGION"
  done
done

# 4. まとめて S3 に保存
FINAL_FILE="s3://${S3_BUCKET}/dlq-backup/dlq_all.json"
aws s3 cp "$TMP_FILE" "$FINAL_FILE" --region "$REGION"
echo "Saved all messages to $FINAL_FILE"
jq -c '.[]' dlq_all.json | while read -r MSG; do
  BODY=$(echo "$MSG" | jq -r '.Body')

  aws sqs send-message \
    --queue-url "$ORIGINAL_QUEUE_URL" \
    --message-body "$BODY" \
    --region "$REGION"
done
import React, { useEffect, useState } from "react";
import { useMsal } from "@azure/msal-react";
import { loginRequest } from "./msalConfig";

interface Group {
  id: string;
  displayName: string;
}

const GroupList: React.FC = () => {
  const { instance, accounts } = useMsal();
  const [groups, setGroups] = useState<Group[]>([]);

  useEffect(() => {
    const fetchGroups = async () => {
      if (accounts.length === 0) return;

      try {
        // アクセストークン取得
        const response = await instance.acquireTokenSilent({
          ...loginRequest,
          account: accounts[0],
        });

        const accessToken = response.accessToken;

        // Graph API 呼び出し
        const res = await fetch("https://graph.microsoft.com/v1.0/me/memberOf", {
          headers: {
            Authorization: `Bearer ${accessToken}`,
          },
        });

        const data = await res.json();

        // グループだけを抽出 (memberOfにはRoleも含まれる可能性がある)
        const groupList: Group[] = data.value
          .filter((item: any) => item["@odata.type"] === "#microsoft.graph.group")
          .map((g: any) => ({
            id: g.id,
            displayName: g.displayName,
          }));

        setGroups(groupList);
      } catch (err) {
        console.error("Error fetching groups", err);
      }
    };

    fetchGroups();
  }, [accounts, instance]);

  return (
    <div>
      <h2 className="text-xl font-bold mb-2">所属グループ</h2>
      <ul className="list-disc pl-6">
        {groups.map((group) => (
          <li key={group.id}>{group.displayName}</li>
        ))}
      </ul>
    </div>
  );
};

export default GroupList;