CloudformationでEC2にPublicIP+固定PrivateIPを割り当てる
いつからCloudformationだと思った?
やったーー!!kumogata(winebarrel/kumogata · GitHub)でした!
JSON書くのはExcel方眼紙のプリントレイアウト設定するのと同じぐらいに辛いので、kumogataを使いました。
cloudformationドキュメントを読んでいるとEC2にPublicIPを割り当てるためのResourceは存在しないらしい。
EIPはAWS::EC2::EIPがあるのにな・・・
PublicIPと固定PrivateIPを割り当てる方法はAWS::EC2::NetworkInterfaces内で定義すること。
どうもENIに対して割り当てないといけない模様です
理由はEC2のドキュメントに書いてあるようなきがするので読まないと...
AWS::EC2のPropertyでもPrivateIP, SubnetID, SecurityGroupを設定できるがPublicIPを当てる場合は書いてはいけない。このようなエラーでRollbackされる。
Network interfaces and an instance-level subnet ID may not be specified on the same request
以下例
- orenoinstance.rb
orenoInstance do Type "AWS::EC2::Instance" Properties do InstanceType "t2.small" KeyName {Ref "KeyName"} Monitoring true ImageId BASE_EBS_AMI_ID Tags [ "Key" => "Name", "Value" => "orenoinstance", ] BlockDeviceMappings [ _{ DeviceName "/dev/xvda" Ebs {VolumeSize 100} } ] NetworkInterfaces [ _{ AssociatePublicIpAddress true PrivateIpAddress "10.10.20.30" DeviceIndex "0" GroupSet [ _{Ref "orenoSecurityGroup"}, _{Ref "publicSecurityGroup"}, ] SubnetId {Ref "orenoSubnet"} } ] end end
- kumogataで作る
kumogataを実行する。DSLがParseされcloudformationが走る。
kumogata実行時の-pオプションでパラメータの上書きも可能
orenomac$ kumogata create orenoinstance.rb development
さいこうです!!
cgiファイルがダウンロードされる
mod_cgi.soをLoadModuleしてなかった。
つらい
dstatでプロセスごとのI/O使用量を計測する
- 対象:CentOS 6系
dstat --top-bio -al
3ヶ月で一気にやったこと
とにかく若さに嫉妬した3ヶ月だった。
自分が20台後半の時はエクセル方眼紙=Immutable 大正義 structure だった気がする。嗚呼黒歴史。
嘆いても過去は戻ってこないのよ。
さて何やってたか忘れてしまいそうなのでメモ残す。
- Customer Obsession
決して言いなりではない。その時刺さるだろうなって最適解を見つけるの最高
- チームの仕事
最高
- AWS tag
タグ運用最高!!サーバに状態を持たせず管理するためのエッセンスだと思うありがとうAWS
まあ、現実は状態持たざるをえないんですけど(´・ω・`)
- S3
ディレクトリ/ファイル設計ミスったらパフォーマンスでないらしい。こわい
- SQS
S3と同様にSQS独自のパーミッション設定があって歴史を感じる。
fluent-plugin-sqs最高。
- DynamoDB
自分でサンプル作って説明できるぐらいの実装力がほしいなっておもいましたまる。
- RDS
UTC.....
- Nginx
リバースプロキシ最高。アパッチが辛い時に。
Postfix+SESリレーは鉄板にしたい。でももうメールはいいです・・業が深い
- Tripwire
twadminでポリシー更新したらtripwire --initでデータベースを初期化しないとこうなる
### Error: Policy file does not match policy used to create database. ### Exiting...
- Elasticserach + Kibana
ストレージ食いスギィ!
- logstash
Windowsでfluentライクな事やろうとするとこれがベストっぽいと思った
- Chef
Ohai最高, SoloよりServerが欲しくなる。chef-zero先生の出番かな
- Serverspec
最高、もっと気軽にかけるようになりたい。。どうしても作りっぱなしになってしまう。
- Redis
RDBMSではないのよKVSなんだよって特性を活かすと最高。
bgsaveこわいのでbackup slave作ってなんとかする。
TCPのオーバヘッドってすごく・・・おおきいです・・・と改めて学んだ最高のKVS
- Sensu
ノード50台程度。 sensu-clientがrabbitmqという最高の流しそうめん機に打ち込まれたメッセージをsensu-serverとsensu-apiが受け取って指定された通知方法(ハンドラ)に従って、メッセージをいい感じにしてくれる最高のツール。
不満があるとしたらadditional parameterをClient単位でしか持てないこと。
Check単位で設定したいケースがでてきたので、ソースイジらなきゃ駄目そう。
これからガンガンclient増やす。
rabbitmqはSmallインスタンスで十分。
sensu-serverは受け取るcheck, metricsの数によるとおもうけどc3.largeはほしいかなー。
NTPサーバ立てて同期しないと辛いどころかKeepAlive出しまくる。
- Graphite
JSTでAWSのCloudwatch メトリクスを参照できるって最高。
UTCで生きろはすまないがNo thank you
困ったらcarbon-cache/配下漁れば良い。
集めるmetrics数によるけどc3.largeはほしいな。
- Jenkins
ビルドパイプライン, パラメータ付きビルドが最高に最高。
ずーっと遊んでた気がする。
- Backlog
最高いつもお世話になっております。
Jenkins, Sensuと組み合わせたい
最高ちょっとExcel捨ててmarkdownやってくる
- DeepSecurity Manager系
お、おう。
- Next------->>>>>>>>>>
吸収しっぱなしだったので一度放出しないと辛い。テストきちんとしなきゃ。
TCP勉強しなおさなきゃ。
自身の能力が甘いのがつらい。
できる人にお願いしたらいいんだろうけど、ただの中継機器だとやばいよねって思っている。
主張するところないなとか色々考えることがある。
あとEC2はオブジェクトとして扱いたい。なんだかんだでオンプレノリなのでなんとかしたい。
そのためにまず状態を外に持たせるようにしたい。起動した瞬間メールだドン!とかcronだドン!とか笑えないので。
ってこれしかやってないんだっけ?
あっという間に三ヶ月過ぎたんだけど・・・
metricをgraphiteに飛ばすとき忘れない事
眠いですこんばんは
2回も同じこと忘れてたのでメモ
- メトリクスを飛ばす時は"type":"metric"を指定する
- メトリクスを処理するハンドラを記述
これらを指定しないとmetrics収集プラグインは動作するが、rabbitmqという流しそうめん機に流れていってもsensu-serverがすくい上げてくれない。
- recipe
node.graphite_directory = "oreno.webservers" sensu_check "metrics_vmstat" do command "vmstat-metrics.rb --scheme #{node.graphite_directory}.:::name:::" type "metric" handlers ["graphite"] standalone true interval 30 end end
- knife solo cook実行後
{ "checks": { "metrics_vmstat": { "command": "vmstat-metrics.rb --scheme oreno.webservers.:::name:::", "type": "metric", "handlers": [ "graphite" ], "standalone": true, "interval": 30, "occurrences": 3 } } }
/graphite/oreno/webservers/<node_name>/<vmstat_metrics>として保存されますよ。
メトリクスがGraphiteに登録されないなと思ったらこれらを確認してみると良いです
- sensu-clientのログ
- sensu-serverのログ
- graphiteのcarbon listenerログ
ohai最高って思うとき
ohaiございます私です
例えばsensuコミュニティプラグインのcheck-redis-memory.rbを利用するとき、 maxmemoryパラメータを設定していない場合、 サーバに搭載されているメモリ量と比較して使用率を判定してみます。
ohaiのmemory attributeを使うと幸せになれます。
Redisのmemory使用率がusage/memory_total70%を超えたらwarning Redisのmemory使用率がusage/memory_total80%を超えたらcritical
warning_memory = node.memory.total.gsub('kB','').to_i * 0.3 critical_memory = node.memory.total.gsub('kB','').to_i * 0.2 sensu_check "check_redis_memory" do command %{check-redis-memory.rb --host #{node.redis_host} --port #{node.redis_port} --warnmem #{warning_memory.round} --critmem #{critical_memory.round} } standalone true handlers node.sensu.default_handlers interval node.check_redis_interval end
おわり。 ohaiさいこう