[ChromeOS] Crostini VMの再起動方法

crostiniのXがよく落ちるのでCrostini VMを再起動するケースがよくある。手順は簡単で、

  1. croshを起動
  2. vmc stop termina
  3. vms start termina
crosh> vmc list
termina
Total Size (bytes): 4176281600
crosh> vmc stop termina
crosh> vmc start termina

AWS Ruby SDKでCost Exploreの情報を取得する方法

aws-sdk version3での話です。

1. aws-sdkのCost Exploreのモジュールを読み込む

gem 'aws-sdk-costexplorer'

2. IAMユーザに請求情報のアクセス権を与える

上部のナビバーのアカウントをクリックして、請求情報のアクセスのeditをクリックしてIAMアクセスのアクティブ化をチェックして保存。

3. IAMユーザに必要なロールを設定して追加する

下記のロールを作成し(今回はGEtCostAndUsageのみ)、該当ユーザでロールを追加する

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ce:GetCostAndUsage",
      "Resource": "*"
    }
  ]
}

4. REPLでテスト

Rails cでコンソールを呼び出しテスト。各キーは設定済みとする。

初期化。us-east-1でのみ提供されている

c = Aws::CostExplorer::Client.new(region: "us-east-1") 

BlendedCostとUnblendedCostの差がわかりづらい。Unblendedの方が割引などを除いた実際の数値に近いという理解で良いのか。

ドキュメントを読み試行錯誤の結果、タグに紐づいたコストを引くことができた。


c.get_cost_and_usage({time_period: {start: "2018-09-01", end: "2018-09-15"}, granularity: 'DAILY', metrics: ['UnblendedCost'], filter: {tags: {key: 'UserId', values: ["1"]}}, group_by: [{type: 'DIMENSION' ,key: 'SERVICE'}] })
...
#<struct Aws::CostExplorer::Types::ResultByTime
time_period=#<struct Aws::CostExplorer::Types::DateInterval start="2018-09-10", end="2018-09-11">,
total={},
groups=
[#<struct Aws::CostExplorer::Types::Group keys=["EC2 - Other"], metrics={"UnblendedCost"=>#<struct Aws::CostExplorer::Types::MetricValue amount="0.1999999992", unit="USD">}>,
#<struct Aws::CostExplorer::Types::Group keys=["Amazon Elastic Compute Cloud - Compute"], metrics={"UnblendedCost"=>#<struct Aws::CostExplorer::Types::MetricValue amount="0.0192", unit="USD">}>],
estimated=true>,
#<struct Aws::CostExplorer::Types::ResultByTime
time_period=#<struct Aws::CostExplorer::Types::DateInterval start="2018-09-11", end="2018-09-12">,
total={},
groups=
[#<struct Aws::CostExplorer::Types::Group keys=["EC2 - Other"], metrics={"UnblendedCost"=>#<struct Aws::CostExplorer::Types::MetricValue amount="0.1999999992", unit="USD">}>,
#<struct Aws::CostExplorer::Types::Group keys=["Amazon Elastic Compute Cloud - Compute"], metrics={"UnblendedCost"=>#<struct Aws::CostExplorer::Types::MetricValue amount="0.110821", unit="USD">}>],
...

注意

Cost ExploreのAPIリクエストにはお金がかかりそう。。

vim-session プラグインを使ってtabごとsessionを保存する方法

tmuxで指定したwindow/paneから始める方法 [再起動も安心]を説明したが、Vimのセッション情報もタブを含めてRestoreしたい。 最初は全て自動で保存しようとしたが、必要に応じて自分でセッションを保存した方が実用的。ブラウザのタブのように、使わないタブが残ってしまい必要のないタブが溜まっていってしまう。

vimはデフォルトでセッションの管理が可能だが、細かいところまで残すにはvim-sessionを使った方が良い。

.vimrc

" session
call dein#add('xolox/vim-misc')
call dein#add('xolox/vim-session')

let g:session_autosave = 'no'
let g:session_autoload = 'no'
nnoremap <Leader>ss :SaveSession

SaveSessionとタイプするのが面倒なのでノーマルモードで\ssでSaveSessionを呼び出す。

例えば、セッションをProject毎に保存する場合は、引数のセッション名にプロジェクト名を指定することでプロジェクトごとのセッションの作成が可能。

: SaveSession <session name>

.vim/sessions/<session name>.vimに保存されるのでこれをvimの引数として呼び出せばよい。

$ vim -S /home/shohey1226/.vim/sessions/gauss.vim

実際は、tmuxの起動スクリプトに書いておけば良い。

tmux send-keys -t $session:1 "cd ~/git/Gauss; vim -S $HOME/.vim/sessions/gauss.vim" C-m

tmuxで指定したwindow/paneから始める方法 [再起動も安心]

PCの再起動後にTmuxのwindowやpaneを自動的にある所定のものにしたい。tmux-resurrecttmux-continuumを試した試したがうまい具合にシャットダウン前の状態にしてくれないケースがあったので、それなら常に同じ状態からスタートした方が効率が良い気がしてきたので、そのような運用にしてみる。

tmuxのwindow作成などはtmuxコマンドから呼べるので設定ファイルを書くことができる。starttmux.shというスクリプトを作ってこれを.bashrcから呼べば良い。

session="work"

tmux has-session -t $session 2>/dev/null
if [ "$?" -eq 1 ] ; then
  # set up tmux
  tmux start-server

  # create a new tmux session, starting vim from a saved session in the new window
  tmux new-session -d -s $session

  # Select pane 1, set dir to api, run vim
  tmux selectp -t 1
  tmux send-keys "cd ~/git/Gauss; rails s" C-m

  # Split pane 1 horizontal by 65%, start redis-server
  tmux splitw -v -p 50
  tmux send-keys "cd ~/git/Gauss; rails c" C-m

  # create a new windows
  tmux new-window -t $session:1
  tmux send-keys -t $session:1 "cd ~/git/Gauss; vim -S $HOME/.vim/sessions/gauss.vim" C-m

  tmux new-window -t $session:2
  tmux send-keys -t $session:2 "cd ~/git/Gauss" C-m

else
  echo "session found. connecting..."
fi


# return to main vim window
tmux select-window -t $session:2

# Finished setup, attach to the tmux session!
tmux attach-session -t $session

*C-mはtmuxでの改行

でこれを.bashrcの末尾追加すれれば毎回同じtmuxからスタートできる。

# attach automatically when it's opened
[ -z "$TMUX" ] && . "$HOME/starttmux.sh"