3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

既存のAWS環境の構成情報をCLIでゲットしたい

Last updated at Posted at 2020-02-17

はじめに

経緯

記事作成の経緯としては、AWS上で動作しているアプリケーションを組織的に展開する必要があり、AWS環境で利用している各種サービスについて、設定情報をダンプする必要がある状況だった。仲間からの「Jsonで全部の情報をダンプ出来たら楽じゃない?」というアイデアに基づき、下記情報を参考に、BatchGetResourceConfigの動作確認をしてみた内容のメモです。
AWS Config が、複数のリソースに対する現在の設定の取得をサポート
BatchGetResourceConfig

環境など

  • aws-cli/1.16.313 Python/3.5.2 Linux/4.4.0-142-generic botocore/1.13.49
  • pip 19.3.1 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

※実際に案件でこのコマンドを利用する必要がある場合は、ご自身でもAWSのドキュメントを参照、必要に応じて実機で検証した上で、対応を検討してください。

調査結果

APIの仕様

ざっくりとした概要は以下。

  • Resource TypeおよびResource ID(この2つのセットをResource Keyと呼ぶ)を指定するとAWSマネージメントコンソール上で設定している項目はひととおり、jsonとしてExportしてくれる。(CustomerGatewayで確認した限りは管理コンソールで設定している内容が一通り出力された。)
  • 複数指定可能であり、大量に指定する場合は --cli-input-json オプションを使うと便利。

※ドキュメント
https://docs.aws.amazon.com/config/latest/APIReference/API_BatchGetResourceConfig.html
https://docs.aws.amazon.com/cli/latest/reference/configservice/index.html#cli-aws-configservice

コマンド実行例

単品指定
$ aws configservice batch-get-resource-config --resource-keys resourceType="AWS::EC2::CustomerGateway",resourceId="cgw-01234567abcdefh" --region ap-northeast-1 --profile my-profile1
{
    "baseConfigurationItems": [
        {
            "arn": "arn:aws:ec2:ap-northeast-1:123456789012:customer-gateway/cgw-01234567abcdefh",
            "accountId": "123456789012",
            "configurationItemStatus": "ResourceDiscovered",
            "configurationItemCaptureTime": 1234567890.123,
            "version": "1.3",
            "awsRegion": "Not Applicable",
            "resourceType": "AWS::EC2::CustomerGateway",
            "availabilityZone": "Not Applicable",
            "configuration": "{\"bgpAsn\":\"XXXXXX\",\"customerGatewayId\":\"cgw-01234567abcdefh\",\"ipAddress\":\"192.168.0.123\",\"certificateArn\":null,\"state\":\"available\",\"type\":\"ipsec.1\",\"deviceName\":null,\"tags\":[{\"key\":\"Name\",\"value\":\"My Customer Gateway for XXX\"}]}",
            "resourceId": "cgw-01234567abcdefh",
            "configurationStateId": "1234567890123",
            "supplementaryConfiguration": {}
        }
    ],
    "unprocessedResourceKeys": []
}
$

※細かい値は編集してますが、イメージとして上記のような感じで出力される。
※ConfigurationのValueが主にマネージメントコンソール上での設定項目にほぼ相当していた。(GUIには表示されていた情報で明らかに不足していたのは、どのVPCに属するか、の情報だけ。気づいた限り。)

複数指定
$ aws configservice batch-get-resource-config  --region ap-northeast-1 --profile my-profile1 --cli-input-json file://request.json

※複数していでjson使う場合は上記のように対応。

困ったこと

--cli-input-jsonの用意をするために、Jsonのファイルを一括で作成したい状況だった。
「list-discovered-resourcesコマンドがつかえるかも??」と思い試したところ、便利ではあったが、万能ではなかった。具体的には、--resource-typeとして設定できるものは「Possible values」に定義されているものだけのようであったこと。
list-discovered-resources

とりあえず、サポートされる全リソース(90個)分、shellで実行して、sedで編集してインプット用jsonファイルを用意した。

おわりに

既存アプリの横展開に向けた構成情報の洗い出しという意味では、結局のところ、Lambdaの処理やS3 Select等、設計書情報が必要なものなどものあり、BatchGetResourceConfigだけで賄えるものではなかった(当然)ので、個別のリソースに応じて、ドキュメントを用意してもらったり。get configやdescribeコマンドを実行したりExportしたり、いろいろ細々した作業は発生した。(それぞれ種類や用途が異なるサービスであり、出力したい情報も異なるので当然だと思う。設定だけExportできていればいいもの、スクリプトをExportしなくてはいけないもの、(DB系だと)スキーマ情報をExportしたいもの、等さまざまなので。)
もともとの依頼に対しては、手動作業やいろいろ交えて、何とか完了できたので良しとした。
もっとスマートな対応方法をご存知の方がいらっしゃったら、ぜひ、教えていただきたい!

以上。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?