日別アーカイブ: 2021年10月30日

Route53

Route53とは?

AWSのDNSサービス。ネームサーバーの役割を果たします。

高可用性、SLA100%(稼働率100%)

高速。エッジロケーションの中で最も近いロケーションから応答を返します。

フルマネージドサービス。DNSサーバーの設計・構築・維持管理が不要です。

関連用語

ホストゾーン:DNSのリソースレコードの集合、ゾーンファイルのようなものです。

レコードセット:リソースレコードのことです。

ルーティングポリシー:Route53がレコードセットに対してどのようにルーティングを行うかを決めます。

ヘルスチェック:サーバーの稼働状況をチェックします。

ルーティングポリシーについて

シンプル

レコードセットで事前に設定された値に基づいて、ドメインへの問い合わせに応答します。

加重

複数エンドポイントごとに設定された重み付けに基づいて、

ドメインへの問い合わせに応答する提供リソースに差がある場合や、ABテスト時に使用します。

レイテンシー

リージョン間の遅延が少ない方のリソースルーティングするマルチレーションにリソースが存在する場合に使用します。

位置情報

クライアントの位置情報に基づいて、ドメインへの問い合わせに落としますコンテンツのローカライズや、地域限定配信時に主に使用されます。

フェイルオーバー

ヘルスチェックの結果に基づいて、利用可能なリソースルーティングします。障害発生時にSorryサーバーに簡単に切り替えられます。

ドメインのネームサーバーお名前ドットコムからをRoute53に変更

ドメインに紐づくIPアドレスを登録

ーRoute53でレコードセットを作成

Route53で検索して「Route53」をクリックします。

DNS管理の「ホストゾーン作成」をクリックします。

ドメイン名:購入したドメイン名

タイプ:パブリックホストゾーン

「ホストゾーンの作成」をクリックします。

NSレコードとSOAレコードが作成されたのを確認します。

「EC2」で検索→「EC2」をクリックします。

ElasticIPとパブリックIPが同じであることを確認します。

同じでない場合は↓からまたElastic IPアドレスの関連付けをします。

https://suzutukiblog.com/index.php/2021/05/02/aws6/

ここから前に無料で購入した他のドメイン名で撮影しているので、表示が少しおかしいですがスルーしてください。

ターミナルを起動

Launchpadをクリックして、ターミナルを起動します。

ssh -i ~/Desktop/my-portfolio-ssh-key.pem ec2-user@IPアドレス

yesを選択      自分で作成した秘密鍵↑          ↑EC2のElastic IPアドレス

各自ドメイン名↓

dig sample.site NS +short

dns2.onamae.com

dns1.onamae.com

上記のようにネームサーバーがお名前.comになっているはずです。

お名前.comにてネームサーバーをRoute53に変更します。

①お名前.com上のタブのドメインを選択します。

②ネームサーバーのリンクをクリックします。

2:ネームサーバーの選択のその他を選択します。

3:別タブでRoute53のタイプNSの4つをそれぞれコピーします。(AとCNAMEがあるのはスルーしてください。)

4:お名前.comにてコピーしたものを貼り付けて「確認」をクリックします。

5:ターミナルにてdigコマンドで確かめます。

dig ドメイン名 NS +short

   ↑お名前.comで取得したドメイン名

dnsv.jv(お名前.comのネームサーバー)から先程自分で設定したネームサーバー(awsdns)に変わっているのを確認します。

設定が反映されるまで24h〜72hかかるので、Aレコードの登録をします。

Aレコードの登録

Route53で検索して「Route53」をクリックします。

DNS管理の「ホストゾーン」をクリックします。

各自ドメイン名をクリックします。

「レコードを作成」をクリックします。

レコードセット名:そのまま

レコードタイプ:Aタイプ

値:各自のElastic IPアドレスを入力

TTL:そのまま

ルーティングポリシー:シンプル

上記の設定にして「レコードを作成」をクリックします。

このようにAタイプの値がElastic IPアドレスになっていればOKです。

dig ドメイン名 NS +shortで確認して変わっていることを確認

dnsv.jv(お名前.comのネームサーバー)から自分で設定したネームサーバー(awsdns)に変わっているのを確認します。

ドメイン名でアクセスしてテストページが表示されたらOKです。

Rubyのまとめ3(配列からハッシュDate,Timeまで)

2から続く

配列(Array)

複数のデータをまとめて格納できるオブジェクトのこと

配列内のデータ(要素)は順番に並んでいて添字(インデックス)
を指定することでデータを取り出せる

配列の作成

空の配列を作る[]

3つの要素が格納された配列を作る
[要素1,要素2,要素3]

arr = []
=> []
arr
=> []

a = [1, 2, 3, 'aa', [1, 2, 3]]
=> [1, 2, 3, "aa", [1, 2, 3]]
2.5.1 :006 > a[0]
=> 1
2.5.1 :007 > a[1]
=> 2
2.5.1 :008 > puts a
1
2
3
aa
1
2
3
=> nil

小文字のwはシングルクォートとおなじで
%w(a b)
=> ["a", "b"]
大文字のWはダブルクォートとおなじで式展開できる
a = 1
=> 1
b = 2
=> 2

%W(あ#{a} い#{b})
=> ["あ1", "い2"]

シンボルに変換もできる
%i[ a b c ]
=> [:a, :b, :c]

繰り返し処理をする時
%w[a b c].each do |abc|
   puts abc
 end 
a
b
c
=> ["a", "b", "c"]

breakは指定したものまで繰り返す
%w[a b c].each do |abc|
   break if abc == 'c'
   puts abc
 end 
a
b
=> nil

nextは指定したものをスキップする
%w[a b c].each do |abc|
    next if abc == 'b' 
      puts abc 
    end 
a
c
=> ["a", "b", "c"]

mapを使って配列内に()を付加
%w[a b c].map { |abc| "(#{abc})" }
=> ["(a)", "(b)", "(c)"]

aは空か?(.empty)

a.empty?
=> false
2.5.1 :010 > b = []
=> []
2.5.1 :011 > b.empty?
=> true

変数aに’aa’はふくまれている?(.include)

2.5.1 :012 > a.include?('aa')
=> true
2.5.1 :013 > a.include?('b')
=> false
a = [[1, 2, 3], "aa", 3, 2, 1]
2.5.1 :014 > a.reverse
=> [[1, 2, 3], "aa", 3, 2, 1]
2.5.1 :015 > a
=> [1, 2, 3, "aa", [1, 2, 3]]
2.5.1 :016 > a.reverse!
=> [[1, 2, 3], "aa", 3, 2, 1]
2.5.1 :017 > a
=> [[1, 2, 3], "aa", 3, 2, 1]

配列をランダムにする(.shuffle)

2.5.1 :018 > a.shuffle
=> [3, 2, "aa", 1, [1, 2, 3]]

(0..25).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
2.5.1 :026 > (0..99).to_a.shuffle!
=> [96, 92, 23, 49, 27, 60, 20, 72, 8,
50, 70, 64, 41, 75, 88, 26, 82, 14, 6,
78, 10, 55, 74, 48, 17, 52, 24, 16, 95,
63, 36, 19, 91, 93, 57, 85, 56, 67, 2,
15, 89, 44, 31, 43, 98, 3, 38, 28, 12,
86, 35, 65, 83, 94, 47, 0, 81, 4, 62,
77, 84, 13, 90, 33, 45, 21, 99, 39, 22,
71, 46, 61, 66, 87, 25, 30, 29, 34, 51,
73, 68, 18, 69, 37, 80, 11, 7, 9, 58, 5,
53, 42, 1, 40, 79, 59, 32, 54, 76, 97]

配列に新しく入れる(.push)(<<)

z = (0..10).to_a

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

2.5.1 :028 > z << 20

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]

2.5.1 :029 > z

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]

2.5.1 :030 > z.push(30)

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30]

2.5.1 :031 > z

=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30]

配列の最後を取り出す(.pop)

2.5.1 :032 > z.pop
=> 30
2.5.1 :033 > z
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]

最初の配列を取り出す(.shift)

z.shift
=> 0
z
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]

2.5.1 :038 > z << 3

=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 3]

2.5.1 :039 > z << 6

=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 3, 6]

重複したものがなくなり一つにまとまる(.uniq)

2.5.1 :040 > z.uniq
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]
2.5.1 :041 > z
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 3, 6]
2.5.1 :042 > z.uniq!
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]
2.5.1 :043 > z
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]

配列の文字列を結合する(.join)並び替える(.sort)

s = ['my' 'name' 'is' 'suzutuki']

s

=> ["my", "name", "is", "suzutuki"]

2.5.1 :048 > s.join

=> "mynameissuzutuki"

2.5.1 :049 > s.join(' ')

=> "my name is suzutuki"

2.5.1 :050 > s.join('_')

=> "my_name_is_suzutuki"

s.sort.reverse

=> ["suzutuki", "name", "my", "is"]

2.5.1 :053 > s.sort.reverse!

=> ["suzutuki", "name", "my", "is"]

2.5.1 :054 > s

=> ["my", "name", "is", "suzutuki"]
↓配列の数がわかる
s.size
=> 4

シンボル

ソースコード上では文字列のように見えるが内部では整数として扱われる。

シンボルを使った形の方が文字列をきれいに使う場合に比べて、ハッシュのアクセスは速いとされる

オブジェクトIDを確認すると、String オブジェクト で は 同じ 文字列であっても別のオブジェクトが生成されるのに対してシンボルでは同じシンボル名であれば同一のシンボルを指している。

ハッシュとは?

キー(key)と値(Value)の組み合わせでデータを管理するオブジェクト

連想配列、ディクショナリー、マップと言う場合も

ハッシュの作成

空のハッシュを作成{}(中かっこと読む)

キーと値の組み合わせを3つ格納するハッシュを作成

{キー1 => 値1, キー2 => 値2, キー3 => 値3 }

suzutuki = {'name' => 'suzutuki', 'birthplace' => 'Gihu'}

=> {"name"=>"suzutuki", "birthplace"=>"Gihu"}

2.5.1 :058 > puts suzutuki['name']

suzutuki
=> nil

2.5.1 :059 > puts suzutuki['birthplace']

Gihu
=> nil

2.5.1 :060 > suzutuki['age'] = 18
=> 18

2.5.1 :061 > puts suzutuki
{"name"=>"suzutuki", "birthplace"=>"Gihu", "age"=>18}
=> nil

↓ageを20に変更したいとき
suzutuki['age'] = 20
=> 20

2.5.1 :063 > puts suzutuki
{"name"=>"suzutuki", "birthplace"=>"Gihu", "age"=>20}
=> nil

suzutuki.delete('age')
=> 20

puts suzutuki
{"name"=>"suzutuki", "birthplace"=>"Gihu"}
=> nil
ota = {name: 'ota', birthplace: 'tokyo'}
=> {:name=>"ota", :birthplace=>"tokyo"}
2.5.1 :067 > puts ota[:name]
ota
=> nil
2.5.1 :068 > ota[:age] = 20
=> 20
2.5.1 :070 > ota[:age] = 21
=> 21
2.5.1 :072 > puts ota
{:name=>"ota", :birthplace=>"tokyo", :age=>21}
=> nil
2.5.1 :073 > ota.delete(:age)
=> 21
puts ota
{:name=>"ota", :birthplace=>"tokyo"}
=> nil

キーの確認.keys

ota.keys
=> [:name, :birthplace]

値の確認.values

2.5.1 :075 > ota.values
=> ["ota", "tokyo"]
2.5.1 :076 > ota.has_key?(:name)
=> true
2.5.1 :077 > ota.has_key?(:address)
=> false
2.5.1 :078 > ota.size
=> 2

Time,Dateオブジェクト

 Time.now
=> 2021-010-02 12:06:55 +0900
[6] pry(main)> Time.now.zone
=> "JST"
[7] pry(main)> datetime = Time.new(2021, 10, 2, 12, 45)
=> 2021-01-02 12:45:00 +0900
[8] pry(main)> datetime.strftime('%Y年 %m月 %d日 %H時 %M分')
=> "2021年 10月 02日 12時 45分"

いきなりDateクラスは使えない
[9] pry(main)> Date
NameError: uninitialized constant Date
Did you mean? Data
from (pry):12:in `__pry__'
requireをすることで使えるようになる
[10] pry(main)> require 'date'
=> true
[11] pry(main)> Date
=> Date
Date.today
=> #<Date: 2021-01-02 ((2459317j,0s,0n),+0s,2299161j)>
[15] pry(main)> Date.new(2021, 10, 2)
=> #<Date: 2021-01-02 ((2459217j,0s,0n),+0s,2299161j)>

[17] pry(main)> Date.new(2021, 10, 2).strftime('%Y年 %m月 %d日 %H時 %M分')
=> "2021年 10月 02日 00時 00分"

4に続く