AWSの各種パラメータを取得するツールを作りました。

# はじめに
オンプレミスのサーバやネットワーク機器を運用している場合、設定しているパラメータをまとめたパラメータシートを作成して管理する方法がよく行われているかと思います。

クラウド環境の場合、ダッシュボードを見れば設定値等わかるため、以前よりは使われる機会が減っているかもしれませんが、例えばAWSの場合、サービスも多く、横断的に確認するには手間だったりします。

AWS等のクラウドサービスでは、コマンドでJsonなどの形式で設定値を確認したりすることができ、`jq`を使えば整形することもできるので、書式もわかりやすく見栄えがいい`Markdown`形式のドキュメントを生成するツールを作成して、以下の`GitHub`リポジトリで公開しましたので簡単に紹介したいと思います。

- [create-document](https://github.com/sakai00kou/create-document)

# 注意点
個人の制作物となり、ツールを使用して問題が生じた場合でも自己責任となりますので、その点理解したうえでご使用頂ければと思います。

# AWSリソースのパラメータ取得ツールについて
詳しくは`GitHub`リポジトリのREADMEを参照してもらえればと思いますが、ツールの本体となる「**create_document_shell**」内の`create_document.sh`を実行することで`Markdown`形式のパラメータ一覧を作成することができます。

一覧の作成にはAWS環境へアクセスするためのアカウント設定や`jq`コマンドのインストールが必要となるので、事前に準備しておいてください。

以下のように`create_document.sh`シェルの引数として`resource`ディレクトリ配下に格納されているファイル名を指定することで、指定したリソースの情報を取得し、`docs`ディレクトリ配下に`[リソース名]_list.md`というファイルが生成されます。

```bash:create_document.shの実行
./create_document.sh IAM
```

生成されたドキュメントは以下のような`Markdown`形式で出力されます。

```markdown:IAMのパラメータ一覧の例
# IAM
## IAM Policy（カスタマー管理ポリシー） (ap-northeast-1)

|ポリシー名|アタッチ済みの許可ポリシー数|アタッチ済みの境界ポリシー数|ARN|ポリシーID|
|:--|:--|:--|:--|:--|
|IAMSelfManagement-20240318054455207000000001|0|0|arn:aws:iam::211125643235:policy/IAMSelfManagement-20240318054455207000000001|ANPATCKARU7R3GPQK2KFI|
|IAMSelfManagement-20240318054455209900000002|0|0|arn:aws:iam::211125643235:policy/IAMSelfManagement-20240318054455209900000002|ANPATCKARU7RW6AGIDCCQ|
|IAMSelfManagement-20240318054455212000000003|0|0|arn:aws:iam::211125643235:policy/IAMSelfManagement-20240318054455212000000003|ANPATCKARU7RQZODQ6J6U|
|example_from_data_source|0|0|arn:aws:iam::211125643235:policy/example_from_data_source|ANPATCKARU7R74F5DZUAL|

## IAM Role (ap-northeast-1)

|ロール名|Description|ARN|ロールID|
|:--|:--|:--|:--|
|AWS-QuickSetup-DHMCRole-tgvp3-ap-northeast-1|Do Not Modify or Delete. This resource has been created to support the deployment of DHMC Quick Setup configuration, and modification or deletion of this resource may hinder the functionality of that Quick Setup configuration.|arn:aws:iam::211125643235:role/AWS-QuickSetup-DHMCRole-tgvp3-ap-northeast-1|AROATCKARU7RT3DINN7XY|
|AWS-QuickSetup-DHMCRole-tgvp3-ap-northeast-2|Do Not Modify or Delete. This resource has been created to support the deployment of DHMC Quick Setup configuration, and modification or deletion of this resource may hinder the functionality of that Quick Setup configuration.|arn:aws:iam::211125643235:role/AWS-QuickSetup-DHMCRole-tgvp3-ap-northeast-2|AROATCKARU7RXIMGQLW5U|
|AWS-QuickSetup-DHMCRole-tgvp3-ap-south-1|Do Not Modify or Delete. This resource has been created to support the deployment of DHMC Quick Setup configuration, and modification or deletion of this resource may hinder the functionality of that Quick Setup configuration.|arn:aws:iam::211125643235:role/AWS-QuickSetup-DHMCRole-tgvp3-ap-south-1|AROATCKARU7RS5VOEMFZF|
|AWS-QuickSetup-DHMCRole-tgvp3-ap-southeast-1|Do Not Modify or Delete. This resource has been created to support the deployment of DHMC Quick Setup configuration, and modification or deletion of this resource may hinder the functionality of that Quick Setup configuration.|
```

以下、VS CodeでMarkdown Previewした場合の例。

![Monosnap_20240323_105825.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2e048226-3d45-02bd-03e6-6232cbbbc60e.png)

# GitHub ActionsとGitHub Pagesを使用したドキュメント生成ツール
「**create_document_github**」はワークフローファイルに書いた内容を定期実行したり、pushを契機に実行したりできる`GitHub Actions`と、リポジトリの特定ディレクトリを静的ページとして公開することができる`GitHub Pages`を使って、定期的にドキュメントを生成してパラメータ一覧のページを公開するツールとなります。

複数アカウントのパラメータをまとめて見ることができる作りにしているため、複数アカウント管理している場合に効果を発揮します。

注意点として、`GitHub Pages`は`Private`リポジトリでは公開できず、一般アカウントでは`Public`リポジトリにする必要があります。

`Public`リポジトリは、**誰でもアクセスできる状態で全体に公開されてしまう**ため、使用する場合は、GitHub Organizationが設定できるプランでOrganization、Team設定を行い、特定ユーザのみアクセスできる`Internal`リポジトリにしたうえで公開するようにしてください。

## 生成したドキュメントの例
複数システム、複数環境のパラメータ一覧ページを生成した場合、以下のような表示になります。

- トップページ

![Monosnap_20240324_104139.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/81db3303-1ce3-9200-7860-af1fac28d5e7.png)

- 環境一覧画面

![Monosnap_20240324_104200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c37b1cae-cf30-e939-7c13-6d7ba1e0196b.png)

- パラメータ一覧画面

![Monosnap_20240324_104217.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/d3eb092c-a3b6-92a0-3676-f497bc326745.png)

# AWSのサービスのみ使用したドキュメント生成ツール
「**create_document_codebuild**」は`GitHub`を使用できない環境の場合でも「**[GitHub ActionsとGitHub Pagesを使用したドキュメント生成ツール](#githubactionsとgithubpagesを使用したドキュメント生成ツール)**」と同じように、定期的にドキュメントを生成してパラメータ一覧のページを公開するツールとなります。

ページの公開はS3の静的Webサイトホスティング機能で公開しているため、プロトコルは`HTTP`となり、**IPアドレス等のアクセス制限を行わないと全体に公開されてしまう**ため、使用する場合は十分に注意してください。

そのため実運用する場合は`AWS WAF`、`CloudFront`を挟んで、`WAF`でアクセス制限を行ったり、S3バケットポリシーでアクセス元IPアドレスを制限したりしてください。

なお、公開用のHTML生成には、`GitHub Pages`でドキュメント生成する際に使用しているものと同じ`Jekyll`を使用しているため、ページの見え方は`GitHub Pages`で見た場合と同じです。

# おわりに
一般的なサービスはパラメータ取得できるようにしていますが、まだまだ足りないサービス等も多いツールとなります。

`create_document_shell`配下の`resource`に格納されているファイルを見てもらえれば分かる通り、基本的にはAWS CLIでパラメータを取ってきて、`jq`コマンドで整形しているだけなので、もし足りないサービスがあれば、自分で作ってみるのも良いと思います。