投稿

ラベル(Shell)が付いた投稿を表示しています

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

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

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

昔の職場で MRTG とかいうのを サーバ監視 に使ってて、サーバの可視化とかグラフ化とかありました。正直、 サーバ運用は人が不幸になる だけであまり好きではないのでこういう 監視系のツール にはあまりそそられないのですが、否応なく勉強せざるをえなくなったので仕方なしにツール入れてみることにしました。 選んだの Observium ですね。(他にもあるのに 正直なところ Grafana とか Prometheus とか mackerel とか Datadog とかキラキラで行けてる上の世界の方が使っているようなところをお勉強したかったのですが、行けてないのでなんか EC2 の上に Zabbix とかObserviumを乗っけるところからのお勉強です。 ※筆者が行けていないだけなのでツールは悪くないです。 そして次に同じ作業できる自信がないので、相変わらずの芸のないShellスクリプトで一括インストールです。公式にも インストールスクリプト あるのでそっち使えばいいんですが RDS とか CloudSQL 使うケースとかhttps化したかったのであえての自前で準備です。ラクできるときはラクする方がはるかにいいです。 ちなみにObserviumではPHP8.2以降で非推奨のMySQLライブラリ使ってるのでPHP8.1まででしか動かぬようです。早めの8.2以降対応に期待しましょう。 ◆Shellスクリプト本体 #!/bin/bash HOST_NAME=observium-srv DATABASE=observium DB_INITIAL_PASSWORD=dbpassword DB_ROOT_PASSWORD=dbpassword DB_USER=observium DB_PASSWORD=observium DB_HOST=localhost PHP_VERSION=8.1 WEB_USER=www-data HTPASSWORD_PATH=/etc/nginx/basic SERVER_NAME=yourdomain.com SITE_URL=https://yourdomain.com/ DOCUMENT_ROOT=/opt/observium/html ADMIN_MAIL=mail@yourmail.com OBS_ADMIN=admin OBS_PASSW...

3大クラウドでVMとストレージを組み合わせた構成を一撃で構築する

  EC2+S3でSambaサーバ組み合わせて ファイルサーバ的なものを前回やってみましたが、 GCP とか Azure でも同じことやってみました。 GCPの場合は GCE + GCS に gcsfuse を組み合わせて構成、Azureの場合は AzureVM に Blob の機能でNFSv3を指定してやるやり方です。 Azureは 以前にredmineでAzureFiles使ってマウントしたこと がありましたが今回はBlobのコンテナ使って NFSマウント してみました。 AWSの場合はgoofysがパフォーマンスいいみたいです。GCPとAzureも書込みとか変更は我慢できないほどではないけどファイル削除に若干、時間がかかる。 頻繁な削除が発生しないなら、まぁどれでもいいんじゃなかろうかという感じです。コストはあまり見ていないですけどVMのコスト+ストレージのコスト+読み書き発生するみたいですね。 ◆Shellスクリプト実行環境の前提 ・AWS:IAMロールでS3フルアクセス可能なものが存在しEC2に付与されている。AWS-CLI用のクレデンシャルが発行済 ・GCP:GCEのアクセススコープで[ストレージ]がフル設定となっている ・Azure:V-NETとストレージアカウントが設定されていること ・Ubuntu22.04LTSにて確認(ロケールと言語は日本語に変換済) ◆Shell本体 #!/bin/bash ACCESS_KEY_ID=AKXXXXX ACCOUNT_ACCESS_KEY_ID=XXXXX ACCOUNT_REGION_ID=ap-northeast-1 ACCOUNT_OUTPUT=json S3_BUCKET_MP_PUBLIC=s3test-mountpoint-samba S3_BUCKET_S3FS=s3test-s3fs-samba S3_BUCKET_GFYS=s3test-goofys-samba GCS_BUCKET=gcstest-samba AZURE_STORAGE_ACOUNT=azuresambatest AZURE_CONTAINER=azure-samba-test MOUNT_DIR_MPS3=/mnt/test-mountpoint-s3 MOUNT_DIR_S3FS=/mnt/test-s3fs M...

EC2からS3をマウントしてみる

  AWSでEC2使ってS3をマウント したいとかいう要望がったので調査がてら検証する過程で3つのマウント方法を試してみた。ついでにSambaでアクセス制御もやってみた。 MountPoint for S3 goofys s3fs MountPointの方は新規と削除しかできないのでファイルサーバ的な用途ではやや厳しく、ログファイルを新規書込みするケースのみにしか使えなさそうで、goofysとs3fsを比較すると新規作成の場合はs3fsだと作成済ファイル表示までに時間がかかってgoofysの方はすぐに作成済ファイルが表示された。ローカルからのコピーだといずれも体感差はない感じ。 AmazonLinux2023の場合MountPointとs3fsはEC2にIAMロールアタッチで使えたもののgoofysではcredentialsを登録してあげないと動かない。UbuntuではいずれもIAMロールアタッチで対応できた。なのでAmazonLinuxでEC2にIAMロールアタッチでsamba使ってS3をマウントするという要件だと今のところs3fsしかないかなという感じでした。 コマンドラインからSamba叩くのは嫌だとか言う人もいるだろうから Webmin 試してみました。rootユーザにパスワード設定しないといけないのでそこだけ注意ですかね。ひとまずお手軽にSambaユーザ追加できました。 次やる機会があるのかわかりませんが、ひとまずShellスクリプトにして再利用できるようにしときました。けどAmazonの推奨パターンは、こういうケースだとEC2+ EFS か AmazonFSx と組み合わせて使うようですね。 ◆Shell本体 #!/bin/sh ACCESS_KEY_ID=AKIXXXXXXXXX ACCOUNT_ACCESS_KEY_ID=XXXXXXXX ACCOUNT_REGION_ID=ap-northeast-1 ACCOUNT_OUTPUT=json S3_BUCKET_MP_PUBLIC=test-mountpoint-samba S3_BUCKET_S3FS=test-s3fs-samba S3_BUCKET_GFYS=test-goofys-samba MOUNT_DIR_MPS3=/mnt/test-mountpoint-s3 MOUNT_D...