📿

[AWS]2リージョンで利用出来るサービス比較をしたい

2023/08/23に公開
4

https://aws-service-utilities.vercel.app/

ここから下は上記に行き着く前にしていた事になります。


2リージョンのサービス有無を比較したい

前回、東京と大阪で利用出来るAWSサービスの対比について書きました。
https://zenn.dev/mjxo/articles/3d72f4577a5c8e

これをWebブラウザ上でいつでも最新の情報で手にいれられたらいいなぁ、と思い色々方法を考えてみました。


情報(元データ)はどこから拾う

現在の元となるデータはここから拾っています。
https://aws.amazon.com/jp/about-aws/global-infrastructure/regional-product-services/?p=ngi&loc=4

他にもAWS CLIを使って名前空間から取得しようという記事を見つけました。
https://dev.classmethod.jp/articles/all-aws-services-onliner/
https://dev.classmethod.jp/articles/service-last-accessed-details/


思いついた方法

上記から思いつく簡単な方法について、限定的ですが以下のような事を考えました。
(ブラウザでという部分は一旦置いておいて)

①前者のデータをローカルでExcel VBA+Selenium Webドライバーでスクレイピングして取得する。

②前者のデータをGoogleSpreadSheet版マクロのGoogle Apps Script(GAS)というのがあるらしいので、それ+αでなんとか出来ないか考える。

③後者のCLIの方法で取得する際リージョンを引数に与える等出来ないか調べる。


問題点を考える

懸念すべき事も考えてみます。

まず①、②の情報取得に関しては、毎日更新という最新状態からデータはもらえるものの、「Webページからスクレイピングで情報を貰ってくる」なる行為自体がいかがなものかという感覚が私にない為、現状「出来るけどやらない方がいいのでは」という状態です。(更にそれを公開するとなると余計に。)

更にわざわざChrome等のVersionに合わせてWebDriverを更新してまで必要な機能とは感覚的にどうしても思えなかった為、どちらにしても取得は一旦手動で考えました。

一方、③の方法については記事をしっかり読んで見ると、

※エラーが出る為sleepは5を指定。
i=`aws iam generate-service-last-accessed-details --arn arn:aws:iam::aws:policy/AdministratorAccess --output text` && sleep 5 && aws iam get-service-last-accessed-details --job-id $i --max-items 1000  | jq -c '.ServicesLastAccessed[] | [.ServiceName,.ServiceNamespace]'

という方法である為、リージョンにフィルターをかけられたとしても、

"LastAccessedRegion": "ap-northeast-1"

という部分に対してになりそうなので求めている「利用可能リージョン」とは異なってきそうな為、断念しました。

なので、一旦は試作という事で手元のエクセルに元データを手動で貼付して、以下のような簡単なマクロで結果を表示するようなものを作成してみました。


マクロ

ぱっと書いたものでお恥ずかしいですが、以下のような事をしています。
(セルにも数式がある為これだけで何を参照しているかわかる訳ではないですが雰囲気で)

Option Explicit
'【Workbook】
Public ThisBook As Workbook
'【Worksheet】
Public Result_Sh, Comparison_Sh, RegionList_Sh As Worksheet
'【Long】
Public i, j, k, col_num As Long
Sub main()
    Call Set_Sh
    Call Region_check
    Call Clear_Cells
    Call Calculation
    Call Return_All_Cells_To_A1
    MsgBox " 処理が完了しました。"
End Sub
Sub Set_Sh()
    Set ThisBook = Workbooks(ThisWorkbook.Name)
    With ThisBook
        Set Result_Sh = .Worksheets("Result")
        Set Comparison_Sh = .Worksheets("Comparison")
        Set RegionList_Sh = .Worksheets("RegionList")
    End With
End Sub
Sub Region_check()
    If Result_Sh.Range("B2") = Result_Sh.Range("C2") Then
        MsgBox " 選択リージョンが同じです。値を変えて再スタートしてください。"
        End
    ElseIf Result_Sh.Range("B2") = "" Or Result_Sh.Range("C2") = "" Then
        MsgBox " 選択リージョン に空欄があります。B2、C2の値を選択してスタートしてください。"
        End
    End If
End Sub
Sub Clear_Cells()
    Result_Sh.Range("A6:D306").Clear
End Sub
Sub Calculation()
    If Result_Sh.Range("B4") >= Result_Sh.Range("C4") Then
        col_num = 1
    Else
        col_num = 2
    End If
    
    i = 2
    j = 6
    k = 6
    
    Do Until Comparison_Sh.Cells(i, col_num) = ""
        If Comparison_Sh.Cells(i, 4) <> "" Then
            Result_Sh.Cells(j, 1) = Comparison_Sh.Cells(i, 4)
            j = j + 1
        Else
            Result_Sh.Cells(k, 2) = Comparison_Sh.Cells(i, 1)
            k = k + 1
        End If
        i = i + 1
    Loop

    i = 2
    j = 6
    k = 6
    
    Do Until Comparison_Sh.Cells(i, col_num) = ""
        If Comparison_Sh.Cells(i, 5) = "" Then
            Result_Sh.Cells(k, 3) = Comparison_Sh.Cells(i, 2)
            k = k + 1
        End If
        i = i + 1
    Loop
End Sub
Sub Return_All_Cells_To_A1()
    Dim objSheet As Worksheet
    For Each objSheet In ActiveWorkbook.Worksheets
        objSheet.Activate
        objSheet.Range("A1").Select
    Next
    ActiveWorkbook.Worksheets(1).Activate
End Sub

画面

画像がこんな感じです。


ダウンロードURL

S3の署名付きURLで記事作成から最長の12時間だけDL出来るようにしました。こちら(期限切れの為リンクなし)

※あまり需要ないと思いますが、URLの期限が切れた後に、もし欲しいという方がいらっしゃればコメント欄に一言いただければ、URLを再発行します。

需要があれば

ほんのりでも需要があれば、②のGoogleスプレッドシート上での方法でデータはスクレイピングがよろしくない場合、毎月なり四半期毎に手動で変更でもよいかな。などと思いました。

こんな風にやったらいいんじゃないというご意見があれば、そちらも(むしろこっちを)お待ちしています。


以上でした

ちなみに↑のような事ををしなくても良いように、AWSコンソールからも「フィードバックの送信 > 機能のリクエスト」に「こんなページ欲しいです」をリクエストしてみました。

お読みいただき有難うございました。

追記!

X(※Twitter)側でもshimoさんにコメントをいただき、
https://zenn.dev/shimo_s3/articles/e1a3021cd263a7

こちらを試させていただきました !
カンマで分割して眺めた所、こちらの方が断然網羅されていてわかりやすかったです。
教えてくださり有難うございます!とてもスッキリしました!

実行結果

$ python test.py
Services available in both ap-northeast-1 and ap-northeast-3:
Count: 162
['accessanalyzer', 'account', 'acm', 'acm-pca', 'aiq', 'apigateway', 'apigatewaymanagementapi', 'apigatewayv2', 'appconfig', 'appconfigdata', 'application-autoscaling', 'application-insights', 'appmesh', 'appsync', 'arc-zonal-shift', 'artifact', 'athena', 'aurora', 'autoscaling', 'awshealthdashboard', 'backup', 'backup-gateway', 'backupstorage', 'batch', 'chatbot', 'cloud9', 'cloudcontrolapi', 'cloudenduredisasterrecovery', 'cloudenduremigration', 'cloudformation', 'cloudfront', 'cloudhsmv2', 'cloudshell', 'cloudtrail', 'cloudwatch', 'codebuild', 'codecommit', 'codedeploy', 'compute-optimizer', 'config', 'controltower', 'datasync', 'directconnect', 'dlm', 'dms', 'drs', 'ds', 'dynamodb', 'dynamodbstreams', 'ebs', 'ec2', 'ecr', 'ecs', 'efs', 'eks', 'elasticache', 'elasticbeanstalk', 'elb', 'emr', 'es', 'eventbridge', 'events', 'fargate', 'firehose', 'fms', 'fsx', 'fsx-lustre', 'fsx-windows', 'gamelift', 'glacier', 'globalaccelerator', 'glue', 'guardduty', 'iam', 'identity-center', 'identitystore', 'imagebuilder', 'internetmonitor', 'kafka', 'kinesis', 'kinesisanalytics', 'kms', 'lakeformation', 'lambda', 'launchwizard', 'license-manager', 'license-manager-linux-subscriptions', 'license-manager-user-subscriptions', 'logs', 'macie', 'marketplace', 'mediaconnect', 'mediaconvert', 'medialive', 'meteringmarketplace', 'mgn', 'migration-hub-refactor-spaces', 'mq', 'network-firewall', 'networkmanager', 'notifications', 'oam', 'organizations', 'outposts', 'pi', 'pipes', 'polly', 'privatelink', 'ram', 'rbin', 'rds', 'redshift', 'redshift-data', 'resource-explorer-2', 'resource-groups', 'resourcegroupstaggingapi', 'rolesanywhere', 'rosa', 'route53', 'route53-application-recovery-controller', 'route53-recovery-control-config', 'route53resolver', 's3', 's3control', 's3outposts', 'sagemaker', 'sagemaker-featurestore-runtime', 'sagemaker-metrics', 'sagemaker-runtime', 'savingsplans', 'scheduler', 'schemas', 'secretsmanager', 'securityhub', 'service-quotas', 'servicecatalog', 'servicecatalog-appregistry', 'servicediscovery', 'ses', 'shield', 'snowball', 'sns', 'sqs', 'ssm', 'ssm-sap', 'sso-oidc', 'stepfunctions', 'storagegateway', 'sts', 'support', 'swf', 'synthetics', 'transfer', 'transitgateway', 'trustedadvisor', 'verifiedpermissions', 'vmwarecloudonaws', 'vpc', 'vpn', 'waf', 'waf-regional', 'xray']
---
Services available only in ap-northeast-1:
Count: 143
['amazonlocationservice', 'amplify', 'amplifybackend', 'amplifyuibuilder', 'appfabric', 'appflow', 'appintegrations', 'apprunner', 'appstream', 'aps', 'auditmanager', 'augmentedairuntime', 'budgets', 'chime', 'chime-sdk', 'chime-sdk-voice', 'cleanrooms', 'cloudsearch', 'codeartifact', 'codeguru-reviewer', 'codeguruprofiler', 'codepipeline', 'codestar', 'codestar-connections', 'codestar-notifications', 'cognito-identity', 'cognito-idp', 'cognito-sync', 'comprehend', 'connect', 'connect-contact-lens', 'connectparticipant', 'customer-profiles', 'databrew', 'dataexchange', 'datapipeline', 'dax', 'deeplens', 'detective', 'devops-guru', 'discovery', 'docdb', 'elastic-inference', 'elastictranscoder', 'emr-containers', 'emr-serverless', 'entityresolution', 'evidently', 'filecache', 'fis', 'forecast', 'forecastquery', 'freertosota', 'fsx-ontap', 'fsx-openzfs', 'gamesparks', 'grafana', 'greengrass', 'inspector', 'inspector2', 'iot', 'iot-data', 'iot-jobs-data', 'iot1click-projects', 'iotanalytics', 'iotdeviceadvisor', 'iotdevicedefender', 'iotdevicemanagement', 'iotevents', 'iotevents-data', 'iotfleethub', 'iotsecuretunneling', 'iotsitewise', 'iotwireless', 'ivs', 'ivs-realtime', 'ivschat', 'kafkaconnect', 'kendra', 'kendra-ranking', 'kinesisvideo', 'lex-models', 'lex-runtime', 'lexv2-models', 'lightsail', 'lookoutmetrics', 'lookoutvision', 'lumberyard', 'm2', 'managedblockchain', 'managedservices', 'mcs', 'mediapackage', 'mediapackage-vod', 'mediapackagev2', 'mediastore', 'mediastore-data', 'mediatailor', 'memorydb', 'mgh', 'migrationhuborchestrator', 'migrationhubstrategy', 'mwaa', 'neptune', 'nimble', 'opensearchserverless', 'opsworks', 'opsworkschefautomate', 'opsworkscm', 'opsworkspuppetenterprise', 'osis', 'personalize', 'pinpoint', 'pinpoint-sms-voice-v2', 'proton', 'qldb', 'qldb-session', 'quicksight', 'rds-data', 'rekognition', 'resiliencehub', 'robomaker', 'rum', 'sagemaker-edge', 'sdb', 'securitylake', 'serverlessrepo', 'signer', 'snow-device-management', 'snowcone', 'ssm-contacts', 'ssm-incidents', 'timestream', 'timestream-write', 'transcribe', 'translate', 'voice-id', 'vpc-lattice', 'wellarchitectedtool', 'wisdom', 'workdocs', 'workspaces', 'workspaces-web']
---
No services available only in ap-northeast-3
---
Services not available in either ap-northeast-1 or ap-northeast-3:
Count: 63
['ahl', 'applicationcostprofiler', 'billingconductor', 'braket', 'chime-sdk-identity', 'chime-sdk-media-pipelines', 'chime-sdk-meetings', 'chime-sdk-messaging', 'clouddirectory', 'codecatalyst', 'comprehendmedical', 'connectcampaigns', 'connectcases', 'costexplorer', 'cur', 'deepcomposer', 'deepracer', 'devicefarm', 'ecr-public', 'finspace', 'finspace-data', 'frauddetector', 'groundstation', 'health', 'honeycode', 'importexport', 'iot-roborunner', 'iot1click-devices', 'iotfleetwise', 'iottwinmaker', 'lookoutequipment', 'machinelearning', 'marketplace-catalog', 'marketplace-entitlement', 'marketplacecommerceanalytics', 'medical-imaging', 'mobile', 'monitron', 'mturk', 'omics', 'panorama', 'payment-cryptography', 'pinpoint-email', 'pinpoint-sms-voice', 'pricing', 'privatenetworks', 'rdsvmware', 'redshift-serverless', 'route53-recovery-readiness', 'route53domains', 'sagemaker-geospatial', 'simspaceweaver', 'sms', 'sms-voice', 'snowmobile', 'support-app', 'textract', 'tnb', 'verified-access', 'wam', 'wickr', 'workmail', 'workmailmessageflow']
---


Discussion

ueue

ダウンロードさせていただきました〜東京と大阪でこんなにも使えるサービスに差があるんですね!

katokato

先ほど「追記」を足しました〜
素晴らしいやり方を教えていただきほっこりしています。
是非リンク先の記事のやり方もローカルで試してみてもらえたら嬉しいです^^

code兄弟が使えるのにpipelineは使えなかったりと、大阪リージョンで未対応のリソースについて僕も色々見て考えてみたいと思った所でした

ueue

是非リンク先の記事のやり方もローカルで試してみてもらえたら嬉しいです^^

試してみます〜

code兄弟が使えるのにpipelineは使えなかったりと、大阪リージョンで未対応のリソースについて僕も色々見て考えてみたいと思った所でした

東京リージョンと大阪リージョンで用途に分けて使用していたので、私も色々と考えるきっかけになりました。ありがとうございます。

katokato

とんでもないです 何かわかったら是非教えてください^^