スタック・オーバーフロー Asked on November 18, 2021
コマンドの結果を引数にしてコマンドを実行する alias を書きたいです
具体的には特定の name のついた ec2 に SSM ログインするコマンドを書きたいので
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(.Tags[].Value == "api") | .InstanceId'
このコマンド結果を最後につけて
aws ssm start-session --target <ここに結果を入れたい>
を実行する alias を作りたいです
alias api-login="aws ssm start-session --target $(aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(.Tags[].Value == "api") | .InstanceId')"
と定義してしまうと定義時に中身が展開されてしまって
api-login='aws ssm start-session --target i-xxxxxxxx'
となって値が固定されてしまいます
コマンド実行時に内側も実行したいのですがどう書けばいいでしょうか
ちなみにAWS CLIですが
aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(.Tags[].Value == "api") | .InstanceId'
はjq
を使わなくても
aws ec2 describe-instances --filters Name=tag-value,Values=api --query Reservations[*].Instances[*].[InstanceId] --output text
と書けますし、タグ名をきちんと指定すると
aws ec2 describe-instances --filters Name=tag:タグ名,Values=api --query Reservations[*].Instances[*].[InstanceId] --output text
と書けます。
Answered by sayuri on November 18, 2021
Shellじゃないのでオフトピかもしれませんが、awscli-aliases を使って AWSCLIのAliasにする方法もあります。設定ファイルは $HOME/.aws/cli/alias
にあるので $HOME/.aws/config
などと一緒に管理しておけば環境移行も楽だと思います。
api-login =
!f() {
target=$(aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(.Tags[].Value == "api") | .InstanceId')
aws ssm start-session --target $target
}; f
実行例
$ aws api-login
Starting session with SessionId: xxxxxx-00000000000000000
sh-4.2$ whoami
ssm-user
Answered by take88 on November 18, 2021
alias を使いたければ、ダブルクォートではなくシングルクォートで囲えば良いです。$(...)
の中身は、ダブルクォートだと文字列として評価される際に展開されますが、シングルクォートだとコマンドとして評価される際に展開されます。
ですが、このくらい複雑になるのであれば alias ではなくて shell の関数にする方がコードに説明がつけられて見やすくなりそうです。
api-login () {
local instance_id="$(aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(.Tags[].Value == "api") | .InstanceId')"
aws ssm start-session --target "${instance_id}"
}
Answered by nekketsuuu on November 18, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP