こんにちは、エンジニアの君島です。
AWS CloudShell便利ですよね。
ただ、複数のAWSアカウントを利用していると、どのアカウントにログインしているか分からなくなってしまうこともありますよね。そんな中では、誤った環境でコマンド実行してしまうようなミスが発生してしまいます。このような単純な操作ミスは、防げるなら防ぎましょう。
先日、代表の内がブログ記事をあげていたので、それをAWS CloudShellでやってみました。
目次
はじめに
内のブログ記事をAWS CloudShellでやったらどうなるかを試しました。
もちろん、同じようには設定できないところもありますので見ていきましょう。
AWS CloudShellでログインするユーザーはcloudshell-user固定で、ホームディレクトリが永続ストレージとなっています。ホームディレクトリ以外はセッションが切れてしまえば
そのため、ホームディレクトリ直下の.bashrcを編集するようにしましょう。
ログインしているAWSアカウントのエイリアスを表示する
AWSアカウントの情報を取得して表示するようにします。
アカウントIDを表示しても何だか分からないので、アカウントエイリアスを表示するようにします。
設定していない場合は、awsコマンドで設定しておきましょう。
1 |
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コマンドの左側のフォーマットを定義しています。
1 2 3 |
[cloudshell-user@ip-10-134-22-179 ~]$ echo $PS1 [\\u@\\h \\W]\\$ |
詳しい説明は内の記事を見ていただくとしましょう。
今回は、ホスト表示の部分をエイリアスを表示するように書き換えておきます。
コンソールのテーマを環境ごとに変える
AWS CloudShellは、ブラウザで実行されるため、以下のようなターミナルソフトでできるような背景色の変更が効きません。
1 2 |
echo -e “\\e]11;背景色指定\\a” |
代わりに、設定からテーマを変更することができるようになっています。
デフォルトでは「暗い」のダークテーマになっています。
アカウントの取り違えがないように、本番環境ではAWS CloudShellのテーマを「明るい」に変えておくとよいと思います。
このテーマの設定は、ホームディレクトリの削除をしてもリセットされずに残っています。
「明るい」ライトなテーマにすると背景は真っ白になります。
ログイン時にグローバルIPを表示する
これは、AWS CloudShellでは不要かと思います。AWS CloudShellの実行環境のGlobal IPを知りたい場合は実行してみましょう。
1 |
echo GlobalIP is `curl -s https://checkip.amazonaws.com/` |
まとめ
AWS CloudShellを利用した場合のAWSアカウントを混同しないための方法をいくつか紹介しました。
アカウントエイリアスを設定しておけば、同じ設定にしておくだけで動的に環境の識別ができる点がポイントですね。
最後に、設定した.bashrc全体を残しておきます。ついでに、ログイン時にホームディレクトリの容量を表示するようにしておきました。※
※ Amazon Linux2限定で動作する点と、if文を入れていますが、セッションが切れてしまうとコマンドのインストールが走ってしまうという点はご了承ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# .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になっても使いまわせそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# .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開催します
ギークフィードでは今年もアドベントカレンダーを開催、及び参加します。
開催、あるいは社員が参加することが決まっているアドベントカレンダーを以下に列挙しておきます。
ギークフィード主催のアドベントカレンダーです。スカイアーチ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によるアドベントカレンダーです。
- Amazon Bedrockでコード生成したスタンプラリーアプリをAWS Summit Japanで展示するまで - 2024-12-17
- AWS CloudShellでAmazon Q使えんの - 2024-12-08
- Pascalについて調べたまとめ - 2024-12-08
- 半年間の育休を取得しました - 2024-12-05
- オンラインでre:Invent2024の臨場感を味わおう - 2024-12-04