AWSサービスの構築をBashで自動化してみる

 AWSで各種サービスを利用するとき、何かしらの構築が必要になります。例えばEC2でWebアプリを動かしたい!というときには、EC2インスタンスの作成が必要になります。もしかしたら新しいVPCを用意するところから始める必要があるかもしれません。この場合、EC2インスタンスだけではなく、VPC、ルートテーブル、インターネットゲートウェイ、サブネット、ACL…とAWSでのネットワーク構築についても実施する必要が出てきます。

 ある程度操作に慣れてくると、次はコマンド一つで構築できないか、と考えるようになります。AWSはaws-cliというBashで実行できるツールを用意してくれています。今回、このツールを使った、サブネットを1つ作るプログラムを紹介します。

 早速プログラムを載せます。
 私の環境では aws-cli の出力形式を json としているため、Bashで扱いやすくなるよう jq コマンドもインストールしています。

# Read default vpc's id.
_region="ap-northeast-1"
_default_vpc_id=$( \
    aws --region ${_region} ec2 describe-vpcs \
    | jq -r '.Vpcs[] | select(.CidrBlock == "172.31.0.0/16") | .VpcId' \
)

# Try to create subnet for ap-northeast-1d.
_az="${_region}d"
_cidr="172.31.160.0/20"
_existing=$( \
    aws --region ${_region} ec2 describe-subnets \
    | jq -r ".Subnets[] | select(.CidrBlock == \"${_cidr}\") | .CidrBlock" \
)
if [ "${_existing}" = "" ]; then
    aws --region ap-northeast-1 ec2 create-subnet \
        --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=Public Subnet for App Instances}]" \
        --vpc-id ${_default_vpc_id} \
        --availability-zone ${_az} \
        --cidr-block ${_cidr}
else
    echo "Subnet ${_cidr} is already exists. Skip creation."
fi

 このプログラムは東京リージョン(ap-northeast-1)のデフォルトVPCに、サブネット “172.31.160.0/20” を追加します。また、すでに作成済みの場合はスキップするよう、考慮しています。
 普段マネージメントコンソールでやっている操作を、実行するかどうかの判断も含めてBashスクリプトとして書き起こしたものになります。

 これを雛形にすれば、だいたいの構築をコマンド一発で済ませる事ができるようになるのではないでしょうか。aws-cli、使いこなすといろいろと捗るので、是非マスターしたいですね!

Ubuntu20.04 LTS トラブル対策集

はじめに

 Ubuntu20.04LTS、お使いでしょうか。Ubuntuはリリースを重ねる度にデスクトップOSやサーバーOSとして洗練されてきていますね。
 さて、今回、そんな便利に進化しているUbuntu20.04LTSですが、残念ながらセットアップ直後にトラブルに見舞われたのでここにメモしておきます。

HTTPS通信で証明書エラーが頻発する

現象

 はい、リポジトリーからパッケージをインストールしたり、curlコマンドでファイルをダウンロードしたりするときに、何やら「証明書の検証に失敗しました」といった旨のエラーに見舞われました。
 控えめに言ってクリティカルなレベルのトラブルです。原因はどうやらOSにインストールされている信頼された証明書(Root CA Certificate、ルート証明書)が不足しているか、破損している可能性が考えられます。

対応と対策

 下記コマンドを実行して、ルート証明書を再インストールしてみました。

$ sudo apt-get install --reinstall ca-certificates

 実行後、問題のパッケージインストールやcurlコマンドでのファイルダウンロードを試したところ、無事成功しました。この対応で解決したようです。

日本語かな入力ができない

現象

 「settings | 設定」アプリで「Region & Language | 地域と言語」から入力ソースとして「日本語」、「日本語 (Mozc)」をインストールしました。画面右上に、言語が切り替えられるよう「英語(us)」、「日本語」、「日本語(Mozc)」が表示されるようになりました。が、 「日本語(Mozc)」で「ひらがな」を選択下にもかかわらず、英語入力のままでした。

対応と対策

 【検証中】IBUSがうまく動作していないようなので、別の入力ソースとしてFcitxに切り替えてみます。下記コマンドを実行してインストールしました。

$ sudo apt-get install fcitx-mozc

 ひとまず、Ctrl + Space で英語と日本語を切り替えられるようになりました。先にインストールした入力ソース「日本語」、「日本語(Mozc)」との競合などが整理でき次第、この投稿を更新したいと思います。

Ubuntuで使えるフォントを確認する

はじめに

 Ubuntuを普段使うデスクトップ環境として利用するシーンが増えてきています。今回、インストールされているフォント(ttfファイル)を確認する方法を紹介します。

フォント(ttfファイル)一覧表示

 次のコマンドを実行します。

$ fc-list | sort

10の指数の計算

はじめに

 次のような表記で値が与えられたとき、ぱっと思い浮かべることができるでしょうか。

\(3.9 * 10^4\)
\(6.4 * 10^{-5}\)

SI接頭語を使う

 10の指数はSI接頭語を用いて、k(キロ \(10^3\))、M(メガ \(10^6\))、G(ギガ \(10^9\))、T(テラ \(10^{12}\))、m(ミリ \(10^{-3}\))、μ(マイクロ \(10^{-6}\))、n(ナノ \(10^{-9}\))、p(ピコ \(10^{-12}\))に置き換えると理解しやすくなるのではないでしょうか。
 先の例だと、私は次のように考えて変換します。

\(3.9 * 10^4 = 39 * 10^3 = 39k\)
\(6.4 * 10^{-5} = 64 * 10^{-6} = 64μ\)

  このように、SI接頭語が使えるように指数部を3の倍数となるように調整します。関数電卓や高性能な電卓だと、演算結果が10の指数付きで表示されることがよくあります。SI接頭語に置き換えて考えられるようになると、計算や設計に役立つのではないでしょうか。

破壊的処理と非破壊的処理

はじめに

 プログラミングの基本となる考え方を、私の整理も兼ねて紹介します。

続きを読む

Webサーバー nginx における SSL証明書設定の安全性向上 ~SSL Server Test で A+ 判定を目指して~

はじめに

 以前の投稿から4年が過ぎ、当時は良好だった項目がいくつか Weak 判定されるようになったため、2019.10.10現在で良好な状態になるよう調整しました。

続きを読む

CentOS8 をインストールする

はじめに

 CentOS8 がリリースされましたね!早速インストールしてみました。

続きを読む

VNC サーバーインストール

はじめに

 CentOS7、CentOS6、Ubuntu18.04LTS の GNOME Desktop に、VNCでリモートデスクトップ接続できるようにします。

続きを読む

Python3.7ビルドとvenv環境構築

はじめに

 Python3.7のビルドとインストール、venv環境の構築手順を紹介します。デフォルトでインストールされている Pythonに影響を与えないよう、任意の場所(/opt/python37 や ~/opt/python37など)にPython3.7をインストールします。このPython3.7を使って、venv環境を構築できるようにします。

続きを読む

High Sierra 上の VirtualBox の中で mojave インストールする

はじめに

 手元の Mac mini (2011 Mid) は High Sierra までしかインストールできません。しかし、メモリを増設したり、ストレージを SSD 化したりしたおかげで、ハードウェアスペックにはまだまだ余裕があります。最新の Xcode は Mojave 向けにリリースされれているため、なんとかして Mojave をインストールできないか模索しました。
 いわゆる macOS on macOS について、ライセンス(ローカルの /Library/Documentation/License.lpdf/Contents/Resources/Japanese.lproj/License.pdf) 2B条(iii) によると、ソフトウェア開発のために仮想インスタンスを1つ構築することは問題なさそうです。
 今回、仮想化環境で Mojave のインストールに成功しましたので、要点のみまとめます。

続きを読む