AWS CloudShellで環境を混同しないための工夫をしてみた

こんにちは、エンジニアの君島です。

AWS CloudShell便利ですよね。

ただ、複数のAWSアカウントを利用していると、どのアカウントにログインしているか分からなくなってしまうこともありますよね。そんな中では、誤った環境でコマンド実行してしまうようなミスが発生してしまいます。このような単純な操作ミスは、防げるなら防ぎましょう。

先日、代表の内がブログ記事をあげていたので、それをAWS CloudShellでやってみました。

 

目次

はじめに

内のブログ記事をAWS CloudShellでやったらどうなるかを試しました。

もちろん、同じようには設定できないところもありますので見ていきましょう。

AWS CloudShellでログインするユーザーはcloudshell-user固定で、ホームディレクトリが永続ストレージとなっています。ホームディレクトリ以外はセッションが切れてしまえば

そのため、ホームディレクトリ直下の.bashrcを編集するようにしましょう。

 

ログインしているAWSアカウントのエイリアスを表示する

AWSアカウントの情報を取得して表示するようにします。

アカウントIDを表示しても何だか分からないので、アカウントエイリアスを表示するようにします。

設定していない場合は、awsコマンドで設定しておきましょう。

aws iam create-account-alias --account-alias <ACCOUNT_ALIAS>

 

または、IAMのコンソール画面から設定することもできます。

 

バナー表示については、いくつかやり方があります。以下に列挙してみます。

 

  • figletを使用する

デメリットは、yumでインストールした場合、セッションが切れてしまうとfiglet使用できないという点と、間もなくAWS CloudShellのOSがAmazon Linux 2023になるに伴い、Extras-libraryにepelが入らなくなるという点でしょうか。

 

  • Rustのcrateであるcfontを使用する

メリットはセッションが切れても利用することができる点です。

ただ、cargo installを実行するとバイナリをごそっと持ってきてしまうので、ホームディレクトリの使用率が7割程度までに達してしまいます。このためだけに、永続ストレージの容量を使用するのは勿体ないようにも思います。

 

 

 

分析をしてみて、AWS CloudShell を利用するならば、figletを採用する方向にしてみます。

後述の.bashrcにインストールと使い方は記載しておきます。

 

bashのプロンプトにシステム名と環境を表示する

デフォルトではPS1は以下のようになっています。echoコマンドの左側のフォーマットを定義しています。

[cloudshell-user@ip-10-134-22-179 ~]$ echo $PS1
[\\u@\\h \\W]\\$

詳しい説明は内の記事を見ていただくとしましょう。

今回は、ホスト表示の部分をエイリアスを表示するように書き換えておきます。

 

コンソールのテーマを環境ごとに変える

AWS CloudShellは、ブラウザで実行されるため、以下のようなターミナルソフトでできるような背景色の変更が効きません。

echo -e “\\e]11;背景色指定\\a”

代わりに、設定からテーマを変更することができるようになっています。

 

デフォルトでは「暗い」のダークテーマになっています。

アカウントの取り違えがないように、本番環境ではAWS CloudShellのテーマを「明るい」に変えておくとよいと思います。

このテーマの設定は、ホームディレクトリの削除をしてもリセットされずに残っています。

「明るい」ライトなテーマにすると背景は真っ白になります。

 

ログイン時にグローバルIPを表示する

これは、AWS CloudShellでは不要かと思います。AWS CloudShellの実行環境のGlobal IPを知りたい場合は実行してみましょう。

echo GlobalIP is `curl -s https://checkip.amazonaws.com/`

 

まとめ

AWS CloudShellを利用した場合のAWSアカウントを混同しないための方法をいくつか紹介しました。

アカウントエイリアスを設定しておけば、同じ設定にしておくだけで動的に環境の識別ができる点がポイントですね。

最後に、設定した.bashrc全体を残しておきます。ついでに、ログイン時にホームディレクトリの容量を表示するようにしておきました。※

※ Amazon Linux2限定で動作する点と、if文を入れていますが、セッションが切れてしまうとコマンドのインストールが走ってしまうという点はご了承ください。

 

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
complete -C '/usr/local/bin/aws_completer' aws
export AWS_EXECUTION_ENV=CloudShell

# Install epel
ISEPEL=$(sudo amazon-linux-extras list | grep epel)
if [[ $ISEPEL =~ enable ]]; then :;else
  sudo amazon-linux-extras install epel -y -q
fi
# Install figlet
ISFIGLET=$(sudo yum list installed | grep figlet)
if [[ -z $ISFIGLET ]]; then
  sudo yum install -y figlet -q
fi
# Display Aliases
ALIASES=$(aws iam list-account-aliases | jq .AccountAliases[0] | awk '{print substr($0, 2, length($0)-2)}')
BANNER=$(figlet $ALIASES -w 800)
echo -e "\\e[32m $BANNER \\e[m"

# Display Disk usage
echo Disk usage : `du ~/ -hs`

export PS1="[\\u@$ALIASES \\W]\\$ "

 

.bashrcを書き換えて、AWS Cloudshell を起動すると以下のような出力になります。

 

また、figletを使わずに、控えめな表示をする版も用意しました。

こちらの方がAmazon Linux2023になっても使いまわせそうです。

 

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions
complete -C '/usr/local/bin/aws_completer' aws
export AWS_EXECUTION_ENV=CloudShell

# Display Aliases
ALIASES=$(aws iam list-account-aliases | jq .AccountAliases[0] | awk '{print substr($0, 2, length($0)-2)}')
echo -e "\\e[32m $ALIASES \\e[m"

# Display Disk usage
echo Disk usage : `du ~/ -hs`

export PS1="[\\u@$ALIASES \\W]\\$ "

 

告知

カジュアル面談も実施中

ギークフィードではAWSエンジニアなどの職種で一緒に働く仲間を募集しています。

弊社に興味を持っていただいたり、会社のことをカジュアルに聞いてみたいという場合でも、ご気軽にフォームからお問い合わせください。その場合はコメント欄に、カジュアルにお話したいです、と記載ください!

採用情報はコチラ

 

2023 Advent Calendar開催します

ギークフィードでは今年もアドベントカレンダーを開催、及び参加します。

開催、あるいは社員が参加することが決まっているアドベントカレンダーを以下に列挙しておきます。

 

ギークフィード Advent Calendar 2023

ギークフィード主催のアドベントカレンダーです。スカイアーチHRソリューションズさんもご参加いただきます。

 

Amazon Connect Advent Calendar 2023

Amazon Connectにフォーカスしたアドベントカレンダーです。昨年に引き続きクラスメソッドさんと共催です。スカイアーチHRソリューションズさんもご参加いただきます。

 

Japan AWS Ambassadors Advent Calendar 2023

Japan AWS Ambassadorsによるアドベントカレンダーです。

 

Japan AWS Jr. Champions Advent Calendar 2023

Japan AWS Jr.Championsによるアドベントカレンダーです。

 

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
君島翔
君島翔
AI事業部事業部長株式会社ギークフィード
Java, .NET系の言語が得意。Laravelも使います。 エディタはvim派。 自分が楽するためにテストやビルド、デプロイを自動化させたい。 2022-2023 AWS Ambassador / 2022-2023 Japan AWS Top Engineer / 2022-2023 Japan AWS ALL Certifications Engineer

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ