投稿

ラベル(サーバ構築)が付いた投稿を表示しています

AWS-CDKでECSの構成作ってみた

  AWS-CDK で ECS/Fargate の NativeのBlue/Green 使える構成を作ってみた。とはいえほとんど Cline 任せでしたが・・・・ ECSのCDK構成に関しては他の方々が色々と作成されているし、そちらの方が有益な記事だと思うのでそちらを読んでいただいた方がいいかなと。 まぁ他と違う点としては ・configのtsファイルを使用してパラメータ可変にしているところ ・scripts配下にEC2のユーザスクリプト埋め込める ・configgenerator使えばウィザードとかCSVからconfig生成できるところ ・buildspec.yamlをファイル、Git、インラインから選べる 位ですね。 あまり有益じゃないと思いますが、まぁ備忘録的に残しておこうかと思います。 かなり複雑なので、なんかイケてないし残念な感じです。 CDKは構成決めてからシンプルに作らないと意味がないなという教訓は得られました。 一応、CI/CDをCodePipeline経由でできるようにしています。GitHubとAWS接続させて連動させることはできます。 awscdk_ecs_backendsample の方がECS用のコードで、 awscdk_ecs_frontendsample がCloudFront+S3のStaticWebSiteHosting用です。buildspec.yamlはGitHub側で制御する感じです。 完全にテストしたってわけでないので挙動怪しいし、意図通り動かないかもしれないです。 ちなみに全リソース構築すると完了までに50分位かかります。CI/CDのSNSのメールのSubscriptionも飛んでくるので許可してやる必要あります。 ◆GitHub(作成したCDKなど) https://github.com/Otazoman/awscdk_ecs_sample https://github.com/Otazoman/awscdk_ecs_backendsample https://github.com/Otazoman/awscdk_ecs_frontendsample ◆参考サイト ・ECSのCDK化 https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/...

CDKTFがサービス終了になるのでCDKTNに移行した話

 CDKTFがサービス終了 するとかいう話、今頃になって知った。昨年から マルチクラウドバックエンド作るので 格闘していたけど、いきなりサービス終了というのは正直なところかなり困る。 選択肢としては 1.cdktf synth --hclでHCLにしてterraformで管理 2.1で変換後に Pulumi に移行する となるけど、結構設定ファイルに外だししてたりするので正直、移行するのが非常につらい。それにPlumiいろいろとややこしいみたいで安定性に難ありみたい。 どうしようかと考えていたら、 CDK Terrainとかいうのが爆誕 しているらしい まぁリリースされるまで待とうかと思っていたら、 もう使えるらしい 。しかも4日前でバージョンも0.22となっている。 移行は ガイド に従ってやればスムーズにいった。 立ち上がっていたコンテナを破棄して、node_modules削除してから Dockerfile を書き直して コンテナを立ち上げ。 コンテナにログインしてnpm入れなおして スナップショットテスト 走らせて必要なコード修正かけて(importとか修正)1時間ほどでなんとか[cdktn plan]まで成功しました。 Opentofu とか全然追っかけてなかったけど、今回のcdktnでopentofuの方がよいかなと思ったりしてます。まぁ terraform 完全に捨てれないので併用にはなると思いますけど スナップショットテスト書いてたので、移行も素早くできた。インフラでもテストコード大事なんだと実感しました。 まぁバックエンドの方はまだ先は長そうですけどね。なんとかcdktfで培った資産は無駄にならなさそうです。よかったよかった ◆参考サイト https://khuonglab.dev/ja/posts/cdktf-deprecation-migration-guide/ https://cdktn.io/docs ◆発表資料 https://www.docswell.com/s/Otazoman/KJWL6N-2026-03-24-124301

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://...

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...

STNSでLinuxのユーザ管理を統合してみる

 とある事情で複数台のLinuxで同一のユーザを扱うとかいう話で出てきて、都度ユーザを追加とかいう面倒なことをしなければならず、何台にも及び、かなりイラっとしたので調べてみて STNS なるものに行き着いた。 なんかLinuxのユーザ情報を一元管理できて複数台で認証情報を統合できるとかいうことらしい。最近は REST みたいなフォーマットになっているとのことで早速、実験してみる。 ・構築環境 Ubuntu24.04LTS(AmazonEC2 AMI) ◆構築方法 1.サーバ側 $ curl -fsSL https://repo.stns.jp/scripts/apt-repo.sh | sh $ sudo apt install -y stns-v2 libnss-stns-v2 cache-stnsd $ cd /etc/stns/ $ sudo mkdir conf.d $ sudo tee -a /etc/stns/server/stns.conf <<_EOS_ port = 1104 include = "/etc/stns/conf.d/*.conf" _EOS_ $ sudo groupadd -g 2000 test-example $ sudo tee /etc/stns/conf.d/sample.conf <<_EOS_ [users.example1] id = 1001 group_id = 2000 shell="/bin/bash" directory = "/home/example1" keys = ["ssh-rsa AAAAhogefuga・・・"] [users.example2] id = 1002 group_id = 1001 shell="/bin/bash" directory = "/home/example2" keys = ["ssh-rsa AAAAhogefuga・・・"] [users.example3] id = 1003 group_id = 1001 shell="/bin/sh" directory =...

Snipe-ITのインストールをShellスクリプトで半自動化する

 少しだけ時間ができたので、全然今の仕事と関係ないけどIT資産管理とかでいいやつないかなと探してたら出てきたのがこの Snipe-IT とかいうやつ。 なんかいろいろできそうで、挙句に PC構成情報まで無料で集められる とかいうなかなかの優れものらしい。とりあえず環境作るのに色々とあれらしいのでひとまず、簡単に試せるようにしとこうとインストールについてスクリプトで動かせるようにしておいた。 ◆Shellスクリプト #!/bin/bash HOST_NAME=snipeit-srv DATABASE=snipeit DB_INITIAL_PASSWORD=password DB_ROOT_PASSWORD=password DB_USER=snipeit DB_PASSWORD=snipeit DB_HOST=localhost MAIL_HOST=YOURSMTP_SERVER MAIL_USERNAME=YOUR_USER MAIL_PASSWORD=YOUR_PASSWORD MAIL_FROM_ADDR=snipe-it@example.com MAIL_FROM_NAME=system-admin MAIL_REPLYTO_ADDR=snipe-it@example.com MAIL_REPLYTO_NAME=system-admin PHP_VERSION=8.3 WEB_USER=www-data SERVER_NAME=snipeit.example.com SITE_URL=https://snipeit.example.com WEB_DIR=/var/www/ DOCUMENT_ROOT=${WEB_DIR}/snipe-it ADMIN_MAIL=yourmail@example.com sudo hostnamectl set-hostname ${HOST_NAME} # --------------------------------------------- # 1.PHPとComposerインストール # --------------------------------------------- read -p "## Do you want to install php? (y/n) [y]: " -e...

3大クラウドのストレージ使ってsyslogのログローテーションしてみる

Samba使ってマウントしたファイルサーバ ってのを以前に準備しました。 その応用で業務にてsyslogサーバ立ててマウントしてそこにログを逃がす形式で構築する機会がありました。しかしながら、よく考えると マウント したディレクトリに移動させるより ローテート の際にコマンドで直でストレージに送ればいいかなと思って試してみました。AWSだけだと面白くないので GC Sと AzureBlob にも対応してみました。次回やるときに苦労するの嫌なので現時点で一撃でやれるようにShellにしてます。 ◆Shellスクリプト実行環境の前提 ・AWS:IAMロールでS3フルアクセス可能なものが存在しEC2に付与されている。AWS-CLIインストール済でクレデンシャル発行済 ・GCP:GCEのアクセススコープで[ストレージ]がフル設定となっている ・Azure:V-NETとストレージアカウントとBlobコンテナーが設定されていること ・Ubuntu22.04LTSにて確認(ロケールと言語は日本語に変換済) ◆Shell本体 #!/bin/bash LOGDIR=/var/log/remote CONFIG=10-remoete.conf LOGNAME=syslog S3BUCKET=s3://202402-syslog-srv-test GCSBUCKET=gs://202402-syslog RESOURCENAME=syslogexam AZ_ACCOUNTNAME=202402storageaccount AZ_CONTAINERNAME=202402-syslog-test EXPIRY=$(date -d "+10 years" +%Y-%m-%dT00:00:00Z) CMD="logrotatecommand" # AWS read -p "## Do you want to setting AWS ? (y/n) [y]: " -e -i "y" awsResponse if [ "$awsResponse" == "y" ] || [ "$awsResponse" == "Y" ]; then ...