2025年7月25日金曜日

AWS DynamoDBを.NET Core(.NET9)で読み込む

AWS DynamoDBが現在 本番DBとして稼働している

上記DBのレコードを出力して次期システムのDBにデータをロードしたい

nugetから  AWSSDK.DynamoDBv2 を インストールします

サンプルソースを実行したが

AWSに接続するにはアクセスキーIDとシークレットキーが必要 

基本的なことを知らなくて、接続出来なくて右往左往しました。

実行エラーを Copilot君に読ませたら、教えてくれました

 

アクセスキーIDとシークレットキーを設定するソース

using Amazon;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
using System.Threading.Tasks;
//using AWStoSQL.Models;  テーブルをクラス化
using System.Text;
using System.IO;
using System.Reflection;

//アクセスキーIDとシークレットキーをセット
string accessKeyId = "あくせすきー";
string secretAccessKey = "しーくれっときー";

// DynamoDBクライアントを初期化
var config = new AmazonDynamoDBConfig
{
    RegionEndpoint = Amazon.RegionEndpoint.APNortheast1 // 例: us-east-1
};
var client = new AmazonDynamoDBClient(accessKeyId, secretAccessKey, config);

// DynamoDBから全件取得
var context = new DynamoDBContext(client);
var items = await context.ScanAsync<テーブルクラス>(new List<ScanCondition>()).GetRemainingAsync();

// CSV出力処理
var csvPath = "d:\\temp\\output.csv";
var properties = typeof(テーブルクラス).GetProperties(BindingFlags.Public | BindingFlags.Instance);

// ヘッダー作成
var sb = new StringBuilder();
sb.AppendLine(string.Join(",", properties.Select(p => p.Name)));

// データ行作成
foreach (var item in items)
{
    var values = properties.Select(p => {
        var value = p.GetValue(item, null);
        return value != null ? value.ToString().Replace(",", " ") : "";
    });
    sb.AppendLine(string.Join(",", values));
}

// ファイル書き込み
File.WriteAllText(csvPath, sb.ToString(), Encoding.UTF8);

Console.WriteLine($"CSVファイルを出力しました: {csvPath}");


ここからテーブルクラス

 using Amazon;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;
using System.Threading.Tasks;
namespace AWStoSQL.Models;

[DynamoDBTable("AWSのテーブル名")]

internal class Z_Committee
{
        [DynamoDBHashKey("id")]
        public double id { get; set; }

        [DynamoDBRangeKey("bookId")]
        public string bookId { get; set; }

        public int user_Id { get; set; }
        public string title { get; set; }
        public string? created_at { get; set; }
        public string? updated_at { get; set; }
}


0 件のコメント:

コメントを投稿