ansibleでsshdを落とす。という鬼の所業【cloudpack大阪ブログ】

なぜsshdを落とすのか

理由は聞かないで下さい。詳しくはここを参照ください。
muranonushi.hatenablog.jp

コード

ansibleでsshdを落とすためのコードは以下です。
これをansibleで読み込む事でsshdが落ちるので、誰もsshアクセス出来なくなるのでセキュアになります。

- name: sshd desable
  service: name=sshd state=stopped enabled=no

どうしてもログインしたい時

え?ログインしたい時どうするの?って?

AWSならrun commandがあるので予めssm agentを入れて、どうしてもって言う時はsshを起動しましょう。
Amazon Web Services ブログ: EC2 Run Commandアップデート – Linuxインスタンスで利用可能に

CloudFormationをyamlで書く話【cloudpack大阪ブログ】

CloudFormatinoを書く時の""と{}と,がストレスで辛い。と呟いたら、弊社スーパーエンジニアの以下の記事を教えてもらったので
CloudFormationのjsonがどうyamlに変わるのか、ちゃんとCFnとして食えるのか早速試した。
qiita.com

1. まずはEC2を作るサンプルテンプレート(ec2.json)を準備

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "WebGroup" : {
      "Type" : "AWS::EC2::SecurityGroup",
      "Properties" : {
        "GroupDescription" : "http 80",
        "SecurityGroupIngress": [{
          "IpProtocol" : "tcp",
          "CidrIp" : "0.0.0.0/0",
          "FromPort" : "80", "ToPort" : "80"
        }]
      }
    },
    "WebServer" : {
      "Type" : "AWS::EC2::Instance",
      "Properties" : {
        "ImageId" : "ami-f80e0596",
        "InstanceType" : "t2.micro",
        "SecurityGroupIds" : [
          { "Ref" : "WebGroup" }
        ]
      }
    },
    "WebServerEip": {
      "Type": "AWS::EC2::EIP",
      "Properties": {
        "InstanceId": { "Ref": "WebServer" }
      }
    }
  }
}

2. ec2.jsonを食わせて、ec2.ymlを出力

j2y -o ec2.yml ec2.json

3. 出力結果はこちら。なるほど、スッキリしました。(ec2.yml)

AWSTemplateFormatVersion: 2010-09-09
Resources:
  WebGroup:
    Properties:
      GroupDescription: http 80
      SecurityGroupIngress:
      - CidrIp: 0.0.0.0/0
        FromPort: "80"
        IpProtocol: tcp
        ToPort: "80"
    Type: AWS::EC2::SecurityGroup
  WebServer:
    Properties:
      ImageId: ami-f80e0596
      InstanceType: t2.micro
      SecurityGroupIds:
      - Ref: WebGroup
    Type: AWS::EC2::Instance
  WebServerEip:
    Properties:
      InstanceId:
        Ref: WebServer
    Type: AWS::EC2::EIP

4. ec2.ymlを食わせて、ec2a.jsonを出力

j2y -o ec2a.json -r ec2.yml

5. 出力結果はこちら。キレイに整形してくれました(ec2a.json

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "WebGroup": {
      "Properties": {
        "GroupDescription": "http 80",
        "SecurityGroupIngress": [
          {
            "CidrIp": "0.0.0.0/0",
            "FromPort": "80",
            "IpProtocol": "tcp",
            "ToPort": "80"
          }
        ]
      },
      "Type": "AWS::EC2::SecurityGroup"
    },
    "WebServer": {
      "Properties": {
        "ImageId": "ami-f80e0596",
        "InstanceType": "t2.micro",
        "SecurityGroupIds": [
          {
            "Ref": "WebGroup"
          }
        ]
      },
      "Type": "AWS::EC2::Instance"
    },
    "WebServerEip": {
      "Properties": {
        "InstanceId": {
          "Ref": "WebServer"
        }
      },
      "Type": "AWS::EC2::EIP"
    }
  }
}

6. ec2a.jsonをCFnに突っ込んでみる。問題なくデプロイできた

f:id:xwkns157:20160416115033p:plain

7. まとめ

1. yamlからjsonに変換しても問題なくCFnにデプロイ出来た
2. 正直yamlでもjsonでも書くこと変わらないが、""、{}、,が無くなったのでコードがスッキリし、行数が明らかに減った
3. いちいち""、{}、,を気にしなくていいのでストレス減りそう
4. yamlはインデント等は気にする必要あるが、jsonでもインデントしないと見辛い
5. これは捗りそう

ちなみに作成途中のCloudFormationの行数が1/3ほど減った

$ wc -l CFn-test2.json
     671 CFn-test2.json
$ wc -l CFn-test2.yml
     471 CFn-test2.yml

mobingi.ioを試す(その2:設定ガチャガチャ)【cloudpack大阪ブログ】

こんばんわ。村主です。
mobingi.ioを試してみました。の第二弾です。

設定ガチャガチャ触ってみました。

MyApps

黒が基調になってます。
f:id:xwkns157:20160318210216p:plain

Instance Idをクリック

f:id:xwkns157:20160318203530p:plain
いろいろ出てきます。必要最低限?
ディスク容量とかスペックとかあったらいいな。
f:id:xwkns157:20160318203616p:plain
「Restart Instance」押した。
なんかめっちゃ怒られた感があったのでキャンセル・・。
f:id:xwkns157:20160318203745p:plain

>_ SSH をクリック

注意事項が出てきた。
SSHしたくないので×。
f:id:xwkns157:20160318203835p:plain

サーバのスケーリングをクリック

f:id:xwkns157:20160318203935p:plain
ふむふむここでスケーリングさせることが出来るのか。
デプロイ時に選択したやつですね。後から変えられる。
f:id:xwkns157:20160318204017p:plain

見積りコストが表示されてた

なんかメーターが増えていってる感。
月末?には見積りコストの金額になるのかな。
f:id:xwkns157:20160318204109p:plain

MySQLをクリック

ここで色々わかるのか。DBユーザ名とパスワードが表示出来るもよう。
f:id:xwkns157:20160318204320p:plain

メトリクスタブ

ここでCPUとかトラフィック状況が見れるみたい。
メモリとかディスクとか見えないので結構少ない。期間も選べないし、これから増えるのかな。
f:id:xwkns157:20160318204716p:plain
f:id:xwkns157:20160318204753p:plain
f:id:xwkns157:20160318204807p:plain

アクティビティタブ

構成変更した時とかに記録が残るのかな?
f:id:xwkns157:20160318204946p:plain

ログタブ

これが面白かった。リアルタイムログはほぼ?リアルタイムに表示される。
これ、アプリログとか指定出来るようになったら面白そう。何を使って実現してるんだろ。

今のところ検索機能とかは無くて、ログをダウンロード出来るので
ローカルでゴニョゴニョする必要あるが、Kibana的な機能がついてきたら結構よさげ。
f:id:xwkns157:20160318205225p:plain

設定タブ

キーペアの指定やコンフィギュレーションの指定、アプリケーションの削除はここで行う。
f:id:xwkns157:20160318205644p:plain

所感

最低限の機能は備わっている感じですが、まだ発展途上なところが多そうです。

サーバに入ること無くGitベースでデプロイ出来るので、他サービスとのインテグレーションが付いてくれば
ログインすることなく色々出来るのでもっと面白そう。
例えば、各種イベント(設定変更とかアラート?とか)を元にWebhookが行われるとかSlackに通知されるとか。
メトリクス、モニタリング等と連携出来て、アプリのKPIとかも一元管理出来るとか。それは別サービスでもいいのかな。

まだ見切れていないですが、RESTful APIも公開されているので、Hubotと連携してスケールさせたりすることも出来そう?(Let's ChatOps!)

あとは、AWSのサービス(Kinesis、Redshift、DynamoDBとか色々色々いろいろ)や
他サービス(WAFやIDSなどなど)とどう連携出来るようになるのか気になる。

【超小ネタ】別AWSアカウントのセキュリティグループIDを指定する方法【cloudpack大阪ブログ】

こんばんわ。村主です。

AWSのセキュリティグループは当たり前のように使われていると思いますが、超小ネタを紹介します。

セキュリティグループの送信元

セキュリティグループはインバウンドを制御する場合に、タイプ(SSH/HTTPなど)、プロトコル、ポート、送信元を指定します。
その際に送信元はCIDRもしくはセキュリティグループIDを指定します。

CIDRを指定すると範囲が広すぎたり、IPアドレスを直接指定するとインスタンスを復元した時に面倒だったりします。

その場合はセキュリティグループIDを指定することで、そのセキュリティグループがあたっているインスタンスに対象を絞ることが出来ます。
こんな感じ。
f:id:xwkns157:20160317230544p:plain

と、いうのはよく使われていると思います。今回は更に踏み込んで。

AWSアカウントのセキュリティグループIDが指定出来る

基本的にはAWSアカウント内でしかセキュリティグループIDは指定出来ません。
そのままセキュリティグループIDを入れてもエラーがでて登録出来ません。

そんな時は以下のように「AWSアカウントID(12桁)/セキュリティグループID」を入れてみてください。
f:id:xwkns157:20160317230242p:plain
これでアカウントをまたいだセキュリティグループIDの指定が出来ます。

VPC peeringとかしている場合に有用ですね。

追記 2016.3.18

VPC peeringを結んでいることが前提?あとで確認しよう。

mobingi.ioを試す(その1:デプロイ)【cloudpack大阪ブログ】

こんばんわ。村主です。
mobingi.ioを試してみました。
とりあえず、アプリケーションを作成するところまで。
githubと連携したり、メトリクスやログが見れたりするようですが、それは後日で。

アクセスする

https://mocloud.io

アカウント登録画面

アカウントを登録する
f:id:xwkns157:20160317201649p:plain

アプリケーションの作成

そそくさと画面左より「アプリケーションの作成」を押す
f:id:xwkns157:20160317201751p:plain

アプリケーション情報を設定する

まずは「東京」ですよね。
インスタナスタイプは・・「タイプ1サーバー」で。EC2のsmallクラスかな。円表記分かりやすい。
自動スケール機能、すごい。最大100までいけるのか!ただ、びびって4くらいに・・。
ロードバランサーSSLもコミコミなんですね。
f:id:xwkns157:20160317202306p:plain

アプリケーション名は適当に入れる。
f:id:xwkns157:20160317202453p:plain

イメージを選択する

色々選べる。ここはRubyPythonもNginxも対して扱えないので、PHP&Apacheで。
Procfile Appsの下の空白はなんだろう・・・。
f:id:xwkns157:20160317202549p:plain
ちなみに、Dockerレジストリも選べたり、コミュニティイメージは近日利用開始らしいです。
もう車輪の再発明とかしたくないですよねー。
f:id:xwkns157:20160317202801p:plain
ドキュメントルートを選んでくれ、と。よしなに。
f:id:xwkns157:20160317202945p:plain

DBを選択する

MySQLで。
f:id:xwkns157:20160317203014p:plain
インスタンスタイプは「タイプ1」で。
そうか、Multi-AZがデフォルトか。Web側はELBで負荷分散、RDSはMulti-AZで冗長構成なので可用性高いですね。
f:id:xwkns157:20160317203053p:plain

アプリケーションの作成

アプリケーションの作成を押す。
待つこと約30分・・。バックがAWSっぽいので、RDSのデプロイ&バックアップ処理で時間がかかったのかな。
f:id:xwkns157:20160317204651p:plain

所感

  • デプロイはherokuとかとそんなに変わらない感じ?
  • Web側はELBで負荷分散、RDSはMulti-AZですごく簡単に高可用性のサーバが出来る。
  • AWSの管理画面はサービスが沢山出るので「うわっ、多い・・」となる方にはシンプルで持ってこいかも。
  • githubと連携してしまえば、すぐに同じ環境で開発・検証・本番が出来る。
  • Dockerイメージが使えるので、可能性が広がる。
  • 所々に概算金額が円ベースで書いてあったのは(AWSと比べて)分かりやすかったですが、結局おいくら万円なの?がわかりにくかった。
  • あとは運用していく中でどんな機能(メトリクスやログ、復旧など)が気になるところ。


ちなみに、デプロイ後にログみたらリアルタイムでログが見れた。やばい。面白かった。
これくらい簡単で汎用性あるサービスを作りたい。Dockerならやりたい放題やな。
もう手作業の時代では無いのか。。

mobingiをログインしてみた【cloudpack大阪ブログ】

こんにちは。村主です。

JAWS DAYSに参加した時にクーポンコードを貰えたので、せっかくなので試してみました。

mobingiへアクセス

https://mobingi.co.jp/にアクセスして、右上からサインアップ。
f:id:xwkns157:20160315202225p:plain

アカウントを登録する

f:id:xwkns157:20160315202408p:plain

ログイン後の画面

f:id:xwkns157:20160315200716p:plain

画面をさっと見て、おもむろに右上のAWSアイコンを押してみた

f:id:xwkns157:20160315200831p:plain

ふむふむ。クレデンシャルを入れろってことですな。

f:id:xwkns157:20160315201011p:plain

mobingi用にIAM Userを発行し、画面右下にあるポリシーでカスタムポリシーを作って当てた。

そのIAM Userのアクセスキー・シークレットキーを左下に入れた。
たぶん出来たっぽい。

ほか面白そうなところあるかなー。ん?設定画面か。

f:id:xwkns157:20160315201220p:plain

んお?Change Language。何が選択出来るのかな。

f:id:xwkns157:20160315201342p:plain

日本語いけるじゃん!

f:id:xwkns157:20160315201404p:plain

日本語になった!

f:id:xwkns157:20160315201457p:plain

なったはいいが、、クーポンコードはどこで入れるんだろう。。続きは続編で。

よく使うOS・ミドルウェアのサポート終了期限(EOL/ライフサイクル)をまとめた【cloudpack大阪ブログ】

よく調べる事があるので、よく使うOS・ミドルウェアのサポート終了期限(EOL/ライフサイクル)をまとめておきました。
観点はセキュリティパッチが提供されるか。という期限を書いています。(2016年2月時点)

期限を超えているものは、脆弱性が公表されてもセキュリティパッチは提供されません。
緊急の脆弱性対策でいきなりメジャーバージョンアップとかシンドイと思うので、
サポート期限を見越して選定し、移行しましょう。

PHP (コミュニティ版)

7.0 2018年11月
5.6 2017年8月
5.5 2016年6月
5.4 2015年9月
5.3 2014年8月
5.2 2011年1月
5.1 2006年8月
5.0 2005年9月

Java (Oracle版)

8 2017年9月(予定)
7 2015年4月
6 2013年2月

Ruby (コミュニティ版)

2.3 未定
2.2 未定
2.1 未定
2.0 2016年2月
1.9 2015年2月

Python (コミュニティ版)

3.4 未定
2.7 2020年

MySQL (コミュニティ版)

5.6 2018年2月
5.5 2015年12月
5.1 2013年12月
5.0 2011年12月

PostgreSQL (コミュニティ版)

9.5 2021年1月
9.4 2019年12月
9.3 2018年8月
9.2 2017年8月
9.1 2016年8月
9.0 2015年8月
8.4 2013年2月

Oracle (Premier Support)

12c R1 2018年7月
11g R2 2015年1月
11g R1 2012年8月
10g R2 2010年7月

Red Hat Enterprise Linux / CentOS

Ver EOL PHP MySQL PostgreSQL
7.x 2024年6月30日 5.4 5.5(CentOSMariaDB) 9.2
6.x 2020年11月30日 5.3 5.1 8.4
5.x 2017年3月31日 5.1 5.0 8.1

Amazon Linux

Ver EOL PHP MySQL PostgreSQL Ruby Python
- 未定 5.3/5.4/5.5/5.6 5.5 8.4/9.2/9.3/9.4 1.8/1.9/2.0/2.1/2.2 2.6/2.7/3.4