【小ネタ】aws ec2 create-image コマンドの –dry-run オプションは必要な権限のチェックに使おう

2019.10.25

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

こんにちわ ttaka です。

バックアップ目的で起動中の EC2 インスタンスの AMI を AWS CLI を使って作成することありますよね。オプションを覚えきれないので help コマンドを見ながら進めていたのですが --dry-run オプションについて勘違いしてたので共有になります。

想定する読者

  • 起動中の EC2 インスタンスの AMI を AWS CLI を使って作成したい人
  • 運用担当などをしておりバックアップスクリプトなんかをよく書くよって人

勘違いしてたこと

help コマンドをよく読めば書いてあるのですが --dry-run は必要な権限があるかのチェックをしてくれます。ただし、インスタンス ID に不備がないかのチェックはしてくれません

--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 .

どういうこと?

例えば極端な例だとインスタンス ID が i-a などでも必要な権限が付与されていれば dry-run の結果としては Request would have succeeded とのメッセージが返ってくることを確認しました。

# aws ec2 create-image --instance-id i-a --name "AMI-cm-ttaka-20191025" --no-reboot --dry-run
An error occurred (DryRunOperation) when calling the CreateImage operation: Request would have succeeded, but DryRun flag is set.

じゃあ、権限の確認がしたいだけなのであれば --instance-id を付けなければいいのでは?と一瞬思ったのですが --instance-id--name は必須オプションのためエラーとなってしまいました。

# aws ec2 create-image --name "AMI-cm-ttaka-20191025" --no-reboot --dry-run
・・・
aws: error: argument --instance-id is required

最後に

実際の運用であればインスタンスのメタデータからインスタンス ID を取ってきて環境変数に代入して渡してあげる、cron などで定期実行する前に --dry-run を外して実行するなどをしていれば、実際に問題になることはないかなと思っています。

どちらかというと --dry-run という単語で思考停止してしまって「いい感じにチェックしてくれるんだ」となった私のが問題でした……ドキュメントちゃんと読もう!!

この記事がだれかのお役に立てば幸いです。