This page looks best with JavaScript enabled

[AWS] アカウントの有効リージョンを AWS CLI で確認する

 ·   ·  ☕ 3 min read  ·  ✍️ Inomaso

TerraformでAmazon GuardDutyを全リージョンで有効化するために、AWSアカウントの有効なリージョンをCLIで出力できないか調べたのでまとめてみました。

デフォルト有効リージョン


AWS公式ドキュメントのAWS リージョンの管理に以下のように記載されていました。

2019 年 3 月 20 日より前に導入されたリージョンはデフォルトで有効になっています。これらのリージョンで、リソースの作成と管理をすぐに開始できます。デフォルトで有効になっているリージョンは、有効または無効にできません。

基本的にはデフォルトで有効になっているリージョンさえわかれば問題ないとは思いますが、誰かが追加でリージョンを有効化しているかもしれないので、念の為コマンドで確認する方法も調べることにしました。

AWS CLIでリージョン確認


AWS CLIのコマンドもAWS リージョンの管理に記載されてました。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
% aws ec2 describe-regions --all-regions

{
    "Regions": [
        {
            "Endpoint": "ec2.af-south-1.amazonaws.com",
            "RegionName": "af-south-1",
            "OptInStatus": "not-opted-in"
        },
        {
            "Endpoint": "ec2.eu-north-1.amazonaws.com",
            "RegionName": "eu-north-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.ap-south-1.amazonaws.com",
            "RegionName": "ap-south-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.eu-west-3.amazonaws.com",
            "RegionName": "eu-west-3",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.eu-west-2.amazonaws.com",
            "RegionName": "eu-west-2",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.eu-south-1.amazonaws.com",
            "RegionName": "eu-south-1",
            "OptInStatus": "not-opted-in"
        },
        {
            "Endpoint": "ec2.eu-west-1.amazonaws.com",
            "RegionName": "eu-west-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.ap-northeast-2.amazonaws.com",
            "RegionName": "ap-northeast-2",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.me-south-1.amazonaws.com",
            "RegionName": "me-south-1",
            "OptInStatus": "not-opted-in"
        },
        {
            "Endpoint": "ec2.ap-northeast-1.amazonaws.com",
            "RegionName": "ap-northeast-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.sa-east-1.amazonaws.com",
            "RegionName": "sa-east-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.ca-central-1.amazonaws.com",
            "RegionName": "ca-central-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.ap-east-1.amazonaws.com",
            "RegionName": "ap-east-1",
            "OptInStatus": "not-opted-in"
        },
        {
            "Endpoint": "ec2.ap-southeast-1.amazonaws.com",
            "RegionName": "ap-southeast-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.ap-southeast-2.amazonaws.com",
            "RegionName": "ap-southeast-2",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.eu-central-1.amazonaws.com",
            "RegionName": "eu-central-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.us-east-1.amazonaws.com",
            "RegionName": "us-east-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.us-east-2.amazonaws.com",
            "RegionName": "us-east-2",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.us-west-1.amazonaws.com",
            "RegionName": "us-west-1",
            "OptInStatus": "opt-in-not-required"
        },
        {
            "Endpoint": "ec2.us-west-2.amazonaws.com",
            "RegionName": "us-west-2",
            "OptInStatus": "opt-in-not-required"
        }
    ]
}

有効リージョンはOptInStatusの値から判断できます。

デフォルトの有効リージョン


1
"OptInStatus": "opt-in-not-required"

追加の有効リージョン


1
"OptInStatus": "opted-in"

無効リージョン


1
"OptInStatus": "not-opted-in"

AWS CLIオプションで欲しい値のみ取得


AWS公式ドキュメントのコマンドそのままだと余計な出力結果が含まれてしまいます。
今回欲しい値はRegionNameのみなので、先程のコマンドに--filters--queryオプション等を追加すると必要な値のみ取得できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
% aws ec2 describe-regions --all-regions \
--filters "Name=opt-in-status,Values=opt*" \
--query "sort_by(Regions[].{Name:RegionName},&Name)" --output text

ap-northeast-1
ap-northeast-2
ap-south-1
ap-southeast-1
ap-southeast-2
ca-central-1
eu-central-1
eu-north-1
eu-west-1
eu-west-2
eu-west-3
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2

余談


--filtersのフィルター名の調べ方がわからなかったのでhelpオプションで確認したところ、詳細に記載されていました。
コマンドを調べるときに一番重要なのはヘルプ系のオプションだったということを思い出しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
% aws ec2 describe-regions --all-regions help

~
OPTIONS
       --filters (list)
          The filters.

          o endpoint  -   The   endpoint   of   the   Region   (for   example,
            ec2.us-east-1.amazonaws.com ).

          o opt-in-status    -    The    opt-in    status    of   the   Region
            (opt-in-not-required | opted-in | not-opted-in ).

          o region-name - The name of the Region (for example, us-east-1 ).

          (structure)
              A filter name and value pair that is used to return a more  spe-
              cific  list of results from a describe operation. Filters can be
              used to match a set of resources by specific criteria,  such  as
              tags,  attributes,  or  IDs. The filters supported by a describe
              operation are documented with the describe operation. For  exam-
              ple:

              o DescribeAvailabilityZones

              o DescribeImages

              o DescribeInstances

              o DescribeKeyPairs

              o DescribeSecurityGroups

              o DescribeSnapshots

              o DescribeSubnets

              o DescribeTags

              o DescribeVolumes

              o DescribeVpcs

              Name -> (string)
                 The name of the filter. Filter names are case-sensitive.

              Values -> (list)
                 The filter values. Filter values are case-sensitive.

                 (string)

       Shorthand Syntax:

          Name=string,Values=string,string ...

       JSON Syntax:

          [
            {
              "Name": "string",
              "Values": ["string", ...]
            }
            ...
          ]
~

まとめ


AWS CLIで有効リージョンを取得できたので、次回はTerraformでAmazon GuardDutyの有効化を試してみます。

Share on

comments powered by Disqus