見出し画像

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

#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 |
+------------------------+-----------------------------------------+------------+

インスタンス一覧

$ 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

バケットの作成

$ aws s3 mb s3://hoge.bucket

バケットの一覧表示

$ aws s3 ls                       
hoge.bucket

バケットの削除

$ 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"] \
 --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"] \
 --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": "hoge" } }'

データ追加(バッチ)

スケルトンをベースにして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

#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 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_NAM



この記事が参加している募集

スキしてみて

いつもサポートありがとうございます。 あなたの100円がモチベーションアップの起爆剤です。 毎日更新頑張ります Twitterはこちら https://twitter.com/7010Rei