AWS コマンドラインインターフェース

## AWS Security Token Service(STS)

### AWS アカウント ID 取得

```
$ aws sts get-caller-identity --query Account --output text
```

## IAM

### ユーザー一覧

```:
$ aws iam list-users
```

### ユーザー作成

```:
$ aws iam create-user --user-name ${user}
```

### ユーザーのアクセスキー作成

```:
$ aws iam create-access-key --user-name ${user} | jq -r '.AccessKey | .AccessKeyId, .SecretAccessKey'
```

### ユーザーのアクセスキー削除

```:
$ aws iam delete-access-key --user-name ${user} --access-key-id $(aws iam list-access-keys --user-name ${user} | jq -r '.AccessKeyMetadata[].AccessKeyId')
```

### ユーザーのインスタンスプロファイル表示

```:
aws iam get-login-profile --user-name ${user}
```

### ユーザーのインスタンスプロファイル削除

```:
aws iam delete-login-profile --user-name ${user}
```

### ユーザー削除

```:
$ aws iam delete-user --user-name ${user}
```

### ポリシー一覧

```:
$ aws iam list-policies | jq -r '.Policies[] | select(.PolicyName=="ALBIngressControllerIAMPolicy")'
```

### ポリシー削除

```:
arn=$(aws iam list-policies | jq -r '.Policies[] | select(.PolicyName=="ALBIngressControllerIAMPolicy") | .Arn')
aws iam delete-policy --policy-arn ${arn}
```

### ロールにアタッチされているポリシー一覧

```
$ aws iam list-attached-role-policies --role-name AmazonEKSFargatePodExecutionRole
```

### ロールにアタッチされているポリシーをデタッチ

```
aws iam detach-role-policy --role-name $ROLE_NAME --policy-arn $POLICY_ARN
```

### ロール削除

```:
$ aws iam delete-role --role-name ${role_name}
```

## ACM

証明書一覧

```:
$ aws acm list-certificates
```

## KMS

### エイリアス削除

```:
$ aws kms delete-alias --alias-name alias/xxxx
```

## VPC

### VPC一覧

```:
$ aws ec2 describe-vpcs | jq -r '.Vpcs[] | .VpcId, .Tags'
```

### サブネット一覧

```:
$ aws ec2 describe-subnets | jq -r '.Subnets[] | select(.Tags != null) | select(.Tags[]|select(.Key=="Name")|select(.Value=="xxxx-dev-private-subnet-1a")) | .SubnetId'
```

## Route53

### ホストゾーン一覧

```:
$ aws route53 list-hosted-zones
```

### ホストゾーン詳細

```:
$ aws route53 get-hosted-zone --id $(aws route53 list-hosted-zones | jq -r '.HostedZones[] | select(.Name=="hoge.com.") | .Id')
```

### レコードセット一覧

```:
$ aws route53 list-resource-record-sets --hosted-zone-id $(aws route53 list-hosted-zones | jq -r '.HostedZones[] | select(.Name=="hoge.com.") | .Id' | perl -pe 's/^\/hostedzone\/(.+)$/${1}/')
```

## ELB/ALB

### ロードバランサー一覧

```:
aws elbv2 describe-load-balancers | jq -r '.LoadBalancers[] | select(.VpcId=="vpc-XXXXXXXXXXXXXXXXX") | .LoadBalancerName'
```

## EC2

### AMI 検索

```
$ aws ec2 describe-images --owners amazon --region ap-northeast-1 --filters "Name=name,Values=amzn2-ami-hvm-2.0.????????-x86_64-gp2" "Name=state,Values=available" --query 'reverse(sort_by(Images[].{Name:Name, ID:ImageId, State:State},&Name))' --out table
---------------------------------------------------------------------------------
|                                DescribeImages                                 |
+------------------------+-----------------------------------------+------------+
|           ID           |                  Name                   |   State    |
+------------------------+-----------------------------------------+------------+
|  ami-0c3fd0f5d33134a76 |  amzn2-ami-hvm-2.0.20190618-x86_64-gp2  |  available |
|  ami-084040f99a74ce8c3 |  amzn2-ami-hvm-2.0.20190612-x86_64-gp2  |  available |
|  ami-00d101850e971728d |  amzn2-ami-hvm-2.0.20190508-x86_64-gp2  |  available |
|  ami-0f9ae750e8274075b |  amzn2-ami-hvm-2.0.20190313-x86_64-gp2  |  available |
|  ami-097473abce069b8e9 |  amzn2-ami-hvm-2.0.20190228-x86_64-gp2  |  available |
|  ami-05cd6c87a37390178 |  amzn2-ami-hvm-2.0.20190218-x86_64-gp2  |  available |
|  ami-0d7ed3ddb85b521a6 |  amzn2-ami-hvm-2.0.20190115-x86_64-gp2  |  available |
|  ami-0bab560bf1ee352f5 |  amzn2-ami-hvm-2.0.20190110-x86_64-gp2  |  available |
|  ami-0a2de1c3b415889d2 |  amzn2-ami-hvm-2.0.20181114-x86_64-gp2  |  available |
|  ami-00f9d04b3b3092052 |  amzn2-ami-hvm-2.0.20181024-x86_64-gp2  |  available |
|  ami-04d3eb2e1993f679b |  amzn2-ami-hvm-2.0.20181008-x86_64-gp2  |  available |
|  ami-06962fe7164c1fe7b |  amzn2-ami-hvm-2.0.20180924-x86_64-gp2  |  available |
|  ami-08847abae18baa040 |  amzn2-ami-hvm-2.0.20180810-x86_64-gp2  |  available |
+------------------------+-----------------------------------------+------------+
```


### インスタンス一覧

```:
$ aws ec2 describe-instances --filters "Name=tag:Name,Values=xxxx-dev-web" "Name=instance-state-name,Values=running" | jq -r '.Reservations[].Instances[] | .InstanceId, .State.Name, .Placement.AvailabilityZone'
```

### インスタンス起動

```:
$ aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxxxxxx
```

### インスタンス停止

```:
$ aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx
```

### セキュリティグループ一覧

```:
aws ec2 describe-security-groups | jq -r '.SecurityGroups[] | select(.Tags != null) | select(.Tags[]|select(.Key=="Name")|select(.Value=="xxxx-dev-alb")) | .GroupId'
```

### キーペア一覧

```:
$ aws ec2 describe-key-pairs
```

## ECR

### リポジトリ一覧

```:
aws ecr describe-repositories --region ap-northeast-1 | jq -r '.repositories[] | .repositoryArn, .repositoryName, .repositoryUri'
```

### イメージ一覧

```:
aws ecr describe-images --region ap-northeast-1 --repository-name nginx | jq -r '.imageDetails[]'
```

### イメージの削除

```:
aws ecr batch-delete-image --region ap-northeast-1 --repository-name nginx --image-ids imageTag=1.0.0
```

## EKS

### クラスタ一一覧表示

```:
$ aws eks list-clusters
```

### クラスター詳細

```:
aws eks describe-cluster --name xxxx-dev-cluster
```

### クラスターの Fargate プロファイル一覧

```:
$ aws eks list-fargate-profiles --cluster-name ${cluster_name}
```

### Fargate プロファイル削除

```:
$ aws eks delete-fargate-profile --cluster-name ${cluster_name} --fargate-profile-name ${fargate_profile_name}
```

## ECS

### クラスタ一ARN一覧表示

```:
$ aws ecs list-clusters   
```

## コンテナインスタンスARN一覧

```
aws ecs list-container-instances --cluster arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:cluster/xxxx-dev-cluster
```

```
aws ecs list-container-instances --cluster xxxx-dev-cluster
```

## コンテナインスタンス一覧

```
aws ecs describe-container-instances --cluster arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:cluster/xxxx-dev-cluster --container-instance arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:container-instance/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

```
aws ecs describe-container-instances --cluster xxxx-dev-cluster --container-instance xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

### サービスARN一覧表示

```:
$ aws ecs list-services --cluster arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:cluster/xxxx-dev-cluster
```

```:
$ aws ecs list-services --cluster xxxx-dev-cluster
```

### サービス一覧表示

```:
aws ecs describe-services --cluster xxxx-dev-cluster --services xxxx-dev-service | jq -r '.services[] | .serviceName, .desiredCount, .runningCount, .pendingCount'
```

### サービス更新(タスク数変更)

```
aws ecs update-service --cluster xxxx-dev-cluster --service xxxx-dev-service --desired-count 999
```

### サービス更新(タスク定義変更)

```
aws ecs update-service --cluster xxxx-dev-cluster --service xxxx-dev-service --task-definition xxxx-dev:999
```

### タスク一覧(xxxx-dev-cluster)

```
aws ecs list-tasks --cluster xxxx-dev-cluster
```

### タスク削除(xxxx-dev-cluster)

```
aws ecs stop-task --cluster xxxx-dev-cluster --task xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 
aws ecs stop-task --cluster xxxx-dev-cluster --task arn:aws:ecs:ap-northeast-1:xxxxxxxxxxxx:task/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

## Auto Scaling

### Auto Scaling グループ一覧

```:
aws autoscaling describe-auto-scaling-groups | jq -r '.AutoScalingGroups[] | select(.AutoScalingGroupName | startswith("xxxx-dev-web")) | .LaunchConfigurationName, .DesiredCapacity, .MinSize, .MaxSize'
```

```:
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names xxxx-dev-web | jq -r '.AutoScalingGroups[] | .LaunchConfigurationName, .DesiredCapacity, .MinSize, .MaxSize'
```

### Auto Scaling グループ更新

```:
aws autoscaling update-auto-scaling-group --auto-scaling-group-name xxxx-dev-web --min-size 1 --max-size 1 --desired-capacity 1
```

## Application Auto Scaling

### ターゲット一覧(ECS)

```:
aws application-autoscaling describe-scalable-targets --service-namespace ecs | jq -r '.ScalableTargets[] | select(.ResourceId | test("^.+dev-cluster.+dev-web-service$")) | .MinCapacity, .MaxCapacity'
```

### ターゲットの追跡スケーリングポリシーの作成(ECS)

```:
aws application-autoscaling register-scalable-target --service-namespace ecs --resource-id service/xxxx-dev-cluster/xxxx-dev-web-service --scalable-dimension ecs:service:DesiredCount --min-capacity 1 --max-capacity 2
```

## S3

### バケットの作成

```zsh:
$ aws s3 mb s3://hoge.bucket
```

### バケットの一覧表示

```zsh:
$ aws s3 ls                       
2015-08-14 10:15:08 hoge.bucket
```

### バケットの削除

```zsh:
$ aws s3 rb s3://hoge.bucket
```

### ファイルのコピー(ローカル → S3)

```:
$ aws s3 cp ~/text.txt s3://hoge.bucket/
```

### ファイルの削除

```:
$ aws s3 rm s3://hoge.bucket/test.txt
```

### ディレクトリの削除

```:
$ aws s3 rm s3://hoge.bucket/test_dir --recursive
```

### バケットポリシーの更新

```:
$ aws s3api put-bucket-policy --bucket hoge-tfstate --policy \
'{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"AWS":"arn:aws:iam::999999999999:user/terraformer"},
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::hoge-tfstate"
    },
    {
      "Effect": "Allow",
      "Principal": {"AWS":"arn:aws:iam::999999999999:user/terraformer"},
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3:::hoge-tfstate/terraform.tfstate"
    }
  ]
}'
```

## CloudFormation

### スタックの情報とリストの取得

```:
$ aws cloudformation list-stacks
```

### スタックの削除

```:
$ aws cloudformation delete-stack --stack-name my-stack
```

### テンプレートの検証

```:
$ aws cloudformation validate-template --template-url https://s3-ap-northeast-1.amazonaws.com/template.bucket/lambda_myfunc.json
```

## RDS

### DBクラスター一覧

```:
$ aws rds describe-db-clusters
```

### インスタンス一覧

```:
$ aws rds describe-db-instances \
  | jq -r '.DBInstances[] | select(.DBInstanceIdentifier | startswith("xxxx-dev")) | .DBInstanceIdentifier, .DBInstanceClass, .DBInstanceStatus'
```

DBエンジンのバージョンの確認

```:
$ aws rds describe-db-instances \
  | jq -r '.DBInstances[] | select(.DBInstanceIdentifier | startswith("xxxx-dev")) | .EngineVersion'
```

### DBパラメータグループ一覧

```:
$ aws rds describe-db-parameters
```

### DBパラメータグループのパラメータ値表示

```:
$ aws rds describe-db-parameters --db-parameter-group-name xxxxxxxx
```

### Aurora DB クラスターのスナップショット一覧

```:
$ aws rds describe-db-cluster-snapshots \
  | jq -r '.DBClusterSnapshots[] | select(.DBClusterIdentifier | startswith("xxx-dev")) | .DBClusterSnapshotIdentifier'
```

### DBクラスター&インスタンス作成(Aurora MySQL)

```
$ aws rds create-db-cluster \
  --database-name xxxx_dev_master \
  --db-cluster-identifier xxxx-dev-db-master-cluster \
  --engine aurora-mysql \
  --engine-version 5.7.12 \
  --port 3306 \
  --master-username xxxxxxxx \
  --master-user-password xxxxxxxxxxxxxxxx \
  --db-subnet-group-name xxxx-dev-vpc-xxxxxxxx \
  --vpc-security-group-ids "sg-xxxxxxxx" "sg-yyyyyyyy" \
  --enable-cloudwatch-logs-exports "error" "general" "audit" "slowquery"
$ aws rds create-db-instance \
  --db-instance-identifier xxxx-dev-db-master-0 \
  --db-instance-class db.r4.8xlarge \
  --engine aurora-mysql \
  --engine-version 5.7.12 \
  --auto-minor-version-upgrade \
  --db-cluster-identifier xxxx-dev-db-master-cluster \
  --db-parameter-group-name default.aurora-mysql5.7  \
  --no-publicly-accessible
```

### レプリカ作成(Aurora MySQL)

```:
$ aws rds create-db-instance \
  --db-instance-identifier xxxx-dev-db-master-1 \
  --db-instance-class db.r4.8xlarge \
  --engine aurora-mysql \
  --engine-version 5.7.12 \
  --auto-minor-version-upgrade \
  --db-cluster-identifier xxxx-dev-db-master-cluster \
  --db-parameter-group-name default.aurora-mysql5.7  \
  --no-publicly-accessible
```

### インスタンス削除

```:
$ aws rds delete-db-instance --db-instance-identifier xxxx-dev-db-master-1
```

### スナップショットからリストア(Aurora MySQL)

```
$ aws rds restore-db-cluster-from-snapshot \
  --db-cluster-identifier xxxx-dev-db-master-cluster \
  --snapshot-identifier xxxx-dev-db-master-final-snapshot \
  --engine aurora-mysql \
  --engine-version 5.7.12 \
  --port 3306 \
  --db-subnet-group-name xxxx-dev-vpc-xxxxxxxx \
  --vpc-security-group-ids "sg-xxxxxxxx" "sg-yyyyyyyy" \
  --enable-cloudwatch-logs-exports "error" "general" "audit" "slowquery"
$ aws rds create-db-instance \
  --db-instance-identifier xxxx-dev-db-master-0 \
  --db-instance-class db.r4.8xlarge \
  --engine aurora-mysql \
  --engine-version 5.7.12 \
  --auto-minor-version-upgrade \
  --db-cluster-identifier xxxx-dev-db-master-cluster \
  --db-parameter-group-name default.aurora-mysql5.7	 \
  --no-publicly-accessible
```

### インスタンスタイプ変更(即時反映)

```:
$ aws rds modify-db-instance --db-instance-identifier xxxx-dev-db-master-0 --db-instance-class db.r4.8xlarge --apply-immediately
```

### イベントサブスクリプション一覧

```:
$ aws rds describe-event-subscriptions
```

### Aurora DB クラスターのスナップショットの削除

```
$ db_cluster_snapshot_identifiers=($(aws rds describe-db-cluster-snapshots | jq -r '.DBClusterSnapshots[] | select(.DBClusterIdentifier | startswith("xxxx-dev")) | .DBClusterSnapshotIdentifier'))
$ for db_cluster_snapshot_identifier in "${db_cluster_snapshot_identifiers[@]}"; do aws rds delete-db-cluster-snapshot --db-cluster-snapshot-identifier ${db_cluster_snapshot_identifier}; done
```

### クラスターの削除保護の無効化

```
$ db_cluster_identifiers=($(aws rds describe-db-clusters | jq -r ".DBClusters[] | select(.DBClusterIdentifier | startswith(\"${project}-${env}-\")) | .DBClusterIdentifier"))
$ for db_cluster_identifier in ${db_cluster_identifiers[@]}; do
  echo ${db_cluster_identifier}
  echo 'before:'
  aws rds describe-db-clusters | jq -r ".DBClusters[] | select(.DBClusterIdentifier == \"${db_cluster_identifier}\") | .DeletionProtection"
  echo 'after:'
  aws rds modify-db-cluster --db-cluster-identifier ${db_cluster_identifier} --no-deletion-protection | jq -r '.DBCluster.DeletionProtection'
done
```

## Elasticache

### クラスター作成(memcached)

```:
$ aws elasticache create-cache-cluster --cache-cluster-id xxxx-dev-cache --cache-node-type cache.r4.8xlarge --engine memcached --engine-version 1.4.34 --cache-parameter-group default.memcached1.4 --num-cache-nodes 2 --port 11211 --cache-subnet-group-name xxxx-dev-pri --security-group-ids sg-xxxxxxxx
```

### レプリケーショングループ作成(Redis)(※シャード数:1、各シャードのレプリカの数:1)

```
$ aws elasticache create-replication-group --replication-group-id xxxx-dev-cache --replication-group-description xxxx-dev-cache --cache-node-type cache.r4.large --engine redis --engine-version 4.0.10 --cache-parameter-group default.redis4.0 --num-node-groups 1 --replicas-per-node-group 1 --port 6379 --cache-subnet-group-name xxxx-dev-pri --security-group-ids sg-xxxxxxxx
```

### クラスター削除(memcached)(※スナップショット取得無し)

```:
$ aws elasticache delete-cache-cluster --cache-cluster-id xxxx-dev-cache
```

### レプリケーショングループ削除(Redis)(※スナップショット取得無し)

```:
$ aws elasticache delete-replication-group --replication-group-id xxxx-dev-cache
```

### クラスター一覧

```:
$ aws elasticache describe-cache-clusters
$ aws elasticache describe-cache-clusters \
  | jq -r '.CacheClusters[] | select(.Engine == "memcached" and (.CacheClusterId | startswith("xxxx-dev"))) | .CacheClusterId, .CacheNodeType, .CacheClusterStatus'
$ aws elasticache describe-cache-clusters \
  | jq -r '.CacheClusters[] | select(.Engine == "redis" and (.CacheClusterId | startswith("xxxx-dev"))) | .CacheClusterId, .CacheNodeType, .CacheClusterStatus'
```

### ノード情報の取得

```:
$ aws elasticache describe-cache-clusters --show-cache-node-info
$ aws elasticache describe-cache-clusters --cache-cluster-id xxxxxxxx --show-cache-node-info
```

### レプリケーショングループ一覧

```:
aws elasticache describe-replication-groups | jq -r '.ReplicationGroups[] | select(.ReplicationGroupId | startswith("xxxx-dev")) | .ReplicationGroupId, .CacheNodeType, .Status'
```

### レプリケーショングループのノード一覧

```:
aws elasticache describe-replication-groups --replication-group-id xxxx-dev-cache | jq -r '.ReplicationGroups[].NodeGroups[].NodeGroupMembers[] | .CacheClusterId, .ReadEndpoint.Address'
aws elasticache describe-replication-groups | jq -r '.ReplicationGroups[] | select(.ReplicationGroupId == "xxxx-dev-cache") | .NodeGroups[].NodeGroupMembers[] | .CacheClusterId, .ReadEndpoint.Address'
```

## DynamoDB

### 

### テーブル作成

```:
aws dynamodb create-table \
    --table-name \
        persons \
    --attribute-definitions \
        AttributeName=id,AttributeType=N \
    --key-schema \
        AttributeName=id,KeyType=HASH \
    --provisioned-throughput \
        ReadCapacityUnits=5,WriteCapacityUnits=5
```

### テーブル作成(JSONファイル読み込み)

スケルトンをベースにしてJSONを作成

```:
aws dynamodb create-table --generate-cli-skeleton > dynamodb_create_table_persons.json
vi dynamodb_create_table_persons.json
```


```:dynamodb_create_table_persons.json
{
  "TableName": "persons",
  "AttributeDefinitions": [
    {
      "AttributeName": "id",
      "AttributeType": "N"
    }
  ],
  "KeySchema": [
    {
      "AttributeName": "id",
      "KeyType": "HASH"
    }
  ],
  "ProvisionedThroughput": {
    "WriteCapacityUnits": 5,
    "ReadCapacityUnits": 5
  }
}
```

```:
aws dynamodb create-table --cli-input-json file://dynamodb_create_table_persons.json
```

### データ追加

```:
aws dynamodb put-item --table-name persons --item '{ "id": { "N": "1" }, "name": { "S": "tanaka" } }'
```

### データ追加(バッチ)

スケルトンをベースにしてJSONを作成

```
aws dynamodb batch-write-item --generate-cli-skeleton > batch_write_item_put_persons.json
vi batch_write_item_put_persons.json
```

```:batch_write_item_put_persons.json
{
    "persons": [
        {
            "PutRequest": {
                "Item": {
                    "id": {
                        "N": "2"
                    },
                    "name": {
                        "S": "suzuki"
                    }
                }
            }
        },
        {
            "PutRequest": {
                "Item": {
                    "id": {
                        "N": "3"
                    },
                    "name": {
                        "S": "yamada"
                    }
                }
            }
        }
    ]
}
```

```
aws dynamodb batch-write-item --request-items file://batch_write_item_put_persons.json
```

### データ削除

```
aws dynamodb delete-item --table-name persons --key '{"id": {"N": "1"}}'
```

### データ削除(バッチ)

スケルトンをベースにしてJSONを作成

```:
aws dynamodb batch-write-item --generate-cli-skeleton > batch_write_item_delete_persons.json
vi batch_write_item_delete_persons.json
```

```:batch_write_item_delete_persons.json
{
    "persons": [
        {
            "DeleteRequest": {
               "Key": {
                   "id": {
                       "N": "2"
                   }
               }
            }
        },
        {
            "DeleteRequest": {
               "Key": {
                   "id": {
                       "N": "3"
                   }
               }
            }
        }
    ]
}
```

```:
aws dynamodb batch-write-item --request-items file://batch_write_item_delete_persons.json
```

### テーブル一覧

```:
aws dynamodb list-tables
```

### テーブル削除

```:
aws dynamodb delete-table --table-name persons
```

## Elasticsearch

### ドメイン一覧

```:
$ aws es list-domain-names | jq -r '.DomainNames[].DomainName'
```

### ドメイン詳細

```
$ aws es describe-elasticsearch-domain --domain-name xxxx-dev-system-log
```

## Kinesis

### ストリーム一覧

```:
$ aws kinesis list-streams
```

### ストリーム情報の取得

```:
$ aws kinesis describe-stream --stream-name xxxxxxxx
```

### レコードの取得

```:
$ aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name xxxxxxxx
{
    "ShardIterator": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
$ aws kinesis get-records --shard-iterator xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

## Auto Scaling

### Auto Scaling グループ一覧

```:
$ aws autoscaling describe-auto-scaling-groups
```

## CloudWatch

### アラーム一覧

```
$ aws cloudwatch describe-alarms | jq -r '.MetricAlarms[]'
```

## CloudWatch Logs

### ロググループ一覧

完全一致

```:
$ aws logs describe-log-groups | jq -r '.logGroups[] | select(.logGroupName=="/aws/lambda/api-dev") | .logGroupName'
```

前方一致

```:
$ aws logs describe-log-groups | jq -r '.logGroups[] | select(.logGroupName | startswith("/aws/lambda")) | .logGroupName'
```

LIKE

```:
$ aws logs describe-log-groups | jq -r '.logGroups[] | select(.logGroupName | contains("dev")) | .logGroupName'
```

### ログストリーム一覧

最新の1件を取得

```:
$ aws logs describe-log-streams --log-group-name /aws/lambda/api-dev --query 'logStreams[?lastEventTimestamp!=`null`]' --order-by LastEventTime --descending --max-items 1 | jq -r '.[].logStreamName'
```

### ログ取得

最新のログストリームのログを取得

```:
$ LOG_GROUP_NAME=$(aws logs describe-log-groups | jq -r '.logGroups[] | select(.logGroupName=="/aws/lambda/api-dev") | .logGroupName') && \
LOG_STREAM_NAME=$(aws logs describe-log-streams --log-group-name ${LOG_GROUP_NAME} --query 'logStreams[?lastEventTimestamp!=`null`]' --order-by LastEventTime --descending --max-items 1 | jq -r '.[].logStreamName') && \
aws logs get-log-events --log-group-name ${LOG_GROUP_NAME} --log-stream-name ${LOG_STREAM_NAME}
```

## CloudWatch Events

### ターゲット一覧

```
$ aws events list-targets-by-rule --rule xxxx-xxxx
```

## WAF

### IPSet一覧(Global(CloudFront))

```
aws wafv2 list-ip-sets --scope=CLOUDFRONT --region=us-east-1
```