目的
AWS S3 Glacier内のボールド一覧をMongoDBに登録する。
やり方
ListVaultsCommandを実行する。引数の指定はない。
ソースコード
バックエンド
src/app/api/listVaults/route.ts
import { NextRequest, NextResponse } from "next/server";
import {
GlacierClient,
ListVaultsCommand,
DescribeVaultOutput,
} from "@aws-sdk/client-glacier";
import { MongoClient } from "mongodb";
// CORS設定
export const corsHeaders = {
"Access-Control-Allow-Origin": "http://localhost:3000",
"Access-Control-Allow-Methods": "POST",
"Access-Control-Allow-Headers": "Content-Type",
};
export async function POST(request: NextRequest): Promise<NextResponse> {
const client = new GlacierClient({});
let values: DescribeVaultOutput[] = [];
let input: { accountId: string; marker?: string } = {
accountId: "",
};
input["accountId"] = "-";
let command = new ListVaultsCommand(input);
let response = await client.send(command);
if (response.VaultList) {
values = values.concat(response.VaultList);
}
while (response.Marker) {
input["marker"] = response.Marker;
command = new ListVaultsCommand(input);
response = await client.send(command);
if (response.VaultList) {
values = values.concat(response.VaultList);
}
}
const dbclient = await MongoClient.connect(
"mongodb://127.0.0.1/27017/glacier"
);
const db = dbclient.db("glacier");
const userVaults = db.collection("userVaults");
userVaults.drop();
for (let vault of values) {
userVaults.insertOne(vault);
}
return NextResponse.json({}, { status: 200, headers: corsHeaders });
}
フロントエンド
src/app/page.tsx
"use client";
import axios from "axios";
import { Button, Stack, Paper } from "@mui/material";
export default function Home() {
const listVaults = async () => {
await axios.post("http://localhost:4000/api/listVaults");
};
return (
<main className="flex min-h-screen flex-col items-center justify-between p-24">
<div className="z-10 max-w-10xl w-full items-center justify-between font-mono text-sm lg:flex">
<Stack spacing={2}>
<Paper>
<Button
variant="outlined"
onClick={listVaults}
style={{
textTransform: "none",
}}
>
ボールド一覧を登録する
</Button>
</Paper>
</Stack>
</div>
</main>
);
}
実行結果
フロントエンド
ブラウザを開き、http://localhost:3000
にアクセスする。
[ボールド一覧を登録する]ボタンを押すと、MongoDBにボールド一覧が登録される。
MongoDB Compass
その3に続く。