awscliやaws-sdkでEC2インスタンスのTermination Protectionの情報を取得できるか試す
About
今のところterraform(v0.6.3)を使ってもTermination Protectionは設定はできません。運用上どうしてもデータがたまってしまうサーバには間違えて削除できないように設定をしていますが、terraformで立てた環境については忘れがちです。なので、cliやsdk使って取得できるか確認しました。
Termination Protectionとは
EC2インスタンスを簡単にTerminateできなくする設定です。Termiinateするには一手間かかるので、間違って消すということを防ぐことができます。(Terraformでも削除できません)
AWS EC2インスタンスを簡単に消せないようにする方法 - Qiita
準備
どちらも環境変数が必要なので、direnvを使って環境変数を設定しておきます。(aws-sdkの2系からはどこかにcredencialをおいておけばよかったような気もします)
$ cat .envrc export AWS_ACCESS_KEY_ID=XXX export AWS_SECRET_ACCESS_KEY=YYY export AWS_DEFAULT_REGION=ap-northeast-1
awscliを導入する
$ brew install awscli
$ aws help
# 何か出力されればok
aws-sdkを導入する
$ cat Gemfile # A sample Gemfile source "https://rubygems.org" # gem "rails" gem 'aws-sdk' $ bundle install --path vendor/bundle Fetching gem metadata from https://rubygems.org/............. Fetching version metadata from https://rubygems.org/.. Resolving dependencies... Installing multi_json 1.11.2 Installing jmespath 1.0.2 Installing aws-sdk-core 2.1.20 Installing aws-sdk-resources 2.1.20 Installing aws-sdk 2.1.20 Using bundler 1.10.6 Bundle complete! 1 Gemfile dependency, 6 gems now installed. Bundled gems are installed into ./vendor/bundle.
やってみる
aws cli
$ aws ec2 describe-instance-attribute --instance-id <instance-id> --attribute disableApiTermination { "InstanceId": "<instance-id>", "DisableApiTermination": { "Value": true } }
aws-sdk
[2] pry(main)> require 'aws-sdk' => true [3] pry(main)> ec2 = Aws::EC2::Client.new(region: 'ap-northeast-1') => #<Aws::EC2::Client> [4] pry(main)> ec2.describe_instance_attribute(instance_id: 'xxx' ,attribute: 'disableApiTermination') => #<struct Aws::EC2::Types::InstanceAttribute instance_id="xxx", instance_type=nil, kernel_id=nil, ramdisk_id=nil, user_data=nil, disable_api_termination=#<struct Aws::EC2::Types::AttributeBooleanValue value=true>, instance_initiated_shutdown_behavior=nil, root_device_name=nil, block_device_mappings=[], product_codes=[], ebs_optimized=nil, sriov_net_support=nil, source_dest_check=nil, groups=[]>
aws-sdkの方が見難いですが、一応取れてそうです。trueということは、Termination Protectionが設定されている状態になります。
そもそもですが、terraformを使っている以上設定しないほうがいいものなのでしょうかね。