AWS Systems Manager Public Parameter で AWS サービスについてアレコレやってみた!
園部です。
今日は AWS Systems Manager(以降 SSM) の Parameter Store で AWS が提供している Public Parameter を利用して AWS サービスについて色々調べてみたいと思います!
Public Parameters とは
一部の AWS のサービスでは、共通のアーティファクトを Systems Manager パブリック パラメータとして公開します。たとえば、Amazon Elastic Compute Cloud (Amazon EC2) サービスは、パブリックパラメータとして Amazon マシンイメージ (AMI) の情報を公開します。GetParametersByPath、GetParameter、および GetParameters API アクションを使用して、スクリプトやコードからこの情報を呼び出すことができます。
引用: 公式ドキュメント
上記ドキュメントで、3つのユースケースが紹介されています。
- AMI パブリックパラメータを呼び出す
- ECS に最適化された AMI パブリックパラメータを呼び出す
- AWS のサービス、リージョン、エンドポイントパブリックパラメータを呼び出す
一つ目のユースケースについては弊社メンバーが既に記事で書いてくれています!
今日は、三つ目のユースケース「AWS のサービス、リージョン、エンドポイントパブリックパラメータを呼び出す」を参考にアレコレやってみたいと思います!
ドキュメントサンプルをやってみる
まずはドキュメントで紹介されている例をやってみます!
アクティブな AWS リージョン一覧を取得
AWS CLI ssm get-parameters-by-path を利用して取得します。
$ aws ssm get-parameters-by-path --path /aws/service/global-infrastructure/regions --query Parameters[].Name |sort "/aws/service/global-infrastructure/regions/ap-east-1", "/aws/service/global-infrastructure/regions/ap-northeast-1", "/aws/service/global-infrastructure/regions/ap-northeast-2", "/aws/service/global-infrastructure/regions/ap-northeast-3", "/aws/service/global-infrastructure/regions/ap-south-1", "/aws/service/global-infrastructure/regions/ap-southeast-1", "/aws/service/global-infrastructure/regions/ap-southeast-2", "/aws/service/global-infrastructure/regions/ca-central-1", "/aws/service/global-infrastructure/regions/cn-north-1", "/aws/service/global-infrastructure/regions/cn-northwest-1", "/aws/service/global-infrastructure/regions/eu-central-1", "/aws/service/global-infrastructure/regions/eu-north-1", "/aws/service/global-infrastructure/regions/eu-west-1" "/aws/service/global-infrastructure/regions/eu-west-2", "/aws/service/global-infrastructure/regions/eu-west-3", "/aws/service/global-infrastructure/regions/me-south-1", "/aws/service/global-infrastructure/regions/sa-east-1", "/aws/service/global-infrastructure/regions/us-east-1", "/aws/service/global-infrastructure/regions/us-east-2", "/aws/service/global-infrastructure/regions/us-gov-east-1", "/aws/service/global-infrastructure/regions/us-gov-west-1", "/aws/service/global-infrastructure/regions/us-west-1", "/aws/service/global-infrastructure/regions/us-west-2",
利用可能サービス一覧を取得
$ aws ssm get-parameters-by-path --path /aws/service/global-infrastructure/services --query Parameters[].Name |sort "/aws/service/global-infrastructure/services/accessanalyzer", "/aws/service/global-infrastructure/services/acm", "/aws/service/global-infrastructure/services/acm-pca", "/aws/service/global-infrastructure/services/alexaforbusiness", "/aws/service/global-infrastructure/services/amplify", (中略) "/aws/service/global-infrastructure/services/worklink", "/aws/service/global-infrastructure/services/workmail" "/aws/service/global-infrastructure/services/workmailmessageflow", "/aws/service/global-infrastructure/services/workspaces", "/aws/service/global-infrastructure/services/xray",
特定サービスが利用可能なリージョンを取得
e.g. SSM が利用が可能なリージョンを取得してみます。
$ aws ssm get-parameters-by-path --path /aws/service/global-infrastructure/services/ssm/regions --query Parameters[].Value "ap-east-1", "ap-northeast-1", "ap-northeast-2", "ap-south-1", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1" "eu-central-1", "eu-north-1", "eu-west-1", "eu-west-2", "eu-west-3", "me-south-1", "sa-east-1", "us-east-1", "us-east-2", "us-gov-east-1", "us-gov-west-1", "us-west-1", "us-west-2",
e.g. MACIE が利用が可能なリージョンを取得しています。
$ aws ssm get-parameters-by-path --path /aws/service/global-infrastructure/services/macie/regions --query Parameters[].Value |sort "us-east-1", "us-west-2"
特定サービスの特定リージョンでのエンドポイントを取得
e.g. SSM の東京リージョンでのエンドポイントを取得してみます。 ここでは AWS CLI ssm get-parameter を利用して取得します。
$ aws ssm get-parameter --name /aws/service/global-infrastructure/regions/ap-northeast-1/services/ssm/endpoint --query Parameter.Value "ssm.ap-northeast-1.amazonaws.com"
アレコレやってみる
特定リージョンで利用可能なサービス
e.g. 中国(寧夏)リージョンで提供されているサービスエンドポイントを取得してみます。
$ aws ssm get-parameters-by-path --path /aws/service/global-infrastructure/regions/cn-northwest-1/services --query Parameters[].Value |sort "apigateway", "apigatewaymanagementapi", "apigatewayv2", "application-autoscaling", "athena", (中略) "support", "swf", "transcribe", "workspaces", "xray"
グローバルサービスとリージョンサービス
ここは正解となる情報を得られていないので、あくまで以下の条件と仮定して実施しています。
- 各リージョンのエンドポイントがすべて ".amazonaws.com" でリージョンを含まない
- 各リージョンのエンドポイントで "us-east-1" をエンドポイントのみ提供している
- "us-west-2" の全サービスのエンドポイントを取得して上記に該当するサービスをグローバルサービスとする
#!/bin/sh SERVICES=`aws ssm get-parameters-by-path --path /aws/service/global-infrastructure/services --query Parameters[].Value --output text |sort` for SERVICE in ${SERVICES}; do ENDPOINT=`aws ssm get-parameter --name /aws/service/global-infrastructure/regions/us-west-2/services/${SERVICE}/endpoint --query Parameter.Value` if [ "${ENDPOINT}" == "" ]; then echo ${SERVICE} >> global_service.txt else if [ `echo ${ENDPOINT} |grep "us-west-2"` ]; then echo ${SERVICE},${ENDPOINT} >> region_service.txt else echo ${SERVICE},${ENDPOINT} >> global_service.txt fi fi done
$ wc -l |global_service.txt 24 global_service.txt $ wc -l |region_service.txt 176 region_service.txt
$ cat global_service.txt |sort alexaforbusiness budgets,"budgets.amazonaws.com" ce cloudfront,"cloudfront.amazonaws.com" cur frauddetector globalaccelerator,"globalaccelerator.amazonaws.com" health iam,"iam.amazonaws.com" importexport,"importexport.amazonaws.com" machinelearning managedblockchain marketplace-entitlement marketplacecommerceanalytics mobile,"mobile.us-east-1.amazonaws.com" mturk organizations,"organizations.us-east-1.amazonaws.com" pricing route53,"route53.amazonaws.com" route53domains savingsplans,"savingsplans.amazonaws.com" shield support,"support.us-east-1.amazonaws.com" waf,"waf.amazonaws.com"
さいごに
他にもリージョン単位のサービス数を取得するなど、いろいろなことが行えそうです。最後のリージョンサービスとリージョンサービスについては前提含め違う方法や 誤りがあればコメントいただけますとありがたいです。
また本エントリが、どなたかのお役に立てれば幸いです。