投稿

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

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