michimani.net

Amazon S3 Storage Lens を AWS CLI で触ってみる

2020-11-21

先日、 Amazon S3 Storage Lens というサービス (機能) がリリースされました。これは S3 のオブジェクトストレージ使用状況などを可視化できるサービスです。今回はその Amazon S3 Storage Lens を AWS CLI を使って触ってみます。

目次

Amazon S3 Storage Lens とは

Amazon S3 Storage Lens について、公式ドキュメントでは次のように書かれています。

Amazon S3 Storage Lens provides a single view of object storage usage and activity across your Amazon S3 storage. With drill-down options to generate insights at the organization, account, bucket, object, or even prefix level. S3 Storage Lens analyzes storage metrics to deliver contextual recommendations to help optimize storage costs and apply best practices on data protection.

Using Amazon S3 Storage Lens - Amazon Simple Storage Service

内容を翻訳して要約すると、 Amazon S3 のストレージ使用状況、アクティビティに関する様々な情報をダッシュボードで表示できるサービスです。 AWS Organizations にも対応しており、 Organizations に所属している AWS アカウントの情報も表示することができます。

詳細についてはクラメソさんのブログで既に紹介されています。

まだ日本語のドキュメントは用意されていないようですが、英語では下記のドキュメントを参照してください。

AWS CLI で触ってみる

では、早速 AWS CLI を使って Amazon S3 Storage Lens を操作してみます。AWS CLI の v1 と v2 それぞれの最新バージョンは、2020/11/21 時点で 1.18.1832.1.3 となっています。

(aws-cli-v1) $ aws --version
aws-cli/1.18.183 Python/3.8.5 Darwin/19.6.0 botocore/1.19.23
$ aws --version
aws-cli/2.1.3 Python/3.7.4 Darwin/19.6.0 exe/x86_64

以降のコマンドは 2.1.3 で実行した結果です。

Storage Lens に関連するコマンド

Amazon S3 Storage Lens に関する AWS CLI のコマンドは s3control に含まれています。

$ aws s3control help | grep storage-lens
       o delete-storage-lens-configuration
       o delete-storage-lens-configuration-tagging
       o get-storage-lens-configuration
       o get-storage-lens-configuration-tagging
       o list-storage-lens-configurations
       o put-storage-lens-configuration
       o put-storage-lens-configuration-tagging

既存の情報を取得してみる

Amazon S3 Storage Lens ではダッシュボードを作成して S3 に関する情報を可視化するのですが、デフォルトでバージニア北部 (us-east-1) に一つダッシュボードが作成されています。なので、まずはその情報を取得してみます。

list-storage-lens-configurations

まずは list-storage-lens-configurations です。

$ aws s3control list-storage-lens-configurations help
... 
SYNOPSIS
            list-storage-lens-configurations
          --account-id <value>
          [--next-token <value>]
          [--cli-input-json <value>]
          [--generate-cli-skeleton <value>]

--account-id のみが必須のパラメータになっています。実際に実行してみますが、 アカウント ID についても CLI で取得しておきます。

$ AWS_ACCOUNT_ID=$( \
aws sts get-caller-identity \
--query 'Account' \
--output text \
)

$ aws s3control list-storage-lens-configurations \
--account-id ${AWS_ACCOUNT_ID} \
--region us-east-1

{
    "StorageLensConfigurationList": [
        {
            "Id": "default-account-dashboard",
            "StorageLensArn": "arn:aws:s3:us-east-1:************:storage-lens/default-account-dashboard",
            "HomeRegion": "us-east-1",
            "IsEnabled": true
        }
    ]
}

get-storage-lens-configuration

ダッシュボードの詳細情報を取得するには get-storage-lens-configuration コマンドを使います。

$ aws s3control get-storage-lens-configuration help
...
SYNOPSIS
            get-storage-lens-configuration
          --config-id <value>
          --account-id <value>
          [--cli-input-json <value>]
          [--generate-cli-skeleton <value>]

--config-id--account-id が必須パラメータになっています。 --config-id には先ほど取得した StorageLensConfigurationList[0].Id の値を指定します。

$ aws s3control get-storage-lens-configuration \
--account-id ${AWS_ACCOUNT_ID} \
--config-id default-account-dashboard \
--region us-east-1

{
    "StorageLensConfiguration": {
        "Id": "default-account-dashboard",
        "AccountLevel": {
            "BucketLevel": {}
        },
        "IsEnabled": true,
        "StorageLensArn": "arn:aws:s3:us-east-1:************:storage-lens/default-account-dashboard"
    }
}

デフォルトのダッシュボードということもあってあまり情報がありません。

get-storage-lens-configuration-tagging

ダッシュボードに対して付与されたタグ情報を取得するには get-storage-lens-configuration-tagging コマンドを使います。

$ aws s3control get-storage-lens-configuration-tagging help
...
SYNOPSIS
            get-storage-lens-configuration-tagging
          --config-id <value>
          --account-id <value>
          [--cli-input-json <value>]
          [--generate-cli-skeleton <value>]

get-storage-lens-configuration と同じく --config-id--account-id が必須パラメータになっているので、それぞれ先ほどと同じ値を指定して実行してみます。

$ aws s3control get-storage-lens-configuration-tagging \
--account-id ${AWS_ACCOUNT_ID} \
--config-id default-account-dashboard \
--region us-east-1

{
    "Tags": []
}

タグがついてないので空の情報です。


デフォルトのダッシュボードでは StorageLensConfiguration の情報が乏しかったので、実際にはにどんな情報が含まれるのか調べてみます。

StorageLensConfiguration の内容

デフォルトのダッシュボードでは内容が乏しかったですが、実際にはどんな情報 (設定項目) が含まれるのか、 put-storage-lens-configuration--generate-cli-skeleton で確認してみます。

$  aws s3control put-storage-lens-configuration \
--generate-cli-skeleton

{
    "ConfigId": "",
    "AccountId": "",
    "StorageLensConfiguration": {
        "Id": "",
        "AccountLevel": {
            "ActivityMetrics": {
                "IsEnabled": true
            },
            "BucketLevel": {
                "ActivityMetrics": {
                    "IsEnabled": true
                },
                "PrefixLevel": {
                    "StorageMetrics": {
                        "IsEnabled": true,
                        "SelectionCriteria": {
                            "Delimiter": "",
                            "MaxDepth": 0,
                            "MinStorageBytesPercentage": null
                        }
                    }
                }
            }
        },
        "Include": {
            "Buckets": [
                ""
            ],
            "Regions": [
                ""
            ]
        },
        "Exclude": {
            "Buckets": [
                ""
            ],
            "Regions": [
                ""
            ]
        },
        "DataExport": {
            "S3BucketDestination": {
                "Format": "Parquet",
                "OutputSchemaVersion": "V_1",
                "AccountId": "",
                "Arn": "",
                "Prefix": "",
                "Encryption": {
                    "SSES3": {},
                    "SSEKMS": {
                        "KeyId": ""
                    }
                }
            }
        },
        "IsEnabled": true,
        "AwsOrg": {
            "Arn": ""
        },
        "StorageLensArn": ""
    },
    "Tags": [
        {
            "Key": "",
            "Value": ""
        }
    ]
}

色んな情報 (設定項目) がありますが、コストが発生するかどうかという観点では、下記の項目に注意が必要です。

上記の各 IsEnabled には true または false を指定しますが、それぞれのメトリクスの取得は有料となるので、無料で Storage Lens を使いたい場合は false を指定します。

StorageLensConfiguration.AccountLevel.DataExport では、取得したメトリクスのデータを指定した S3 バケットに出力することができます。

ダッシュボードを作成する

続いては、 AWS CLI を使って Storage Lens のダッシュボードを作成してみます。使用するコマンドは put-storage-lens-configuration です。

$ aws s3control put-storage-lens-configuration help
...
SYNOPSIS
            put-storage-lens-configuration
          --config-id <value>
          --account-id <value>
          --storage-lens-configuration <value>
          [--tags <value>]
          [--cli-input-json | --cli-input-yaml]
          [--generate-cli-skeleton <value>]

今回は、無料で使えるダッシュボードを作成してみます。設定項目の概要としては下記のとおりです。

以上の要件を満たすダッシュボードを作成するために、次のような JSON を config.json という名前で作成します。

{
    "Id": "free-dashboard-sample",
    "AccountLevel": {
        "BucketLevel": {}
    },
    "Include": {
        "Regions": [
            "ap-northeast-1"
        ]
    },
    "DataExport": {
        "S3BucketDestination": {
            "Format": "Parquet",
            "OutputSchemaVersion": "V_1",
            "AccountId": "************",
            "Arn": "arn:aws:s3:::storage-lens-export-************"
        }
    },
    "IsEnabled": true
}

ダッシュボードを作成します。

$ aws s3control put-storage-lens-configuration \
--account-id ${AWS_ACCOUNT_ID} \
--config-id free-dashboard-sample \
--storage-lens-configuration file://config.json \
--region ap-northeast-1

実行後、特に出力はないので、 get-storage-lens コマンドで正しく作成されていることを確認します。

$ aws s3control get-storage-lens-configuration \
--account-id ${AWS_ACCOUNT_ID} \
--config-id free-dashboard-sample \
--region ap-northeast-1

{
    "StorageLensConfiguration": {
        "Id": "free-dashboard-sample",
        "AccountLevel": {
            "BucketLevel": {}
        },
        "Include": {
            "Regions": [
                "ap-northeast-1"
            ]
        },
        "DataExport": {
            "S3BucketDestination": {
                "Format": "Parquet",
                "OutputSchemaVersion": "V_1",
                "AccountId": "************",
                "Arn": "arn:aws:s3:::storage-lens-export-************"
            }
        },
        "IsEnabled": true,
        "StorageLensArn": "arn:aws:s3:ap-northeast-1:************:storage-lens/free-dashboard-sample"
    }
}

マネジメントコンソール上では次のような形で設定を確認することができます。

Storage Lens dashboard setting

まとめ

Amazon S3 Storage Lens を AWS CLI で触ってみた話でした。
re:Invent 前で怒涛のアップデート、新サービス・新機能の登場が続いていますが、AWS CLI ではほぼすぐにそれらのサービスを触ることができるようです。このあたりの対応スピードはすごいですね。

ただ、今回の Amazon S3 Storage Lens では v2 よりも v1 のほうが反映が早かったようです。(v1 は 1.18.181 で対応していましたが、その時の v2 の最新であった 2.1.2 では使えませんでした) 前に DynamoDB のリージョン間リストアが発表された際も、 v2 の対応は v1 よりもしばらくあとでした。

新サービス・新機能が出た際には、まずは v1 で試すのが良さそうです。


comments powered by Disqus