AWS CLIでコマンドに’dry run’オプションを付けて使用してみた。

2021.09.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、イムチェジョンです。
今回のブログではAWS CLIで--dry -runオプションをつけてEC2を作成してみました。

アジェンダ

  1. --dry -runオプションの機能定義
  2. --dry -runを実行
  3. まとめ

1. --dry -runオプションの機能定義

まず、下のコマンドを実行し、Amazon EC2を作成する作業に対する詳しいヘルプを表示します。
ヘルプには、入力パラメータ、使用可能なフィルター、出力に含まれる項目の説明、一般的な変形を入力する方法などを見れます。

$ aws ec2 run-instances help

私が探したいのは--dry -runに対する情報なので、[OPTIONS]の部分で--dry -runを探します。

OPTIONS
    --dry-run | --no-dry-run (boolean)
    Checks whether you have the required  permissions  for  the  action, without actually making the request, and provides an error response.
    If you have the required permissions, the error response is DryRun-Operation . Otherwise, it is UnauthorizedOperation .

説明で見れるように--dry -runオプションの機能は以下のように使われます。

  • 実際にリクエストせずに作業に必要な権限があるかを確認してエラー応答を提供する
    • 必要な権限がある場合、エラー応答はDryRunOperationになる
    • 必要な権限がない場合、UnauthorizedOperationエラーが表示される

2. --dry -runを実行

今回は実際に--dry -runオプションを使ってみましょう。

下準備(EC2構築)

EC2は以下の設定で作成します。

AMI:Amazon Linux 2 AMI
インスタンスタイプ:t2.micro
セキュリティグループ:SSH 22
IAM ロール:EC2RoleIAM
キーペア : 既存キーペア及び新しいキーペアの中で選択

--dry -runオプション実行

実際に実行してみましょう。

コマンドのインスタンスの情報は以下のように設定しました。
--image-id(AMI ID):ami-0a0de518b1fc4524c
--instance-type(インスタンスタイプ):t2.micro

コマンドを実行してみます。

$ aws ec2 run-instances --dry-run --image-id ami-0a0de518b1fc4524c --instance-type t2.micro

An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. 
Encoded authorization failure message: n6bxSs-tabJec7mc28q7GITyi1XuzGCj7VVjucXaSYKqZWKter5K6Uox9e3-j9PylvUIgxudD0MEw7Sm91pY4DDfCAyy9Li0CHyU10eB-9PRh2gNqUKJqlTpqzOnXhrcfFiblkuT1FK4V6T0R8iBDS6fxcI3AunxUm5M0y8vSvG62dvyu3HZNJcORQcIoBfMMShqguE8ptgJG44aAR1Wh__V4CcBk_KqZiBSEdH8twnW3eZx3HVq7K4JspaxaNwCA_LA0azE_KVy1QDqmhNThZp-7koBp_PzW-tYFlUe1KRFxkxzhf-MRRr6YxJK_IB4z_fzK7si3LgidqU-TNdKQpHAXpKkMVBovXtt9JvXsUWhpsoq6SGZRc-IbbYeNlTJWN5h23D4jGMnykS6pENAAe_X4EoQynbrW0j9T9Iyvzsose_CZfiF8CKA2uL8uoWHQij_jkNQhvr-mHWOcexKBBGvxSkyNiO-FaokPicMqFIDJV4HLenv0MbzxDO6bzJJ7GFN-uCAgFYc_q8ksS10k0J8jpzuEKv8YA65iLxghSCksWWp2h08UfW268N_-FJI4R8tsbzJUs_A64-PJ0lel6hC1rIqM9xOI8r3PGIeEzkXl9dflvvvl757qdT_3DAqQbSHO1Kd20oEUPiOE58z6Ljwkf6sCDZHF23F92bJRydzfN0lu-_jyM5qfqcoTiI

結果でUnauthorizedOperationエラーが出ました。
上の定義にあるように必要な権限(RunInstances)がないのでエラーが出ています。
なので、IAMロールを確認する必要がありますね。

IAMの設定

IAMロールにEC2を作成するポリシーがありませんでした。

なので、EC2を作成できるようにポリシー作成し、IAMロールにアタッチしましょう。

ポリシー作成

まず、ポリシーを作成しましょう。

サービス:EC2
アクション:RunInstances
リソース:すべてのリソース

ポリシー名を入力して作成を完了します。

ポリシーのJSONを確認してみると、RunInstancesが追加されています。

IAMロールにアタッチ

作成したポリシーをIAMロールにアタッチします。

上で作成したポリシーを選択します。

アタッチされたのが確認できます。

IAM設定後、--dry -runオプション実行

IAMの設定もできたので、もう一回実行をしてみましょう。

$ aws ec2 run-instances --dry-run --image-id ami-0a0de518b1fc4524c --instance-type t2.micro

An error occurred (DryRunOperation) when calling the RunInstances operation: Request would have succeeded, but DryRun flag is set.

今回はDryRunOperationのエラーが表示されました。上の説明でわかるように必要な権限がある場合、このエラーが表示されます。
エラーの内容を見ると、リクエストは成功しましたが、DryRunフラグが設定されているので、EC2の作成はされてないのが確認できます。

3. まとめ

今回はインスタンシ作成の際、--dry -runオプションを付けてみました。
--dry -runオプションを使うことで権限の有無が確認できるので、有用なオプションだと思います。