AWSクラウド環境でよく使うAWS CLIコマンドまとめ

こんにちは。エウレカAdventCalendar10日目の記事になります。

エンジニアの山下です。
新卒で入社して3年目の冬になりました。

入社したての頃、こんなことがありました。

先輩「linuxコマンドで一番何が好き?」
山下「awsです!」
先輩「…」
山下「…」

とまあ恥ずかしいクラウドゆとりっぷりを発揮してしまったのですが、それくらい大好きなAWSのコマンドラインインターフェイス「aws」コマンドの有用性を是非みなさまに知ってもらいたいと思い執筆させていただきます。

aws-cliとは

AWS コマンドラインインターフェイス(CLI)は、AWS サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこれらを自動化することができます。

公式サイトより引用

なぜaws-cliを使うのか?

上記の公式の説明にあるように、aws-cliを使うことによって、オペレーションの簡略化や、定型作業の自動化ができます。

例えば下記のような作業で消耗していないでしょうか?

– S3のアップロードを手作業でポチポチ
– EC2のIP取得するためにコンソール開いて…
– ピーク前にサーバの台数増やすために待機..

などなど..
aws-cliがあればこれらの作業を自動化できるので、人生が100億倍豊かになります。私はそう信じています。

また、Amazon Linux AMIを使っている場合、デフォルトで aws コマンドにパスが通っているので、すぐに利用できます。
使い方が分からない場合は、 aws コマンドに続けてtabキーを押下したり、 aws help と入力することで、すぐに使い方を調べることができます。
Amazon Linux AMI以外の環境でも、 aws コマンドをインストールすることでaws-cliを利用することができます。ローカルの開発環境からaws-cliを利用したい場合などにオススメです。
参考:インストール方法

すみません前置きが長くなってしまいましたが、
これ以降はタイトルにあるようによく使うコマンドとTipsをつらつらと書いていきます。

aws-cliの使い方

aws コマンドに続けてtabキーを押下したり、 aws help と入力することで、すぐに使い方を調べることができます

# aws-cliに対応しているサービス一覧を表示する
aws [tab]
## output >
autoscaling codecommit devicefarm elasticache kinesis route53 ssm
cloudformation codepipeline directconnect elasticbeanstalk kms route53domains storagegateway
cloudfront cognito-identity ds elastictranscoder lambda s3 sts
cloudhsm cognito-sync dynamodb elb logs s3api support
cloudsearch configservice dynamodbstreams emr machinelearning sdb swf
cloudsearchdomain configure ec2 glacier opsworks ses workspaces
cloudtrail datapipeline ecs iam rds sns
cloudwatch deploy efs importexport redshift sqs

# サービスコマンドごともできます(コマンド覚えるの辛いのでこれは便利ですね)
aws sqs [tab]
## output >
add-permission delete-message-batch list-queues send-message-batch
change-message-visibility delete-queue purge-queue set-queue-attributes
change-message-visibility-batch get-queue-attributes receive-message
create-queue get-queue-url remove-permission
delete-message list-dead-letter-source-queues send-message

# helpを参照する
aws help

# これもサービスコマンドごとにできます
aws s3 help

# それぞれのコマンドごともできます
aws autoscaling describe-tags help

AWS-CLIのSETUP

aws configure

AWS Access Key ID []:
AWS Secret Access Key []:
Default region name [ap-northeast-1]:
Default output format [json]:

formatをjsonにしておいて、 jq コマンドが入っていると捗ります。インストール方法

S3関連

# s3からデータを取ってくる
aws s3 copy s3://{{ bucketName }}/{{ objectPath }} ./

# s3にデータをあげる
aws s3 copy s3://{{ bucketName }}/{{ objectPath }} ./ --acl public-read

# s3上のファイルのパーミッションを変更する
aws s3api put-object-acl --acl public-read --bucket {{ bucketName }} --key {{ objectPath }}

# bucketを複製する
aws s3 sync s3://hogeBucket/images/ s3://fugaBucket/images/ --acl public-read

# logなどをフォルダごと一気に上げる
aws s3 sync aws s3 sync /var/www/application/logs/ s3://log-bucket/$HOSTNAME/ --acl private

AutoScaling関連

# AutoScaling Groupの確認
aws autoscaling describe-auto-scaling-groups

# スケジュールタスク一覧表示
aws autoscaling describe-scheduled-actions

# スケジュールタスク追加(時間UTCでの設定なのに注意!)
aws autoscaling put-scheduled-update-group-action \
--auto-scaling-group-name {{ asg_name }} \
--scheduled-action-name {{ action_name }} \
--recurrence "50 22 * * *" \
--min-size 4 \
--max-size 32 \
--desired-capacity 12

# スケジュールタスクを削除する
aws autoscaling delete-scheduled-action \
--auto-scaling-group-name {{ asg_name }} \
--scheduled-action-name {{ action_name }}

# オートスケールを止める
aws autoscaling suspend-processes --auto-scaling-group-name {{ asg_name }}

# オートスケールを開始する
aws autoscaling resume-processes --auto-scaling-group-name {{ asg_name }}

SNS関連

# topicにメッセージを送信する
aws sns publish \
 --target-arn {{ arn }} \
 --message {{ message }}

EC2関連

# インスタンス一覧表示
aws ec2 describe-instances

# 特定のタグがついたEC2のprivateIpを取得する
aws ec2 describe-instances \
 --filters "Name=tag:Name,Values={{ tagName }}" \
 --query "Reservations[*].Instances[*].PrivateIpAddress" \
 --output text

# 特定のELBにぶら下がっているEC2のprivateIpを取得する
aws ec2 describe-instances \
 --instance-ids `aws elb describe-load-balancers \
 --load-balancer-names {{ elbName }} | jq '.LoadBalancerDescriptions[0].Instances[].InstanceId' -r` \
 --query "Reservations[*].Instances[*].PrivateIpAddress" \
 --output text

# スポットインスタンスの現在の価格を取得する
aws ec2 describe-spot-price-history --instance-types c3.large --product-descriptions "Linux/UNIX" --max-items 1

<h2>DynamoDB関連</h2>

# スループットを変更する
aws dynamodb update-table \
 --table-name {{ tableName }} \
 --provisioned-throughput ReadCapacityUnits={{ readCapa }},WriteCapacityUnits={{ writeCapa }}

まとめ

今回ご紹介したものはほんの一部ですが、AWSのCLIはドキュメントも充実していて、Amazon Linux AMIであれば /opt/aws 以下に色々エイリアスも貼ってあったりするので、知っておくと作業がかなり捗ると思います。
是非とも楽しいAWSライフをお送りください。

  • このエントリーをはてなブックマークに追加

エウレカでは、一緒に働いていただける方を絶賛募集中です。募集中の職種はこちらからご確認ください!皆様のエントリーをお待ちしております!

Recommend

GOPATH を build.Default.GOPATH で適切に扱う

Go言語 (Tour of Go) で数値解析 〜ニュートン法〜