1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

5年たったらAWS CLIの薄いラッパーコマンドが出来ていた

Last updated at Posted at 2020-07-30

AWSを使い始めた頃からAWS CLIのコマンドを打つのが面倒になると作成していたスクリプトがある。自分のMacでしか動かすつもりがなかったが、Macを交換するタイミングでGitHubに上げた。
今どき使わない機能もあるが1年に1,2つくらい追加してきた感じ。出来はよくないが面倒だと思った時に追加してきたので面倒がなくなった。面倒なときにしか追加されないのでほとんどのawsコマンドが網羅されていない。

同じようなコマンドが同じ名前で存在したのでネーミングセンスがないっぽい。
左手で完結したかっただけなんだ・・・

特徴

  • awsコマンドと同じような使い方
  • bashで書かれている
  • コピペ駆動開発なので作り方を思い出す必要がない
  • エラー処理が雑で Ctrl-C で止まらないことがある
  • 自分のことしか考えていないので他人のPCで動かない可能性がある
  • .doc にヘルプが書けるが自作なので見ない
  • コンプリーターがある(bashのみ)
  • aws-cli, jq, pecoに極度の依存。コマンドによってはnode.jsとssh-keygenに依存。

コマンド

この中からいくつか紹介。
ディレクトリとファイルがそのままサービスとコマンドになっている。

$ saw
Usage: saw <service> <command>
dynamodb
└── count-table
ec2
├── list-instances
└── login-instance
iam
└── assume-role
kinesis
├── list-shards
├── list-streams
├── merge-shards
└── split-shard
lambda
├── exec-local
├── invoke-function
└── update-function
s3
├── get-object-by-version-id
└── list-object-versions
ssm
├── start-session
└── start-ssh-session
waf
└── list-ip-sets

s3

get-object-by-version-id

指定したS3オブジェクトのバージョンを peco でリストして、選択したバージョンをダウンロードする。

s3getobjectbyversionid.mov.gif

ec2

list-instances

EC2インスタンスのリストを peco でリストする。
単体では使わない。他のコマンド内部でよく使う。
リストは60分間キャッシュされるので2回目以降は速い。
--no-cache オプションを付けると最新のリストを取得し、キャッシュを更新する。
キャッシュの場所が ~/.saw 以下なので、~/.cache/saw 以下にしたほうがいいのかも。

ec2listinstances.mov.gif

kinesis

list-shards

Kinesis Streamのシャードを peco でリストする。
2 < 32 < 4 はシャード 2 から 3 と 4 にsplitしたということ。
お察しの通り 3+4 > 5 はシャード 3 と 4 を 5 としてmergeしたということ。
CLOSED なシャードは読み込み限定になり、しばらくして削除されたと思う。うろ覚え・・・
最後の巨大な数字2つは、キーの下限と上限。この2つが連続していないとmergeできない。

kinesislistshards.png

split-shard

peco で選択したシャードをsplitする。

kinesissplitshards.mov.gif

merge-shards

peco で選択した2つのシャードをmergeする。
隣接したシャードしかmergeできないのはKinesisの仕様通り。
Ctrl+space で複数選択できる(peco の機能)。

kinesismergeshards.mov.gif

ssm

start-ssh-session

一時キーペアを作成しEC2 Instance Connectで公開鍵を転送した後、Session Manager経由でEC2インスタンスにSSH接続する。キーペアは切断時に破棄される。
--forward パラメータでポートフォワーディングが出来る。
--forward remote でリモートポートフォワーディング。
--forward local でローカルポートフォワーディング。
今のところ接続先を経由してRDSに接続したりは出来ない。localhost固定になっているところを動的にすればすぐできるかも。

ssmstartsshsession.mov.gif

lambda

exec-local

AWS SAMがなかった頃にローカルでLambdaの開発がしたくて作ったコマンド。
Lambdaの設定をAWSから取得してくるので、コードなしでもファンクションが存在しないと動作しない。設定が取得できたら割り当てられたIAMロールをAssumeRoleして実際のファンクションの権限でコードを実行する。

lambdaexeclocal.png

iam

assume-role

AWS CLIにAssumeRoleしてくれる機能が実装されてなかった頃に作ったコマンド。
↓こちらの記事で書いたやつだったと思う。
MacからAWSにアクセスする時はAssumeRoleすることにした

その他のコマンド

  • dynamodb count-table
    セグメントごとにレコードをカウントして加算しているようだが並列処理になってない気がする。なんのために作ったのか思い出せない。

  • ec2 login-instance
    インスタンスを peco でリストして、選択したインスタンスに指定したキーペアでログインする。もう使う機会がなくなった。

  • ssm start-session
    Session Manager単体でEC2インスタンスにアクセスする。最近は start-ssh-session しか使ってない。

などなど。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?