投稿

最新の投稿

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

マルチクラウドでVPC同士接続してみるその④(AWS,Azure、GoogleCloud3すくみ接続)

イメージ
 前回までは2クラウド間の接続でしたが、今度は3クラウドをつないでみます。さすがにここまですることはないでしょうが、ここまで来たらやるしかないでしょう。 コマンドラインではいちいちやってられないので、 terraform を使って一撃で構築できるようにしておきます。これでいつでもお手軽に VPN接続 を作れちゃいます。 生成AI を駆使して作りました。もはや自分はいらんだろうという位の勢いです。システム系のこういう作業は生成AIの方が格段に上ですね。 構成はこんな感じです 前回までのでおおよそ作れるかなと思いましたが、複数拠点からVPNを接続する考え方がきちんと理解できてなくてAzureとAWSのVPNGatewayで2つ作ろうとしてエラーになって悩んだりと結構嵌ってました。 前回までのコマンドラインについてVPN作成部分だけは terraformにしています。 ◆シリーズ 1.AWSとGCP接続 2.AWSとAzure接続 3.GCPとAzure接続 4.AWSとGCPとAzure接続 ◆作成したterraform https://github.com/Otazoman/terraform_multicloud_vpn/tree/main/three_cloud_connect ◆参考サイト ・AWS-GCP-Azure https://thelarklife1021.hatenablog.com/entry/2021/05/01/001835 https://www.silect.is/blog/multi-cloud-vpn-terraform/ https://medium.com/@bijit211987/mastering-multi-cloud-management-with-terraform-0615675415d9 ・AWS(VPN) https://docs.aws.amazon.com/ja_jp/vpn/latest/s2svpn/VPNRoutingTypes.html https://blog.serverworks.co.jp/aws/static/vpn https://iret.media/98450 ・GCP(VPN) https://medium.com/@nitinkrsharma/site-to-site-ipse...

AWSでservelessでSTNSのバックエンドを作ってみる

 Linuxで認証統合をしたいなぁってことで stns を調べて、 サーバを構築して確認して ましたがなんかEC2を立てるのが嫌なので Serveless構成 で行けないかなということで色々と試行錯誤やAIの力を借りまくってやっと思った通りのやつができたのでさらしときます。 ほんとは APIGateway のみで完結したかったんですが、stnsのクライアントが APIキー に対応していなかったらしく仕方なくT oken認証の箇所はLambda を使用せざるを得ませんでした。まぁ、先人が色々とされているのでいまさらですが、バックエンドは長く使えるように CloudFormation で構築するようにしました。 ◆作ったもの https://github.com/Otazoman/stns-backend-api ◆参考サイト ・stnsのserveless https://zenn.dev/sogaoh/articles/21-12-25-af3793dc2fcd0a https://iret.media/23633 https://www.m3tech.blog/entry/aws-private-stns-api https://qiita.com/miyaz/items/a0cf2f8f8acfe740ebf6 ・パラメータストア https://qiita.com/okubot55/items/e5d81216d730eb2619cc https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/dynamic-references-ssm-secure-strings.html https://www.yokoyan.net/entry/2021/10/26/131000 https://qiita.com/tnagashima0310/items/988042ad75a77fa3ca18 https://dev.classmethod.jp/articles/aws-systems-manager-parameter-store-use-cloudformation/ https://dev.classmethod.jp/articles/aws-cloudformatio...

マルチクラウドでVPC同士接続してみるその③(GCPとAzure編)

イメージ
 VPNシリーズも3回目に突入、次はGCPとAzureの接続をやってみます。今回はお勉強がてらなので、とりあえず低コストでスタートしたいことからシングル構成ですが、本来は HAで構成 すべきなんですよね。それはまたの機会にでもやろうかと思います。そしてコマンドラインでやってますが、やってることは ここのパクリ です。過去2回でAWSとAzureとAWSとGCPをやっているので、今回はそれの応用編といったところです。 構成は以下の様な感じです。(まぁ分かるか・・・) 作業はGCPとAzureともCloudShellからコマンドラインで実行です。 ◆シリーズ 1.AWSとGCP接続 2.AWSとAzure接続 3.GCPとAzure接続 4.AWSとGCPとAzure接続 ◆大まかな流れ 1.GCPでVPCとサブネット作成 2.GCPでVPNgateway作成 3.AzureのVNETとサブネット作成 4.Azureでローカルネットワークゲートウェイ作成 5.AzureでVPN接続作成 6.GCPでVPNトンネル構成 7.GCPでGCEをサブネットに作成 8.AzureでサブネットにVMを作成 9.Azure側の後始末 10.GCP側後始末 ◆コマンドライン(先頭にプロンプト付きなので注意) 1.GCPでVPCとサブネット作成 1.1.VPC作成 $ VPC_NETWORK=multi-cloud-vpn-gcp $ PROJECT=multicloud-sitevpn-project $ REGION=asia-northeast1 $ gcloud compute networks create ${VPC_NETWORK} \ --project=${PROJECT} \ --subnet-mode=custom 1.2.サブネット作成 $ SUBNET_NAME=${VPC_NETWORK}"-subnet" \ && echo ${SUBNET_NAME} $ PRIMARY_RANGE=172.30.0.0/16 $ gcloud compute networks subnets create ${SUBNET_NAME} \ --network=${VPC_NETWORK} \ ...

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