やーまんぶろぐ

気が向いた時にだけ書くブログ

AWS クラウドサービス活用資料集 Route53編で知らなかったことメモ

EC2, ELB編に続いてRoute53編です。

yamano3201.hatenablog.jp
yamano3201.hatenablog.jp

Route53編資料

www.slideshare.net

SLA

サービスレベルアグリーメント - Amazon Route 53 | AWS

  • SLA 100%(すごい。。)
  • 使用可能時間割合が出なかった場合は払い戻しがあるようです。
  • ↓の表からは5分から払い戻しが発生するものと読み取れます。

f:id:yamano3201:20160926154203p:plain

パブリックホストゾーン/プライベートホストゾーン

  • 特にコメントなし

ALIASレコード

  • Route53固有のレコード
  • 変動する可能性のあるレコードに対してCNAMEではなくAレコードで返すことでレスポンスが高速になります
  • S3, CloudFront, ELB, ホストゾーン内のリソースレコードセット?で使用可能

トラフィックルーティング

  • ポリシーベースでのルーティングが可能
  • Simple, Weighted, Latency, Failover, Geolocationがあります
  • Weightedの重みは0-255で指定可能です。
    • 0を指定すればルーティングが無効になります。
    • 全て0にした場合は、等しい確率でルーティングされます
  • Failoverで障害時のsorryページを指定しておけば自前でリダイレクトを実装しなくてもよくなります
    • リダイレクトするやつが死ぬことがなくなるのは良いですね

トラフィックフロー

  • 使わなくてもルーティング自体は実現可能なので複雑でなければ不要
  • ルール作成が簡単でビジュアル的にもわかりやすくなります

【Black Belt】AWS Identity and Access Management (IAM) Confirmation 参加ログ

2016/9/21開催の [Black Belt] AWS Identity and Access Management (IAM) Confirmation に参加しました。
Black Beltに初めて参加しましたが、オンラインで参加できるので移動がなくて良いですね。
質問も読み上げられました(^^)

資料は公開されたら添付します。
2016/10/17 遅くなりましたが、添付しました。

www.slideshare.net


以下、メモの箇条書き。

メモ

AWS rootアカウント

  • AWS rootアカウントは極力利用しない
  • 侵入テストのリクエストとかで使う
    • 侵入テストのリクエスト専用の権限を作ってほしい。そもそも3ヶ月に1回全環境に定期検査が入るのでリクエストがめんどい。となりのグループのお偉いさんに毎回依頼するのめんどい

IAMで使用する認証情報(アクセスキー/シークレットキー)

  • AMIの中へは埋め込まない

MFA

  • 手持ちデバイスを使った二段階認証の仕組み
    • そこまでの要求はまだないかな
  • SMS MFAはまだプレビュー

Credential Report

  • これを使って認証情報のローテーションを確認することができる
    • 定期的なローテーションとか実際やると大変そう

AWS管理ポリシー

  • 事前定義されたポリシーをアタッチして使う
  • バージョニングとロールバックができる

カスタマー管理ポリシー

  • AWSアカウントで作成して使う
  • AWS管理ポリシーで適用できないときに使う

インラインポリシー

  • 従来通り、ユーザ/グループに紐付いたポリシー

リソースベースのポリシー

  • AWSアカウントを越したアクセス許可を書くことができる

作成支援ツール

ユーザのアクティビティの記録

  • AWS CloudTrail を使用する

Access Advisor&Service Last Accessed

  • 最後にAWSサービスにアクセスした日付と時刻を表示する機能
  • ユーザーやグループ、ロールに与えられた権限で利用されていないものを発見。利用状況がわかる

AWS ConfigのIAMサポート

  • IAMの変更履歴を管理することができる

IAMロール

  • アプリケーション(EC2など)に付与する
  • 認証情報が漏洩するリスクがなくなる
  • ネットワークのせいで認証に失敗することが極稀にあるのでリトライ処理をしておく必要がある(体験談)
  • 下のQAでも書いたけど、アプリからのみアクセスを許可する場合はAssumeロールを検討する必要がある

Temporary Security Credentials & AWS STS in all AWS regions

  • 一時的に権限を与えられるものがある
  • クロスアカウントアクセスによく使われる
  • AssumeRole を呼び出して一時的なセキュリティ認証情報を取得し、その認証情報を使用して Amazon S3 を呼び出すようなことができる
    • STSはManagement Consoleが用意されていないみたいですね。
    • ここらへんは今度試してみたいと思います。

Q&A

  • Q. 特定のVPCへのアクセスができる権限を与えられるか?
    • A. 万能的にVPCへのアクセスを制御することは難しい

最後に

今後もできるだけ参加します。

AWS クラウドサービス活用資料集 ELB編で知らなかったことメモ

EC2編に続いてELB編です。
yamano3201.hatenablog.jp

www.slideshare.net

知らなかったことをメモしました。

ELB自体もスケーラブル

  • ELBインスタンスの数や性能が変化します。
  • ELBのスケーリングが間に合わない場合は503を返します
  • Business / Enterpriseサポートをしている場合はPre-Warming申請を行うことで対応できる

クロスゾーン負荷分散

  • デフォルト有効で、有効であればAZをまたいでバックエンドのインスタンスに振り分けます。
  • このときAZ間遅延があることを考慮する必要がある

Internet-Facing ELB / Internal ELB

  • Internal ELBはVPC内からアクセスできればよいELBでプライベートサブネットにも配置できる。
  • どちらのELBもDNSレコードはパブリックで名前解決可能。名前解決なんかしっくりこない。。
  • ELBはIPが変わることがあるので、アプリケーションによっては名前解決を一定間隔で行うように変更しておく必要がある。

スティッキーセッションの有効期間

  • アプリケーション制御の場合は、アプリケーションが作成したCookieに合わせる
  • ロードバランサ制御の場合は、指定した有効期間に合わせる
  • アプリケーション制御できるの知らなかった。

Route 53 DNSファイルオーバ対応

  • Route 53のヘルスチェック機能とELBが連携することで障害時にSorryページへ誘導することが可能
  • 別の仕組みでsorryページを出していた。。

最後に

ALBを使えばパスベースのルーティングもできますね。
yamano3201.hatenablog.jp
まだ触ってないので触っておきたいです。

AWS クラウドサービス活用資料集 EC2編で知らなかったことメモ

前々から読んでおきたかった、AWS クラウドサービス活用資料集に目を通していきたいと思います。
aws.amazon.com

まずはEC2編に目を通して、知らなかったことをメモしました。

www.slideshare.net

T2: バースト可能パフォーマンスインスタンス

f:id:yamano3201:20160920145125p:plain

EBS 最適化インスタンス

  • EBS専用帯域を確保するオプション
  • t2.mediumでは使用できない

インスタンスストア

  • (割愛)
  • t2.mediumでは使用できない

拡張ネットワーキング

  • ネットワークレイテンシが低くなる
  • t2.mediumでは使用できない

プレイスメントグループ

Classic Link

最後に

普段はt2.mediumしか使用してないので、知らない単語がたくさん。
使ってないと目にしないもんですね。

EC2以外の項目も、一度学びなおした方が良さそう。

AWS EC2の情報をRuby/ERBを使ってHTMLとして出力する方法

AWS EC2の情報をERBを使ってHTMLを出力する方法をメモしておきます。

うまく表示してパラメータシートの代わりとして使えないかなーと思ってサンプルを作って見ました。
Javascript SDKで作るのがめんどくさかったので、慣れてるRubyで楽してしまいました。

出力した情報はDataTablesで表にして見やすくしています。
qiita.com

完成イメージ

AWS EC2の情報を表にして表示してます。各キーでソート、ページネーション、検索ができます。
f:id:yamano3201:20160919205842p:plain

ファイル作成

Gemfile, instance.rb, index.html.erbを用意します。

Gemfile

まずはGemfile

source :rubygems
gem 'aws-sdk', '~> 2'
gem 'aws_config'

instance.rb

ERBからHTMLを作成するrubyコードです。
EC2の情報を取得して、必要な情報を@arrayに格納してerbファイルに渡しています。

require 'erb'
require 'aws-sdk'
require 'aws_config'

def name(instance)
  instance.tags.select do |tag| tag.key == "Name" end.first.value
end

def id(instance)
  instance.instance_id
end

def type(instance)
  instance.instance_type
end

def status(instance)
  instance.state.name
end

def az(instance)
  instance.placement.availability_zone
end

def subnet_id(instance)
  instance.subnet_id
end

def security_group(instance)
  res = []
  instance.security_groups.each do |sg| res.push(sg.group_id) end
  res.join(", ")
end

def private_ip_address(instance)
  instance.private_ip_address
end

def public_ip_address(instance)
  instance.public_ip_address
end

Aws.config.update(
  :access_key_id     => "XXXXXXXXXXX",
  :secret_access_key => "XXXXXXXXXXXXXXXXXXXXXX",
  :region            => "us-east-1"
)

ec2 = Aws::EC2::Client.new

instances = []
reservations = ec2.describe_instances.reservations
reservations.each do |reservation| 
  instances.push(reservation.instances.first)
end

@array = []
instances.each do |instance|
  hash = {
           "Name" => name(instance),
	   "ID" => id(instance),
	   "Type" => type(instance),
	   "Status" => status(instance),
           "AZ" => az(instance),
           "SubnetID" => subnet_id(instance),
           "SecurityGroup" => security_group(instance),
           "PrivateIP" => private_ip_address(instance),
           "PublicIP"  => public_ip_address(instance),
         }
  @array.push(hash)
end

contents = ERB.new(File.read("index.html.erb")).result(binding)
erb = ERB.new(contents)
puts erb.result(binding)

index.html.erb

cdn.datables.netを読み込むだけで表が見やすくなるのが良いですね。
あとは@arrayで渡された値のkey, valueをeachで回して表示するだけ。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://cdn.datatables.net/t/bs-3.3.6/jqc-1.12.0,dt-1.10.11/datatables.min.css"/> 
    <script src="https://cdn.datatables.net/t/bs-3.3.6/jqc-1.12.0,dt-1.10.11/datatables.min.js"></script>
    <script>
        jQuery(function($){
            $("#foo-table").dataTable();
        });
    </script>
    <title></title>
</head>
<body>
    <table id="foo-table" class="table table-bordered">
        <thead>
            <tr>
            <% @array.first.keys.each do |key| %>
            <th><%= key %></th>
            <% end %>
            </tr>
        </thead>
        <tbody>
            <% @array.each do |info| %>
            <tr>
            <% info.values.each do |item| %>
            <td><%= item %></td>
            <% end %>
            </tr>
            <% end %>
        </tbody>
    </table>
</body>
</html>

実行コマンド

$ bundle install --path=vendor/bundle
$ bundle exec ruby instance.rb > index.html; open index.html

ちょっと雑に作ってますが、欲しい情報を整理してHTMLで表示させればパラメーターシートとして使えそうな気がしてきました。

アカチャンホンポのプレパパナイトツアーに参加していろいろ聞いてきた

f:id:yamano3201:20160914211901j:plain

アカチャンホンポのプレパパナイトツアーに参加してきました。
www.akachan.jp

参加者が私一人だったこともあって、クイズや体験はなく、商品の説明を通して疑問を解消していくというものでした。

90分間じっくりと話を聞くことができたので、とっても勉強になりました。

新生児衣料、生活用品、おでかけグッズの三人の担当の方に説明していただいた内容をメモしておきたいと思います。

新生児衣料

短肌着

産まれる前に購入する必要があるものです。5, 6枚必要とのこと。

長下着、コンビ肌着

産まれる前に購入する必要があるものです。いずれか合わせて5, 6枚必要とのこと。短肌着の上に重ねて使うようです。

ドレスオール

産まれる前に購入する必要があるものです。外に出るときに肌着の上に重ねて使うようです。
ほとんどのものが2WAYになっていて、股の部分を開けたり閉めたりして使うことができます。
足がバタバタ動くようになる3ヶ月くらいまで使えるようです。

プレオール、カバーオール、ロンパス

足がバタバタ動くようになる3ヶ月くらいになると、足が分かれていたり足が出るタイプが必要になるそうです。

おくるみ

必須ではないとのことですが、1つあると便利に使えるとのことです。
生後1ヶ月のときにお宮参りに行くのであれば白色のおくるみを購入しておくと良いとのことです。

セレモニードレスオール、祝着

お宮参りで着る服です。レンタルなどもあるそうなので必須ではないとのことです。

ガーゼハンカチ

たくさん必要。

生活用品

哺乳びん

ガラスのものとプラスチックのものがあり、衛生面でガラスのものが選ばれることが多いそうです。

消毒用品、哺乳びんブラシ、乳首ブラシ

これらは必須ですね。哺乳びんは洗浄消毒→授乳→洗浄消毒と使うたびに洗浄消毒が必要になるそうです。
消毒の方法は煮沸、薬液、電子レンジの3つがあるそうです。

とりあえず煮沸で初めてみようと思います。

搾乳器

手で絞る、手動、電動のタイプがあるようです。
子供をあずけるようになる場合は必要になるそうです。
必要になったら検討することにします。

紙おむつ

新生児、S、M、Lの4つのサイズがあるようです。
太ももに痕がつくようになってきたらサイズアップしていくと良いとのことでした。

ベビー衣料用洗剤

衣料用洗剤の他に、衣料用リンスという柔軟剤を使う人も多いようです。

おしりふき

トイレに流せるタイプや厚手のタイプがあるそうです。

おむつバケツ

使用済のおむつを捨てる専用のバケツです。5, 6枚しか入らないらしいのでいらないかも。
普段使用しているゴミ箱に臭わない袋をつけてしのごうと思います。

あとは移動時に使える携帯ゴミ袋が便利だそうです。

ベビーバス

プラスチックのバスは安定しているけど場所をとる。空気を入れて使うエアータイプのバスは不安定だけど収納に便利。

BABY CRAFT ベビーバス 床置きタイプ グリーン

BABY CRAFT ベビーバス 床置きタイプ グリーン

エアータイプを購入しようと思います。
湯温計は気になる人は購入。タオルは親と一緒でかまわないそうです。

ベビーソープ、ベビーシャンプー

泡タイプや肌に弱い人向けなどあるそうです。

沐浴液

すすぎがいらないのでおすすめだそうです。

ベビーローション、ベビーオイル

どちらかで良いそうです。おむつを取り替えるときにも使用すると良いそうです。

つめ切りばさみ、やすり

顔をかく子の場合は必須だそうです。

体温計

脇のタイプに比べてばらつきがあるので、3回くらい計って平均をとると良いそうです。

鼻吸い器

必要かは子供によるそうです。
手動と自動のものがあるそうです。

ベビーゲート、ベビーサークル、安全グッズ

動き始めてからで良いそうです。

おでかけグッズ

チャイルドシート

退院のときに必要になるので、産まれる前に購入する必要があるそうです。
里帰り出産でタクシーを予定していたので、タクシー会社に問い合わせが必要とのことでした。

目安としては4歳くらいまで使えるそうです。
ただ6歳までは使用が義務つけられているので、その頃にはジュニアシートが必要になるそうです。

車の車種や年式で使用可能かが変わるそうなので、購入するときは事前に調べておくと良いとのことでした。

ベビーカー + グッズ

使用は1ヶ月から3歳ころまでになります。子供の相性もあるので、産まれてからの購入で十分とのことでした。
2輪、4輪、3輪のものがあるそうです。

2輪
  • 軽くて持ちやすくて安い
4輪
  • 動きやすく段差も越えやすいけど重くて高い
3輪
  • 2輪と4輪の良いとこどりで、店員さんのおすすめとのことでした。
  • ただ、3輪のものは対象が4ヶ月からなので、最初は抱っこ紐で頑張る必要があるそうです。

動きやすいのが魅力なので、4輪を購入しようと思います。

セカンドベビーカーというのがあるそうですが、ファーストベビーカーと同じく対象は3歳までなので必須ではないそうです。
2人目が産まれてもう1台安く購入したくなった場合に検討します。

荷物をひっかけるフックやドリンクホルダー、レインカバーを購入する方が多いそうです。

抱っこ紐

1ヶ月から使えるようになるので、退院時はまだ使えないそうです。
こちらも子供の相性があるので、産まれてからの購入で十分とのことでした。

下の3つが有名だそうです。

ベビービョルン

赤ちゃんとの接点に布が一枚あるので、抱っこからおんぶに切り替えるのが楽だったり、親と同じ方向に赤ちゃんを向けることができるそうです。

アプリカ

エルゴとベビービョルンのいいとこどり。
ただ首が座るまで横抱きになってしまうそうです。横抱きだと少し不安定で両手が開かないのが不便なところになります。

私はエルゴにする予定です。

最後に

とりあえずメモを列挙しました。
とても勉強になりましたし、おしりふきなどの試供品を大量にいただけて大満足の90分でした。

近くにアカチャンホンポのプレパパツアーがある方は、ぜひ参加してみることをおすすめします。

ruby SDKでEC2 Run Commandを試してみる

ruby SDKでEC2 Run Commandを試してみました。

EC2上で任意のコマンドを叩けるサービスです。

下のリンクを参考にしています。
recipe.kc-cloud.jp

事前準備

対象インスタンスにSSMエージェントを入れる

$ curl https://amazon-ssm-us-east-1.s3.amazonaws.com/latest/linux_amd64/amazon-ssm-agent.rpm -o amazon-ssm-agent.rpm
$ yum install -y amazon-ssm-agent.rpm

対象インスタンスにRoleをつける

AmazonEC2RoleforSSMを対象インスタンスにつけます
f:id:yamano3201:20160916193138p:plain

CLIで実行するユーザにアクセス権をつける

AmazonSSMFullAccessを対象ユーザにつけます
f:id:yamano3201:20160916193200p:plain

実行

CLIで実行

$ aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids "i-xxxxxxxxxxxxxxxxx" --parameters '{"commands":["touch test"],"executionTimeout":["3600"]}' --timeout-seconds 600 --region us-east-1

testファイルが作成されていることを確認しました。

ruby SDKで実行

Gemfileとrubyファイルを用意します。

Gemfile

source :rubygems
gem 'aws-sdk', '~> 2'
gem "aws_config"

ec2_run_command.rb

require 'aws-sdk'
require 'aws_config'

Aws.config.update(
  :access_key_id     => xxxxxxxxxxxxxxxx,
  :secret_access_key => xxxxxxxxxxxxxxxxxxxxxxx,
  :region            => us-east-1
)

ssm = Aws::SSM::Client.new()
res = ssm.send_command({
  document_name: "AWS-RunShellScript",
  instance_ids: ["i-xxxxxxxxxxxxxxxxx"],
  parameters: {
    commands: ["touch test"],
    executionTimeout:["3600"]
  },
  timeout_seconds: 600,
})

実行します。

$ bundle install --path=vendor/bundle
$ bundle exec ruby ec2_run_command.rb

access_key_id, secret_access_key, instance_idsを適切に設定して実行してください。

SSHが不要なのでセキュアに実行できるのが良いですね。