AWSCLI+ShellScriptでクラウド基盤構築を効率化する

大畑です。

皆様は「AWSCLI」を使ったことはございますでしょうか。

私はインフラ部門に所属し、AWSを主に使っているのですが、クラウド基盤の構築は基本コンソールを使って行うことが多いです。

またAWSCLIを初めて触った時も、

「ドキュメントでコマンドを調べて入力するの面倒だなあ、コンソールしか勝たん」

のような状態でした。

しかし、現場でShellを使い始めてから、

「AWSCLIやるやん、ShellScriptと組み合わせたら最強やん」

と意見が反転し、謎の関西弁が出るようになりました(*'▽')

ということで今回は

「AWSCLI＋ShellScriptでクラウド基盤構築を効率化する」

をお送りします。

# AWSCLIとは？

AWSCLIとは、AWSコマンド（C）ライン（L）インターフェース（I）の略称で、コマンドの入力を通じてAWSサービスの管理を行える公式ツールです。

使用するためには

１．CloudShellを使う
２．AWSCLIをお使いのパソコンにインストールして使用する

のどちらかを選択できます。事前のインストール、およびセットアップ等面倒な方は１．CloudShellを使うをおすすめします。コンソールにサインインするだけで使用することができます。

２を行う場合は、以下をご参考にしてください。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

※ちなみにOSがAmazonLinuxのEC2には標準でAWSCLIがインストールされています。

# ShellScriptとは

ShellScriptとはOSを操作するためのshell上で実行できる簡単なプログラミング言語です。操作基本的な条件分岐（IF文,CASE文）、繰り返し処理（FOR,WHILE）などを搭載しています。

shellの詳しい解説は以下に任せます。

https://www.pasonatech.co.jp/workstyle/column/detail.html?p=7484

インフラ系であれば避けては通れない道だと思いますので、学びたい方はこちらを参照してください。

https://paiza.hatenablog.com/entry/2017/08/29/%E5%88%9D%E5%BF%83%E8%80%85%E3%81%A7%E3%82%82%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%BB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9

# なぜAWSCLI+ShellScriptで効率化できるのか

__結論、ShellScriptはFor文が使えるから効率化できます。__

例えば、

・100個のLambdaのランタイムを変更する
・100個のロググループをKMSで暗号化する
・100個のIAMユーザを作成する

など作業自体はコンソールでできるものの、単純作業で時間がかかる作業がある場合に、ShellScriptでFor文を書き、その中の処理にAWSCLIを記述すれば、構築は数分で終了します。

次の章で先ほどの例を実践してみます。

# AWSCLI＋ShellScriptを使った構築

今回は「100個のロググループをKMSで暗号化する」をやってみたいと思います。

まずAWSコンソールにログインし、トップ画面に移動します。右上のほうにあるこのマークをクリックします。

![スクリーンショット 2023-02-16 183926.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625964/a7d3e8ec-2eba-b8a8-e55b-a73860f7a2f4.png)

CloudShellのサービス画面に移るので、以下のコマンドを入力し、viエディタを起動します。

```
vi CreateLogGroup.sh
```

キーボードのiを押してinsertモードにし、以下を入力します。

```CreateLogGroup.sh
#bin/bash
echo "CreateLogGroup.sh Start!"
for i in `seq 100`; do
    aws　logs create-log-group　--log-group-name logGroup${i}
    echo Created logGroup${i} 
done
echo "CreateLogGroup.sh Finish!"

```

[esc]->[:wq]コマンドで保存して終了します。

以下のコマンドで、先ほど作成したCreateLogGroup.shを実行します。

```
sh CreateLogGroup.sh
```

実行結果
```
CreateLogGroup.sh Start!
Created logGroup1
Created logGroup2
・・・

・・・
Created logGroup100
CreateLogGroup.sh Finish!
```

コンソールで確認してみます。

![スクリーンショット 2023-02-17 9.32.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625964/2023070e-1638-3474-17d4-d9e5cea4edbe.png)

ロググループが作成されていることが確認できました。

次にKMSキーで暗号化してみたいと思います。

先ほどと同様にCloudShellを起動し、以下のファイルを作成します。

```EncryptLogGroup.sh
#bin/bash
echo "EncryptLogGroup.sh Start!"
for i in `seq 100`; do
    aws　logs associate-kms-key　--log-group-name logGroup${i} --kms-key-id ccbede20-2792-4942-a34e-96d16c429e40
    echo Encrypted logGroup${i} 
done
echo "EncryptLogGroup.sh Finish!"
```
※　--kms-key-idは自分のKeyIDを入力してください。

作成したEncryptLogGroup.shを実行します。

```
sh EncryptLogGroup.sh
```

実行結果
```
EncryptLogGroup.sh Start!
Encrypted logGroup1
Encrypted logGroup2
・・・

・・・
Encrypted logGroup100
EncryptLogGroup.sh Finish!
```

コンソールで確認してみます。

![スクリーンショット 2023-02-17 9.57.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625964/d3806a10-bdf5-084d-8e8f-7abc92adce37.png)

KMSキーIDの欄に指定した暗号化キーのARNが入っており、KMSで暗号化できました。

# 終わりに

この方法は応用すればどのようなAWSサービスにも活用することが可能です。

AWSCLIのリファレンスを載せておきますので、自分に合った用途でカスタマイズしてみてください。

https://docs.aws.amazon.com/cli/latest/index.html

単純作業はAWSCLI＋ShellScriptでおさらばしちゃいましょう！

最後までご覧いただきありがとうございました。

以上、「AWSCLI＋ShellScriptでクラウド基盤構築を効率化する」でした。