AWS Systems Manager パラメーターストアを利用してAWSサービス一覧を取得してみる
こんにちは。サービスグループの武田です。
AWS Systems Manager パラメーターストアからリージョンやエンドポイントの情報を取得する方法について書きました。
書いている途中で、longName のパラメーターを使えばサービス一覧が作れるのでは?と考え付いたのでさっそくやってみました。
最初に思いついた愚直な方法
パラメーターストアのキーに使われるサービス名は、やはりパラメーターストア自身から取得できます。そのため、一覧取得をしたらあとは繰り返しlongNameを取得すればいいのかな。と考えました。つまり次のようなコマンドです。
$ aws ssm get-parameters-by-path --path '/aws/service/global-infrastructure/services' --output json \ | jq -r '.Parameters[].Value' \ | xargs -I{} aws ssm get-parameter --name '/aws/service/global-infrastructure/services/{}/longName' --output json \ | jq -r '.Parameter.Value'
ただこれはよくない気がしました。典型的な N+1のクエリ に見えるためです。実際に試してはいませんが。何か方法はないのかなとドキュメントを眺めていたらよさそうなオプションがありました。
get-parameters-by-pathで再帰的に取得する方法
get-parameters-by-path — AWS CLI 1.16.155 Command Referenceのページを眺めていると--recursive
というオプションがありました。これを使用することで、階層直下のパラメーターだけでなく、より深く掘って取得できます。試しに付けて叩いてみたところ、longNameのほかにもendpointやprotocolsなども一緒に取得していました。これらを踏まえて次のようなコマンドを組み立てました。
$ aws ssm get-parameters-by-path --path '/aws/service/global-infrastructure/services' --recursive --output json \ | jq -r '.Parameters[] | select(.Name | endswith("longName")) | .Value' \ | sort
実行結果として、次のサービス一覧が取得できました。
AWS App Mesh AWS AppSync AWS Application Discovery Service AWS Auto Scaling Plans AWS Backup AWS Batch AWS Budgets AWS Certificate Manager AWS Certificate Manager Private Certificate Authority AWS Cloud Map AWS Cloud9 AWS CloudFormation AWS CloudHSM V2 AWS CloudTrail AWS CodeBuild AWS CodeCommit AWS CodeDeploy AWS CodePipeline AWS CodeStar AWS Comprehend Medical AWS Config AWS Cost Explorer Service AWS Cost and Usage Report Service AWS Data Pipeline AWS DataSync AWS Database Migration Service AWS Device Farm AWS Direct Connect AWS Directory Service AWS Elastic Beanstalk AWS Elemental MediaConvert AWS Elemental MediaLive AWS Elemental MediaPackage AWS Elemental MediaStore AWS Elemental MediaStore Data Plane AWS Global Accelerator AWS Glue AWS Greengrass AWS Health APIs and Notifications AWS Identity and Access Management AWS Import/Export AWS IoT AWS IoT 1-Click Devices Service AWS IoT 1-Click Projects Service AWS IoT Analytics AWS IoT Data Plane AWS Key Management Service AWS Lambda AWS License Manager AWS Marketplace Commerce Analytics AWS Marketplace Entitlement Service AWS MediaConnect AWS MediaTailor AWS Migration Hub AWS Mobile AWS OpsWorks AWS OpsWorks for Chef Automate AWS Organizations AWS Performance Insights AWS Price List Service AWS Resource Access Manager AWS Resource Groups AWS Resource Groups Tagging API AWS RoboMaker AWS S3 Control AWS Secrets Manager AWS Security Token Service AWS SecurityHub AWS Server Migration Service AWS Service Catalog AWS Shield AWS Signer AWS Step Functions AWS Storage Gateway AWS Support AWS Transfer for SFTP AWS WAF AWS WAF Regional AWS X-Ray AWSMarketplace Metering AWSServerlessApplicationRepository Alexa For Business Amazon API Gateway Amazon AppStream Amazon Athena Amazon Chime Amazon CloudFront Amazon CloudHSM Amazon CloudSearch Amazon CloudWatch Amazon CloudWatch Events Amazon CloudWatch Logs Amazon Cognito Identity Amazon Cognito Identity Provider Amazon Cognito Sync Amazon Comprehend Amazon Connect Service Amazon Data Lifecycle Manager Amazon DocumentDB with MongoDB compatibility Amazon DynamoDB Amazon DynamoDB Accelerator (DAX) Amazon DynamoDB Streams Amazon EC2 Container Registry Amazon EC2 Container Service Amazon ElastiCache Amazon Elastic Compute Cloud Amazon Elastic Container Service for Kubernetes Amazon Elastic File System Amazon Elastic MapReduce Amazon Elastic Transcoder Amazon Elasticsearch Service Amazon FSx Amazon GameLift Amazon Glacier Amazon GuardDuty Amazon Import/Export Snowball Amazon Inspector Amazon Kinesis Amazon Kinesis Analytics Amazon Kinesis Firehose Amazon Kinesis Video Streams Amazon Lex Model Building Service Amazon Lex Runtime Service Amazon Lightsail Amazon Machine Learning Amazon Macie Amazon Mechanical Turk Amazon Neptune Amazon Pinpoint Amazon Pinpoint Email Service Amazon Pinpoint SMS and Voice Service Amazon Polly Amazon Redshift Amazon Rekognition Amazon Relational Database Service Amazon Route 53 Amazon Route 53 Domains Amazon Route 53 Resolver Amazon SageMaker Runtime Amazon SageMaker Service Amazon Simple Email Service Amazon Simple Notification Service Amazon Simple Queue Service Amazon Simple Storage Service Amazon Simple Systems Manager (SSM) Amazon Simple Workflow Service Amazon SimpleDB Amazon Textract Amazon Transcribe Service Amazon Translate Amazon WorkDocs Amazon WorkLink Amazon WorkMail Amazon WorkSpaces AmazonMQ Application Auto Scaling Auto Scaling Elastic Load Balancing Firewall Management Service Managed Streaming for Kafka
まとめ
--recursive
オプションを付けるとレスポンスを受け取るまでそれなりに待たされました。ただHistoryで確認してみると、リクエストは一度しかしていませんので、おそらく行儀はよいと思われます(よいと信じたい)。
ところで、 AWS Systems Manager が Amazon Simple Systems Manager (SSM) だったり、 AWS Firewall Manager が Firewall Management Service だったりとやや取得できるサービス名に古いものがあるようです。おそらく順次更新されていくものと思われますので、必ずしも最新のサービス名ではないということは覚えておくとよさそうです。