AWS
aws-cli
NIJIBOXDay 18

AWS CLIのメリットや使いどころ

AWSの設定・操作はブラウザから行っている方が大半だと思いますが、
今回はコマンドラインからAWSの操作が出来る「AWS CLI」にフォーカスして、
AWS CLIを触って1週間の素人が、メリットや使いどころを紹介していきます。

  • 普段AWSを使っているけど、AWS CLIは触ったことがない
  • AWS CLIを触ったことはあるが、活用しきれていない

こんな方にとって、少しでも参考になれば幸いです。

AWS CLIとは

Amazonさんの紹介文章を引用します

サービスを管理するための統合ツールです。ダウンロードおよび設定用の単一のツールのみを使用して、コマンドラインから複数の AWS サービスを制御し、スクリプトを使用してこれらを自動化することができます。
https://aws.amazon.com/jp/cli/

手元のパソコンに「AWS CLI」というものをインストールすれば、
コマンドラインからAWS各サービスの制御が出来るよ、というものです。
Pythonが入っていれば、このコマンドだけでインストール出来ちゃいます。

$ sudo pip install awscli

「AWS CLI」を導入すれば、通常ブラウザで操作しているような、
 ・ローカルPCにある画像ファイルをS3にアップロードする
 ・起動しているEC2インスタンスを停止する
こんなことがコマンドベースで行えます。

イメージをもう少し具体的にするため、S3へのファイルアップ方法を書いてみます。
ローカルPC上にこういうファイルがあったとします。

$ ls -l
-rw-r--r--  1 local_user  staff  0 12 14 07:47 access.log
-rw-r--r--  1 local_user  staff  0 12 14 07:47 error.log

試しにこの中のerror.logをS3にアップロードしてみましょう。
AWS CLIのコマンドは、アップしたいファイル名とアップ先のバケットを指定するだけ。

$ aws s3 cp error.log s3://otameshi201712
upload: ./error.log to s3://otameshi201712/error.log

この通り、error.logがS3上にアップロードされていますね。
image1.png

AWS CLIのメリットや使いどころ

ブラウザで出来る操作を、わざわざ「AWS CLI」を使ってやるメリットは何なのか。
ざっくり触った感想としては下記の2点で、
 ・AWS上でやっている操作を自動化したい
 ・AWS上のサービスと連携したツールを作りたい
「一定のルールに従ったAWS上の繰り返し作業をシェルスクリプト化出来る」点がメリットのように感じます。
「AWS CLI」を使ってEC2インスタンスを作成をすることも出来ますが、
設定することが多い=コマンドの引数が多くて辛い。。。となってしまうので、
AWS各サービスの構築作業はブラウザ経由で、繰り返し作業が発生する際に、
「AWS CLI」の利用を検討するのが良さそうです。

サンプルスクリプト

1.ログファイルをzip化してバックアップ

S3のlogsディレクトリに溜まっているログをzip化し、S3のbackupディレクトリにバックアップを取ります。
このスクリプト自体の実用性は低いですが、zip化する箇所を応用すれば、Adobe製品のスクリプトと組み合わせて、画像や動画加工も出来そうです。

backup.sh
#!/bin/bash

# S3からログファイルをダウンロード
aws s3 cp  s3://otameshi201712/logs ./temp --recursive

# ダウンロードしたログファイルをzip化
for LOG_NAME in ./temp/*.log
do
  zip $LOG_NAME.zip $LOG_NAME
  rm $LOG_NAME
done

# zip化したログファイルをS3にアップロード
aws s3 cp ./temp s3://otameshi201712/backup --recursive
rm ./temp/*

2.EC2/RDSインスタンスの立ち上げ・停止

EC2もRDSも従量課金なので、使わない時間帯は止めておくと節約できますね。
AWSのlamdaを使えば、定時間にインスタンスの起動・停止が行えますが、
これらのコマンドをまとめておくことで、任意のタイミングでコントロールができます。

▼インスタンス立ち上げ用

start.sh
#!/bin/bash
aws ec2 start-instances --instance-ids インスタンスID
aws rds start-db-instance --db-instance-identifier インスタンス名

▼インスタンス停止用

stop.sh
#!/bin/bash
aws ec2 stop-instances --instance-ids インスタンスID
aws rds stop-db-instance --db-instance-identifier インスタンス名

まとめ

「AWS CLI」を使うことで、サービスや業務における効率化の幅が広がりそうですね。
導入もとってもカンタンなので、一度お試しあれ!