🤖

EC2に自動でEIPを割り当ててくれるシェルスクリプト

2021/08/27に公開

概要

普段、Terraformを使用している私にとって、EC2を起動した際などに使用するEIPは
ドメインを割り振る関係上、簡単に変更できないように
Terraformのライフサイクルに含めたくないケースが多い。
そんなときに便利な
EIPを作成し、EC2へそのEIPを自動で割り当ててくれるシェルスクリプトを紹介する。

動作環境

  • Linux
    • Debian [v10.8]
  • Windows
    • WSL の Ubuntu [v20.04]
    • WSLの構築については以下を参照

https://zenn.dev/mttk030/articles/4cad7b428957e7

シェルスクリプト

#!/bin/bash
set -eu

create_and_set_eip () {
    # サーバ用Elastic IP作成 and EC2連携
    aws ec2 allocate-address --domain vpc --tag-specifications "ResourceType=elastic-ip,Tags=[{Key=Name,Value=${AWS_PROFILE}}]"
    aws ec2 associate-address \
    --allocation-id `aws ec2 describe-addresses --filter "Name=tag:Name,Values=${AWS_PROFILE}" --query 'Addresses[*].AllocationId[]' --output text` \
    --instance `aws ec2 describe-instances --filter "Name=tag:Name,Values=${AWS_PROFILE}" "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[*].InstanceId[]' --output text`
}

# [source set_aws_profile.sh] を実行し、デプロイ先を指定しているか確認
if [ ${AWS_PROFILE} = '******(アプリ名など)' ]; then
    create_and_set_eip
    echo '----- Elastic IP作成 and EC2連携完了 -----'
else
    echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
fi

説明

1. 事前準備

  • AWS CLI のインストール
  • AWSのクレデンシャル情報などを保存する、名前付きプロファイルの名前を
    EC2のNAMEタグと一致させるようにする。(以下コマンドで設定するやつ)
aws configure --profile ******(アプリ名など)
  • 上記の名前付きプロファイルの名前を環境変数(AWS_PROFILE)に設定しておく
export AWS_PROFILE=******(アプリ名など)

2. ポイント解説

  • 1. 事前準備 で設定したように、名前付きプロファイルの名前を
    EC2のNAMEタグと一致させるようにする
    ことで、デプロイ先が変わっても
    上記シェルスクリプトをそのまま流用することができる
  • 間違って操作するとヤバいことになるEIPの操作を自動化できる
  • 以前紹介した、私のTerraform運用オペレーションに組み込むことができる

https://zenn.dev/mttk030/articles/4d4d6f677fd996

参考

AWS CLIのフィルターとクエリーの使い方についてまとめてみた

Discussion