😀

JAWS-UG CLI専門支部 #231R (入門者向け) AWS CLI入門 ハンズオン復習

2021/10/16に公開

はじめに

10/14(木)JAWS-UG CLI専門支部 AWS CLI入門ハンズオンを実施しました。
今回は、AWS IDの取得、IAMリソースの取得、EC2リソースの取得について学びました。
CLI専門支部のハンズオンの中では、よくAWS IDやIAMリソースを取得して、返ってきた値を変数に格納する、といったことがよく行われます。慣れるとあまり意識しなくなりますが、今回のハンズオンでコマンドの動きを再確認することができました。

ハンズオンの復習とその過程で勉強した自分の解釈を、以下に書いていきます。
なお、今回の勉強会ではハンズオンは少なめで座学多めでしたが、いつもと変わらず学びの多い内容でした。座学パートとLTについては別記事に書きました。

https://amarelo24.hatenablog.com/entry/2021/10/16/120251

JAWS-UG CLI専門支部について

connpassのグループページをご参照ください。ほぼ毎週、AWS CLIのハンズオンが開催されています。

https://jawsug-cli.connpass.com/

今回の勉強会については以下を参照ください。ハンズオンの手順書も添付されています。

https://jawsug-cli.connpass.com/event/222880/

AWS IDの確認

AWS IDを確認するためには、stsコマンドを使います。
STS(AWS Security Token Service)について簡単に書くと、一時的セキュリティ認証情報を作成するサービスです。

aws sts get-caller-identity

上記コマンドを実行すると、以下のようなJSONを出力します。

queryオプションを使って、Accountの値のみを出力します。

aws sts get-caller-identity \
  --query 'Account' \
  --output text

これを実行すると、12桁のAWS IDが出力されます。AWS IDは漏洩すると大変なことになるので、実行結果は書きません。ブログには載せないよう十分に注意する必要があります。

IAMリソースの取得

ハンズオンでは、IAMグループ、IAMユーザ、IAMポリシの取得を行いました。
ここではIAMグループの一覧を取得する場合を書いていきます。

aws iam list-groups

listには複数のグループがあるので、サブコマンドはlist-groupsになります。実行すると、以下のようなJSONを表示します。

{
    "Groups": [
        {
            "Path": "/",
            "GroupName": "<グループ名>",
            "GroupId": "XXXXXXXXXXXXXXXXXXXXX",
            "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/aws-group-ad",
            "CreateDate": "2020-02-19T01:38:23Z"
        },
	{
            "Path": "/",
            "GroupName": "XXXXXXXXUsers",
            "GroupId": "XXXXXXXXXXXXXXXXXXXXX",
            "Arn": "arn:aws:iam::XXXXXXXXXXXX:group/XXXXXXXXUsers",
            "CreateDate": "2020-05-07T12:40:06Z"
        }
    ]
}

存在するIAMグループをテキスト形式で表示する場合、以下のコマンドを実行します。

aws iam list-groups
  --query "Groups[].GroupName" \
  --output text

グループ名がテキスト形式で以下のように表示されます。

<グループ名>    <グループ名>     <グループ名>

ここから特定のグループ名をtext形式で出力する場合は、以下のように書きます。

aws iam list-groups
  --query "Groups[?GroupName == \`${IAM_GROUP_NAME}\`].GroupName "
  --output text

と入力します。変数IAM_GROUP_NAMEにグループ名を入れておきます。変数に入れたグループ名と一致するグループがある場合は、そのグループ名を表示します。

EC2リソースの取得

VPCの一覧取得

VPCやEC2はリージョナルサービスのため、環境変数にリージョンを指定しておきます。東京リージョンの場合は、以下の通りです。

export AWS_DEFAULT_REGION='ap-northeast-1'

VPCの一覧を取得します。

aws ec2 describe-vpcs

以下のようなJSONが表示されます。

{
    "Vpcs": [
        {
            "CidrBlock": "x.x.x.x/16",
            "DhcpOptionsId": "dopt-xxxxxxxx",
            "State": "available",
            "VpcId": "vpc-xxxxxxxxxxxxxxxxx",
            "OwnerId": "XXXXXXXXXXXX",
            "InstanceTenancy": "default",
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-xxxxx-xxxxxxxxxxxxxxxxx",
                    "CidrBlock": "x.x.x.x/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "IsDefault": false,
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "handson-cloud9-vpc"
                }
            ]
        }
    ]
}

VPCのTagのKeyがNameの値(Value)を出力する場合、query オプションを使って出力します。

aws ec2 describe-vpcs \
  --query 'Vpcs[].Tags[?Key == `Name`].Value' \
  --output text

今回出力したJSONからは、handson-cloud9-vpcを抽出します。

EC2インスタンスIDの取得

上述のように環境変数にリージョンを格納します。インスタンスIDをテキスト形式で取得したい場合は、以下のように実行します。

aws ec2 describe-instances \
  --query 'Reservations[].Instances[].InstanceId' \
  --output text

インスタンスIDの一覧JSONを取得すると長くなるので、JSON表記については割愛しますが、aws ec2 describe-instancesを実行すると、ズラっと出力されます。

最後に

今回はリソース情報の取得がメインでしたが、リソースの作成や変更をできるコマンドを実行することもできます。これまでもCLI専門支部のハンズオンを通して様々なコマンドを実行してきましたが、挙動を理解していなかったり、ちゃんと覚えられていないものもありました。繰り返し受講することで理解度は深まるなぁと思いました。何にしても実践の繰り返しは大事ですね。今後も参加し続けていきたいと思いました!!

Discussion