質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

2251閲覧

AWS CLIの処理を止めない方法

hi-roto

総合スコア8

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/09/07 02:51

編集2021/09/07 02:55

以下のような流れbashファイルを実行し、あるRDSから最新の自動バックアップのスナップショットの復元を行い、処理を行った後に、Dumpを取得してから別のRDSにデータを移行させ、復元したRDSを削除するという処理を実現させています。

実行環境
OS:Amazon Linux 2 AMI
AWSCLI:aws-cli/2.2.35 Python/3.8.8 Linux/4.14.243-185.433.amzn2.x86_64 exe/x86_64.amzn.2
ターミナル;iterm2

#自動バックアップしている最新のスナップショットを取得 SNAPSHOT_NAME=`aws rds describe-db-snapshots --query "reverse(sort_by(DBSnapshots[?DBInstanceIdentifier=='aws-metabase-db'],&SnapshotCreateTime))[0].DBSnapshotIdentifier"` # s/置換条件/置換文字/ 置換条件を置換文字に変換する。最後にgを付けた場合は置換条件に当てはまるすべての文字列が置換される SNAPSHOT_NAME=`echo $SNAPSHOT_NAME | sed "s/\"//g"` #スナップショットの復元 マスキング用RDSの作成 aws rds restore-db-instance-from-db-snapshot \ --db-snapshot-identifier $SNAPSHOT_NAME \ --db-instance-identifier "xxxxxxxxxxx" \ --availability-zone "ap-northeast-1a" \ --db-subnet-group-name "xxxxxxxxxxxxx" \ --vpc-security-group-ids "xxxxxxxxxxxx" \ --db-parameter-group-name "xxxxxxxxxxxxx" \ --db-instance-class db.t3.micro \ --no-multi-az \ --no-paginate # RDSが作成するまで待機 aws rds wait db-instance-available --db-instance-identifier "xxxxxxxxxxxxxxxxxxx" #[復元したRDSで処理実行] # DBの削除 aws rds delete-db-instance \ --db-instance-identifier "xxxxxxxxxxxxxxxxx" \ --skip-final-snapshot

処理については問題なく、行うことができるのですが、

aws rds restore-db-instance-from-db-snapshot (省略)

を行った際に、以下の画像のように、復元したRDSの情報がJSON形式で表示され、aws rds waitより以降の処理が止まってしまいます。

1 コマンド実行時の画面1
2 コマンド実行時の画面2

復元により、RDSが復元し、ステータスが利用可能に変更されても、処理が止まってしまいます。
コマンド画面上で[control]+cなどを押したりしないと次の処理に進みません。

この原因はなぜなのでしょうか?
どのようにしたら、処理を止めずに進めていくことができるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

aws cliのv2では、デフォルトで出力ページャーにlessを使うようになっています。
そのため、普通に実行すると標準出力のところで止まってしまいます。
手元で試してみましたが、--no-paginateは出力内容が多すぎる場合に絞るだけで出力ページャーはそのまま実行されるようなので意味がなさそうです。

とりあえず標準出力に全ての取得値を表示した上で進めたいのなら--no-cli-pagerを使ってください。
デフォルトを変えたいなら~/.aws/configで設定してください。

この辺りの話は下記ページが詳しいです。
AWS CLI のページ分割オプションの使用

また、標準出力は見えなくてもよく、どこかに内容を保存しておきたいのであれば標準出力をリダイレクトして適当なファイルに出力すると途中で止まらずにそのまま実行されます。
内容をファイルに保存しつつ表示もしたいのであればteeコマンドを使ってください。

ちなみに出力がjsonなのは自分でcliのデフォルト設定をjsonにしているからですね。
出力形式も様々に設定が可能です。

AWS CLI 出力フォーマットの設定

投稿2021/09/07 06:27

yu_1985

総合スコア7471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hi-roto

2021/09/07 08:07

`--no-cli-pager` こちらを使用して実行したところ、希望どおりの処理が実行できました。 ご丁寧にありがとうございました!! 勉強不足で、教えていただいた内容、再度学習させていただきます。 どうぞ、今後ともよろしくお願いいたします。
guest

0

画面2の内容を見る限り、 aws rds restore-db-instance-from-db-snapshot の実行結果の表示でページャー(moreless など)がブロッキングしてますね。

--no-paginate というオプションは aws コマンドには使えるようですが、サブコマンドには使えませんね。詳しくは aws help を見てみてください。以下のようにコマンド順が記載されています。

aws [options] <command> <subcommand> [parameters]

したがってコマンドは次のようになるのではないでしょうか。

aws --no-paginate rds restore-db-instance-from-db-snapshot \ --db-snapshot-identifier $SNAPSHOT_NAME \ --db-instance-identifier "xxxxxxxxxxx" \ --availability-zone "ap-northeast-1a" \ --db-subnet-group-name "xxxxxxxxxxxxx" \ --vpc-security-group-ids "xxxxxxxxxxxx" \ --db-parameter-group-name "xxxxxxxxxxxxx" \ --db-instance-class db.t3.micro \ --no-multi-az

--no-cli-pager というオプションも気になりますね。使ったことがないので具体的にどういう挙動になるかはわかりませんが…。

投稿2021/09/07 05:07

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hi-roto

2021/09/07 08:05

`--no-cli-pager` こちらを使用して実行したところ、希望どおりの処理が実行できました。 ご丁寧にありがとうございました!! またよろしくお願いいたいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問