14Room

みんな泣きながらオトナになったんだ。

証明書をパスワード付きで作ってELBに怒られたときの対応方法

ELB用で使うSSL証明書をうっかりパスワード付きで作ってしまうと、いざuploadする段階で、

Error: Private key must not be encrypted with a passphrase.

と言われて拒否されます。_ノ乙(、ン、)_

そこでPrivate Keyを何らかのテキストファイルに保存して、

openssl rsa -in <Private Key> -out moge.key

というコマンドを実行してパスワードを外して下さい。 moge.keyにパスフレーズのないPrivate Keyが出力されますので、この内容をコピペして使いましょう。

消費税が海の向こうまで追って来た。

ちょっと前の話になりますが、2015/10のAWS料金を確認したところ、いつもよりも明らかに高い・・・。 慌ててサポートに問い合わせると以下のようなお返事が来ました。

2015年税制改正により、国境を越えた役務の提供に係る消費税の課税の見直しが行われました。

これに伴い、日本の居住者であるお客様が日本国外のリージョンを使用された場合も、新たに消費税の課税対象となりました。
具体的には、2015年10月より東京リージョン以外の全リージョンのご利用サービスが課税対象となりました。
その結果、2015年10月より消費税額が増えた形となります。

うーむ。なるほど。 サービス提供対象が日本ではないので、ヴァージニアにインスタンスを立てていたのですが、これでtax的なメリットは無くなっちゃいましたね。(それでも利用料金は2割ほどお得です)

それにしても8%って結構大きいですよね。。。

ELB等で使うSSL証明書を消してみよう

ELB等で使う証明書はデフォルトで10個しか入れておけません。 期限切れなど必要の無くなった証明書は消しましょう。

確認

今格納されている証明書一覧を表示する

aws iam list-server-certificates

結果がjson形式で表示される。

{
    "ServerCertificateMetadataList": [
        {
            "ServerCertificateId": "ASCAII*************", 
            "ServerCertificateName": "api.naked.com", 
            "Expiration": "2015-02-28T04:02:30Z", 
            "Path": "/", 
            "Arn": "arn:aws:iam::123456789:server-certificate/api.naked.com", 
            "UploadDate": "2014-03-12T06:40:10Z"
        }, 
        {
            "ServerCertificateId": "ASCAJI*************", 
            "ServerCertificateName": "www.naked.com", 
            "Expiration": "2015-03-13T14:58:03Z", 
            "Path": "/", 
            "Arn": "arn:aws:iam::123456789:server-certificate/www.naked.com", 
            "UploadDate": "2014-03-27T09:13:34Z"
        }
}

消す

証明書を消す

aws iam delete-server-certificate --server-certificate-name SSL証明書の名称

(削除したいSSL証明書の「ServerCertificateName」を入力

CloudFrontで使うためのSSL証明書をアップロードしてみよう

2015/3/23時点でCloudFrontで使う証明書はCLIでしかアップロードできません。コマンドは下記の通り。

aws iam upload-server-certificate --server-certificate-name cdn.naked.com --certificate-body file://cert --private-key file://private --certificate-chain file://chain --path /cloudfront/path/
  • cert:証明書ファイル
  • private:秘密鍵ファイル
  • chain:中間証明書

cdn.naked.comの部分は環境に応じて適宜変更してください。

mysqlをサービス投入前にウォーミングアップしよう

概要

mysqlを再起動するとメモリに乗っていたデータがなくなり、そのままサービスに投入するとメモリにデータが載るまで負荷が高くなります。 そこでMySQL::Warmerを使ってサービス投入前にウォーミングアップしましょう。

インストール

apt-get update
apt-get install cpanminus
cpanm MySQL::Warmer

実行(ウォーミングアップ)

mysql-warmup target-db -h target-host -uYYYYYYYYY -pXXXXXXX

GCEでオートスケールを停止してみる

概要

デプロイのタイミングでオートスケールが発動すると色々困るので、止めます。

実行

下記のコマンドで停止可能。integration-201510290920はオートスケールを止めたいインスタンスグループの名前です。

gcloud compute -q --project "naked.co.jp:api-project-123456789" instance-groups managed stop-autoscaling integration-201510290920

結果

下記のようにオートスケールがoffになりました。

f:id:naked123:20151127172306p:plain

試しにstressコマンドで残りのインスタンスのCPUを使い切っても、インスタンスが追加されることはありませんでした。

ちなみにstop-autoscalingはあるけどstart-autoscalingはないです。 たぶんinstance-groups managed set-autoscalingで再設定し直せって事なんだろうと思いますが、その辺の意図は汲んでくれって感じがgoogleっぽいですね。

GCEでNATインスタンスを作ってみる

概要

GCPではexternal IPを持たないインスタンスはインターネットと通信できません。しかしDBサーバのようにセキュリティ的にexternal IPを持たせたくないけど、時々apt-getなどでソフトウェアを更新したい場合もあります。 そこで、NATインスタンスをdefault GWにして外からは直接アクセスできないけど、中からはインターネットにアクセスできる環境を作ります。

NATインスタンス構築

GUI

インスタンス内での作業

パケットフォワーディングを有効にする

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

NATの設定をする sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ルーティング設定

GUI

Routesで新しいルーティングルールを作成

Destination IP range:0.0.0.0/0
Priority:1000
Instance tags:no-ip
next-hop:specify an instance
Next hop instance:gw

ファイアウォール設定

no-ipのタグ付きインスタンスからgwタグ付きのインスタンス(NATインスタンス)への通信を許可する。

GUI

Firewall rulesで新しいファイアウォールルールを作成

Source filter:instance tagsを選択
Source tags:no-ip
Allowed protocols and ports:tcp:1-65535;udp:1-65535;icmp
Target tags:gw

確認

no-ipのタグがついたインスタンスからinternetに向けてpingを打ったり、apt-get updateしたりして確認しましょう。