投稿

2025の投稿を表示しています

Hyper-Vで一気に複数VMを作成する

9月の WindowsUpdate というテロ行為にあって RAID1 組んでいたOSディスクが完全に認識されなくなり、おまけに別ドライブにしていたSSDまで別のPCでも認識できないという目にあいました。 CDKTF で作成していた3クラウドのバックエンドの追加作業も吹っ飛んで、データ復旧業者にまで頼んだんですが、データは取り戻せませんでした。 Git にあげときゃよかったという後悔しかなくその後の復旧とかにもかなり時間がかかっています。 幸い NAS に昨年の12月分のバックアップがあって、そっから更新されたデータは吹っ飛んで泣きそうになりながらもなんとか使える状態には戻しました。 RAID1は解除し、 1TBのSSD 4基購入してきて、NASのディスクを WDの6TB のものに切り替えて復旧作業もようやく落ち着いてきたかなという感じです。 そんでCDKで作業するにあたって、 Hyper-V の復旧作業が必要になったんですが、手動で20台近くのVMを作るなんて狂気の沙汰的なことはやりたくないので、 PowerShell で一撃で作成するスクリプト準備しました。 外部と接続できるスィッチも作成する感じにしてます。ベタ書き嫌だったので外部ファイルから読み込ませて動くようにしています。自分はヨワヨワなので Gemini 君に書いてもらいました。ほんとに自分なんてもういらないなと思うようになってきましたよ。ええ ◆スクリプト本体 param( [Parameter(Mandatory=$true)] [string]$ConfigFilePath ) # ============================================ # メインスクリプト:Hyper-V 仮想マシン一括作成 # 設定ファイルは $ConfigFilePath で指定されます。 # ============================================ # 設定ファイル名 (引数から取得) $ConfigFileName = $ConfigFilePath # ============================================ # 設定ファイルの読み込み # ===============================...

マルチクラウドでVPC同士接続してみるその⑤(AWS,Azure,GoogleCloudをcdktfで構築)【最終回】

  前回 で一応マルチクラウドVPNを terraform で構築するところまではできました。 そこまででいいかと思っていましたが、少し前に興味をもった CDK for Terraform の入門がてら、マルチクラウドVPNでVPC接続を試してみました。生成AIを駆使して何とか完成させてます。 最初は ChatGPT 、 Claude のfree版、んで Cline にやらせてたんですがClineが結構な頻度でソースコード壊してくれるので後半は Gemini とか DeepSeek 、ChatGPTとかと併用でやってく感じになってました。 Clineは調子いい時は調子いいんですけどね。勝手に修正かけないようにPlanで止めといて、質問しつつ、GeminiとかChatGPTで補完しながらって感じで進めました。まぁほとんど何もしてないんですけどね。かなり時間かかってしまいました。それでもイケてないものしか作れていないので 生成AI の力を借りてもイケてない人間はイケてないということが分かりました。あと嘘をつくので結局、 ここのサイト を頼ってパラメータ確認したりしてました。 後は AzureのVPNgateway が構築まで1時間弱かかるので、テストが全然進まず時間ばかり溶けます。 AWS と GoogleCloud だけだと10分かからないんですけどね、 Azure 入ると一気に1時間コース、そしてAzureがトラブルばかりしか起こらないのでかなりAzureが嫌いになりました。CDKTF完成させるまでにAWS以外はコストもかなりかかりました。 ◆シリーズ 1.AWSとGCP接続 2.AWSとAzure接続 3.GCPとAzure接続 4.AWSとGCPとAzure接続 5.CDK for terrformで再構成 ◆作成したCDKTF https://github.com/Otazoman/cdktf_multicloud_backend/tree/main/multicloudvpn ◆参考サイト ・CDKTF https://developer.hashicorp.com/terraform/cdktf https://zenn.dev/yutaro1985/articles/cdktf-for-usual-terraform-users https://...

SAM-CLIでServelessのDynamoDB+Lambda+APIGatewayやってみた

ちょっと Lambda と DynamoDB でサクッと CRUD のAPIが欲しかったので SAM を試してみた。 コード自体は生成AIにお任せ状態、ローカルでテストできるようにしたかったのと本番とローカルでDynamoDBの向き先を変える必要があったので、そのあたりをゴニョゴニョとして動かせるようにしました。 あくまでもサンプルなので認証とかバリデーションはきちんとできてないのでダメなやつなのですが、まぁまぁ便利ねということは分かった。 あとはS3にCSV上げたらDynamoDBにバッチでデータ投入する様なこととか、CloudFront+S3構成とかできるのかとか色々と調べてみたい。 まぁこれも色々な人がやってるのでいまさら感はあるし、先人のやつの方がしっかりしていて有益だと思うので、そちらの記事をあたっていただいた方がいいけどね。 ひとまずダメダメな今回のコードもさらしときます。 https://github.com/Otazoman/aws-sam-sample/tree/main ほぼ生成AIにやらせてて自分ではコードは一部しか書いていないというダメさっぷりを発揮しています。これベースにバリデーションとか追加していけば一々、組まなくて済むかなぁ。 ◆参考サイト ・SAM-CLI https://qiita.com/free-honda/items/d1ee8a7507a2e9c9527f https://iret.media/76096 https://www.cyberowl.co.jp/blog/technology/1318 ・複数Lambda https://zenn.dev/na7na/articles/e0be947140fd95 https://kazuhira-r.hatenablog.com/entry/2022/01/02/225530 https://qiita.com/nahiro_tus/items/2095d85ac11f306a79f8 https://qiita.com/charon/items/050942e54bbc5c9d44f1 https://uniforce.co.jp/media/blog/dvi11v9g6s/ ・APIGateway https://tech.fusic.co.jp/posts/2021-1...

EC2を起動したときにRoute53に登録されているAレコードを更新する

既にいろんなとこでやってる人がいる小ネタっす。  EC2で開発環境を作成していて、IPアドレスで接続するのが面倒くさいのでRoute53にIPアドレスを登録した。 まぁそれはそれで便利にはなったもののIP変わる都度、手動でRoute53にIPを設定するのも煩わしいので、EC2インスタンスの電源が入る都度、自動でRoute53を更新する様にした。 ◆コマンド # スクリプトのディレクトリを作成 mkdir init # ここからEOF_SCRIPTまでがroute53.shの内容になります # バッククォート (`) は `\` でエスケープしてください。 # `$` は自動で展開されるのでエスケープ不要です。 cat << 'EOF_SCRIPT' > init/route53.sh #!/bin/bash set -euxo pipefail DOMAIN_NAME="yourdomain.com" SUB_NAME="yoursubname" HOSTED_ZONE_ID="YOUR_HOSTED_ZONE_ID" # IMDSv2 (Instance Metadata Service Version 2) のトークンを取得 TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") # トークンが取得できたか確認 if [ -z "$TOKEN" ]; then echo "エラー: IMDSv2トークンを取得できませんでした。インスタンスのIMDS設定を確認してください。" >&2 exit 1 fi # 取得したトークンを使用してパブリックIPアドレスを取得 # X-aws-ec2-metadata-token ヘッダーにトークンを含める必要があります IP_ADDRESS=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s ht...

AWSの開発環境詰め合わせ用Shellスクリプト

 ちょっと SAM-CLI さわる必要が出てきてAWSのEC2に開発環境を構築するShellを準備してみた。ローカルのVMで直接開発するケースはないけど、もしかしたら再利用するかもしれないので、Shellにしておいてまた使いまわせるようにしておこうと思いまして準備した次第です。 ◆スクリプト本体 #!/bin/bash # このスクリプトは、一般的な開発ツール(GCC、G++、Make、NVM、rbenv、pyenv、AWS CLI、Docker、SAM CLI、CDK)をインストールします。 # バージョンは以下の変数を設定することで変更できます。 # 変数の定義 nvm_ver="0.40.3" # NVM (Node Version Manager) のバージョン ruby_ver="3.4.4" # Ruby のバージョン (rbenvでインストール) python_ver="3.13.5" # Python のバージョン (pyenvでインストール) echo "--- 開発ツールのインストールを開始します ---" # 1. 必須パッケージのインストール echo "1. 必須パッケージのインストール..." sudo apt-get update sudo apt-get install -y \ gcc \ g++ \ make \ build-essential \ libssl-dev \ zlib1g-dev \ openssl \ libz-dev \ libffi-dev \ libreadline-dev \ libyaml-dev \ liblzma-dev \ libbz2-dev \ libsqlite3-dev \ unzip echo "必須パッケージのインストールが完了しました。" # 2. NVM (Node Version Manager) のインストール echo "2. NVM (Node Version Manager) のインストール..." # NVMのインストールスクリプトを実行 curl -o-...

AWSのリソース作成をShellスクリプト化してみた

前回よりだいぶ間が空きましたが・・・・  今更、時代遅れだけどAWSのリソースをShellスクリプトで作成できるようにしてみた。CSVファイルでパラメータ設定して、そのパラメータを元にAWSリソースを作成します。 https://github.com/Otazoman/aws-cli-scripts まぁはやりのAIで作成してるので自分はアイデアしか出していないというへぼっぷりですが、 パラメータシート 作るなら、それ元に成果物生成されないと嫌だし、どうせパラメータシートは EXCEL なんだったらCSVの方が親和性が高いのではないかと思って準備しました。 世の中にはもっとツヨツヨな方がいらっしゃると思うのと、今更ながらだけど。せっかくなので公開だけしておこうかなと。

AWSのEC2インスタンスをShellスクリプトで作成する

 シリーズものになっちゃって、第3弾ですね。VPCとサブネットそしてセキュリティグループとくれば EC2 ですね。ホントに出し尽くされた感があるし今さらなんですが。まぁここまで来たらやっとくかって感じですね。 ◆シリーズ VPCとサブネットの作成 セキュリティグループの作成 EC2の作成 ◆Shellスクリプト本体 #!/bin/bash set -e # コマンドライン引数からCSVファイル名を取得 if [ $# -ne 1 ]; then echo "Usage: $0 <csv-file>" exit 1 fi CSV_FILE="$1" AWS_REGION="${AWS_REGION:-ap-northeast-1}" # ヘッダー行を読み飛ばす HEADER=$(head -n 1 "$CSV_FILE") # 2行目以降(実データ)を処理 tail -n +2 "$CSV_FILE" | while IFS=, read -r REGION NAME IMAGEID INSTANCETYPE KEYNAME SUBNETNAME SECURITYGROUPNAMES PRIVATEIPADDRESS DISABLEAPITERMINATION COST_TAG VOLUMESIZE VOLUMETYPE ALLOCATEELASTICIP ADDITIONALVOLUMESIZES ADDITIONALVOLUMETYPES IAMINSTANCEPROFILE OSTYPE do AWS_REGION="${REGION:-ap-northeast-1}" echo "インスタンス作成開始 $NAME region $AWS_REGION" # OSタイプに応じたデバイス名の設定 case "$OSTYPE" in linux) ROOT_DEVICE_NAME="/dev/xvda" ADDITIONAL_DEVICE_PREFIX="/dev/xvd" ;; ...

AWSのセキュリティグループをShellスクリプトで作る

  前回 はVPCとサブネットを作成したんで、今回は セキュリティグループ を作成してみた。これは使用シーン多いので結構、重宝するかもしれない。ありきたりだけどなかなかほしいと思うのがなかったので作成。例のごとくレガシーなCSVファイル読込という古い形式です。 ◆シリーズ VPCとサブネットの作成 セキュリティグループの作成 EC2の作成 ◆Shellスクリプト本体 #!/bin/bash # 変数の設定 RULES_FILE=$1 # ルールを記述したCSVファイル # 引数の検証 if [ $# -ne 1 ]; then echo "Usage: $0 <rule_file.csv>" >&2 exit 1 fi # ファイルの存在確認 if [[ ! -f "$RULES_FILE" ]]; then echo "ルールファイルが見つかりません: $RULES_FILE" >&2 exit 1 fi # VPC名とリージョンからVPC IDを取得する関数 get_vpc_id() { local REGION=$1 local VPC_NAME=$2 local VPC_ID=$(aws ec2 describe-vpcs \ --region ${REGION} \ --filters "Name=tag:Name,Values=${VPC_NAME}" \ --query "Vpcs[0].VpcId" \ --output text ) if [[ $VPC_ID == "None" ]]; then echo "エラー: VPC名 '${VPC_NAME}' はリージョン '${REGION}' に存在しません。" >&2 exit 1 fi echo $VPC_ID } # プレフィックスリスト名からIDを取得する関数 get_prefix_list_id() { local REGION=$1 local ...

AWSのVPCをShellスクリプトで作る

 まぁありきたりなんですが、必要に駆られて VPC と サブネット と ルートテーブル および NATGateway を作成するShellスクリプト準備しました。既にいろんな人がやってますが、まぁ備忘録的に置いておきます。 ◆シリーズ VPCとサブネットの作成 セキュリティグループの作成 EC2の作成 ◆Shellスクリプト本体 #!/bin/bash # スクリプト実行時にファイル名を指定 if [ -z "$1" ]; then echo "Usage: $0 <rules-file>" >&2 exit 1 fi RESOURCE_FILE=$1 # リソースファイルが存在するか確認 if [ ! -f "$RESOURCE_FILE" ]; then echo "エラー: ファイル $RESOURCE_FILE が見つかりません。" exit 1 fi # リソースファイルを読み込み、ヘッダーをスキップ RESOURCES=() while IFS= read -r line; do if [[ ! "$line" =~ ^REGION ]]; then RESOURCES+=("$line") fi done < "$RESOURCE_FILE" # リージョンごとの処理 #CURRENT_REGION="" #declare -A PROCESSED_VPCS #declare -A ROUTE_TABLES #declare -A NAT_GATEWAYS #declare -A FIRST_PUBLIC_SUBNETS for RESOURCE in "${RESOURCES[@]}"; do IFS=',' read -r REGION VPC_NAME VPC_CIDR SUBNET_CIDR AZ TYPE NAME ROUTE_TABLE_NAME COST_TAG <<< "${RESOURCE}...