aegida-console / scripts / ensure-bucket.mjs
ensure-bucket.mjs
Raw
import { CreateBucketCommand, HeadBucketCommand, S3Client } from "@aws-sdk/client-s3";

const required = (name) => {
  const value = process.env[name];
  if (!value) throw new Error(`Missing required environment variable: ${name}`);
  return value;
};
const client = new S3Client({
  endpoint: required("S3_ENDPOINT"),
  region: process.env.S3_REGION ?? "us-east-1",
  forcePathStyle: process.env.S3_FORCE_PATH_STYLE === "true",
  credentials: { accessKeyId: required("S3_ACCESS_KEY_ID"), secretAccessKey: required("S3_SECRET_ACCESS_KEY") },
});
const Bucket = required("S3_BUCKET");

for (let attempt = 1; attempt <= 20; attempt += 1) {
  try {
    await client.send(new HeadBucketCommand({ Bucket }));
    break;
  } catch {
    try {
      await client.send(new CreateBucketCommand({ Bucket }));
      break;
    } catch (error) {
      if (attempt === 20) throw error;
      await new Promise((resolve) => setTimeout(resolve, 1_000));
    }
  }
}