よく使うコマンドをまとめる(自分用メモ)

Linux(shellコマンド)

ファイル検索

dir/ 配下の.py または .ipynb ファイルで hogehoge を含むものを検索したい
grep -r --include='*.py' --include='*.ipynb' "hogehoge" dir/
dir/ 配下の特定の文字列を含むファイルを一括で置換したい

例えば、 calender のタイポを一括で修正したい場合

find dir/* \( -name "*.py" -o -name "*.ipynb" \)  | xargs sed -e 's/calender/calendar/g' -i
  • mac OS の場合, POSIX sed が標準で入っているので上書きしてしまってから実行するとよい
brew install gnu-sed --with-default-names

git

複数に分かれたコミットをまとめたい

すでに作成したコミットに対して、些細な修正を加えた場合など

git add hoge.py
git commit -m "Add important method"
git add hoge.py
git commit -m "些細な fix"

git rebase -i HEAD~~
# "些細な fix" のコミットを `pick` から `f` (`fixup`) に変更することで、直前のコミットにまとめられる
git push -f origin feature/branch_name

git rebase を行うとそれ以後のハッシュ値が変更されてしまうので、main ブランチを marge した後は行わないのが無難

terraform

tfstate ファイルから hoge.tf に含まれるリソースを一括で削除する
grep "resource" hoge.tf | sed -e "s/resource //g" -e "s/\" \"/\./g" -e "s/\"//g" -e "s/ {//g" | xargs -I arg terraform 
state rm arg

count や for_each で作成したリソースがどうなるかは検証していません

tfstate ファイルに稼働中のリソースを紐づける

事前に resource "aws_subnet" "example".tf ファイルに記載しておく

terraform import aws_subnet.example subnet-01234567890123456

コンソールから手作業で作ったリソースを紐づけるときに便利

tfstate ファイルに紐づいたリソースの状態を見る
terraform state show aws_subnet.example

ここから適当にコピペして .tf ファイルに転記すると手作業で作ったリソースを削除せずにIaCができるが、以下に注意

  • 他のリソースの値がリテラルで入る( instance_id = i-hogehoge などとされてしまう)ので、aws_instance.example.id などで書き換える
  • idarn などの自動的に決まるべき値も出力されるため、適宜削除する必要がある
  • セキュリティーグループルールなど、忘れがちなリソースがあるので、検証環境で横着せずいったん削除してから作り直しておくと安心
tfstate ファイルの内容を全件見る
terraform show -json | jq . | tee current_tfstate.json

パスワードなどの機微情報も見えてしまうので、作業したらファイルを消すこと、パブリックな環境では実行しないこと

AWS

SSMを使って踏み台サーバーを経由せずにSSHトンネリングを実現する
aws ssm start-session \
    --target i-hogehoge --document-name AWS-StartPortForwardingSession \
    --parameters "portNumber=80, localPortNumber=56789" \
    --region ap-northeast-1 --profile profile_name```

この状態で localhost:56789 にアクセスするとトラフィックi-hogehoge の 80番ポートにリダイレクトされる

windows(command prompt)

AWS

SSMを使って踏み台サーバーを経由せずにSSHトンネリングを実現する
aws ssm start-session --target i-hogehoge --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389, localPortNumber=13389" --region ap-northeast-1 --profile profile_name

この状態で「リモートデスクトップ接続」から localhost:13389 に接続すると i-hogehoge にRDP接続することができる。

  • i-hogehoge は Windowsマシンであること
  • ログイン時に求められるユーザー名は Administrator, パスワードはEC2のコンソール画面から取得する
  • ちなみに、Windows マシンは Linux マシンに比べて(同一スペックの場合)割高です