SSブログ
クラウド ブログトップ

OCI(Oracle Cloud)でOracleデータベースを作成してsqlplusで接続した話 [クラウド]

本日は、前回に続きOCIの話題である。無料でOracleデータベースが使えるという話を聞きつけサインアップしてVMインスタンスを作ったのが前回まで。



今回は、データベースを作成してみるのである。
OCIのデータベースには、ATPとADWがある。

ATPは「AUTONOMOUS TRANSACTION PROCESSING」と書いてある。大文字で書いてあるのがOracleというかSQLぽいが、正直「なんのこっちゃっ」ていう感じではある。
ADWはDATA WAREHOUSEとなっているので、大規模感がある。ちょっと試したいだけなので、ATPの方にする。

「Autonomous Databaseの作成」画面で名前やタイプ、管理用パスワードを入力して画面下の作成ボタンをクリックするだけなのだが、注意すべき箇所が1点。
「データベースを構成します」のところで、データベースの大きさを決定するが、Always Freeの無料枠に収まるような設定にしないと料金がかかる、という点。

無料枠のスイッチ.png

サブスクライブしたらいったいいくらかかるんだろうか。
まぁ、最初の30日間はいくらか「使ってもいいクレジット」が貰えるようなので、試してみても良いかもね。
コンソール画面の右側にどれだけ無料枠のクレジットを使ったかが表示されている。

無料枠クレジット.png

今見て気づいたけど、3万円も貰ってるんだ。なら、1ヶ月程度ならOracleをサブスクライブしても平気?やらないけど。

で、話は戻って、「Autonomous Databaseの作成」ボタンをクリックするとデータベースを作成できる。VMを作った時と同様に数分で作成できる。
うーん、時代を感じるなぁ。バージョンは19cになっているし。SQLポケットリファレンスはどこまでだっけか。えーと...

なんと12cまでじゃん。なんか一気に飛んでないか?

12cは12.1、12.2とマイナーバージョンアップがあって、その後18cが出たのね。ここでいきなり飛ぶのか。18は2018年っていうこと。18cの後は19cになってる。21cっていうのもあるみたい。やっぱりバージョンを西暦の年(YY)にしたのか。cは相変わらずクラウドのcなのよね?

はぁ、年取ったなぁ。凹むなぁ。



それはさておき、しばらくするとデータベースが作成される。
じゃあsqlplusで繋げてscott/tigerでselect投げてみるか。と思ってみるものの...

どうやって繋げるのかわからん!

「すべての場所からのセキュア・アクセス」にしたので、ネットに公開されている状態だとは思うのだが...
VMの時みたいに、sshでいける?

Macにsqlplusをインストール



sqlplusで行けそうなのだが、sqlplusが見つからない。容量不足で削除したんだっけか。Macに入れてみた。
Oracleのサイトからダウンロードできる。

OICインスタントクライアント.png

DMGファイルをダウンロードして、マウントして、install_ic.shを実行する。以下はその時のコンソールの様子。

asai@gray ~ % cd /Volumes 
asai@gray /Volumes % ls
Macintosh HD                                 home
Recovery                                     instantclient-basic-macos.x64-19.8.0.0.0dbru
asai@gray /Volumes % cd instantclient-basic-macos.x64-19.8.0.0.0dbru 
asai@gray instantclient-basic-macos.x64-19.8.0.0.0dbru % ls
BASIC_LICENSE            libclntsh.dylib.10.1     libocci.dylib            libocijdbc19.dylib
BASIC_README             libclntsh.dylib.11.1     libocci.dylib.10.1       liboramysql19.dylib
INSTALL_IC_README.txt    libclntsh.dylib.12.1     libocci.dylib.11.1       network
adrci                    libclntsh.dylib.18.1     libocci.dylib.12.1       ojdbc8.jar
genezi                   libclntsh.dylib.19.1     libocci.dylib.18.1       ucp.jar
install_ic.sh            libclntshcore.dylib.19.1 libocci.dylib.19.1       uidrvci
libclntsh.dylib          libnnz19.dylib           libociei.dylib           xstreams.jar
asai@gray instantclient-basic-macos.x64-19.8.0.0.0dbru % ./install_ic.sh 
/Users/asai/Downloads/instantclient_19_8
Creating dir: /Users/asai/Downloads/instantclient_19_8...
Copying /Volumes/instantclient-basic-macos.x64-19.8.0.0.0dbru files ...


DMGファイルのウインドウはもう必要ないのでアンマウントする。
/Users/ユーザー名/Downloads/instantclient_19_8/にインストールされるので、PATHを切るのだが、Downloads以下にあるのはイヤなので、一つ上にディレクトリを移動。

/Users/ユーザー名/instantclient_19_8/にパスを切る。.bashrcや.zshrcで環境変数PATHにinstantclient_19_8のディレクトリパスを追加すればOK。

exports PATH = /Users/ユーザー名/instantclient_19_8/:$PATH


みたいにすればOKなはず。
ターミナルを再起動してsqlplusコマンドを打ってみる。

asai@gray ~ % sqlplus
zsh: command not found: sqlplus


コマンドがない。
えーとSQL*Plusパッケージも必要なのね。

asai@gray ~ % cd /Volumes/instantclient-sqlplus-macos.x64-19.8.0.0.0dbru 
asai@gray instantclient-sqlplus-macos.x64-19.8.0.0.0dbru % ls
INSTALL_IC_README.txt SQLPLUS_README        install_ic.sh         libsqlplusic.dylib
SQLPLUS_LICENSE       glogin.sql            libsqlplus.dylib      sqlplus
asai@gray instantclient-sqlplus-macos.x64-19.8.0.0.0dbru % cp -r * /Users/asai/instantclient_19_8 


これでどうでしょう?

asai@gray ~ % sqlplus

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 11 08:30:09 2021
Version 19.8.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.

Enter user-name: 


きた!
ローカルでOracleデータベースが動いているわけもないので、接続はできず。
OCIに接続するにはホスト指定をすれば良いのだろうか。sqlnet.oraファイルを編集すればいいのか?
Oracleに繋げるの久しぶりー。

よくわからないので、OCIのコンソールにログイン。データベース接続のところから「ウォレットのダウンロード」をクリック。パスワードを入れろというので、入れた。

ウォレットのダウンロード.png

ダウンロードしてきたzipファイル内に、sqlnet.oraを発見。tnsnames.oraもある。tnsnames.oraの方にホスト名が書いてあった。なんか、highとかlowとか色々あるが...

よくわからないが、とりあえず、/Users/ユーザー名/instantclient_19_8/network/adminにコピーしてみる。
TNS_ADMIN環境変数でコピーしたディレクトリを設定。

export PATH = /Users/ユーザー名/instantclient_19_8/:$PATH
export TNS_ADMIN = /Users/ユーザー名/instantclient_19_8/network/admin


sqlnet.oraファイルにもパスのところが?になっているところがあるので、ちゃんと実在するインストール先のパスに変更。
これで、sqlplusコマンドを叩くのだが、ユーザーは「ADMIN」にして、パスワードはウォレットをダウンロードした時のやつにして、TNS名をtnsnames.oraに書いてある名前にしてみた。_highとか_lowとかはよくわからないのでとりあえず_lowで。多分、何かの優先順位なんでしょう。

asai@gray admin % sqlplus ADMIN/[パスワード]@db202108090627_low

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Aug 11 11:07:40 2021
Version 19.8.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.

Last Successful login time: Wed Aug 11 2021 10:49:46 +09:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.1.0

SQL> 


できた。
パスワードが丸見えなのがちょっと...ではあるが、sqlplusなんてあまり使わないからいいでしょ。
もっと使いやすいSQLクライアントを探してみるのである。

本日は以上。






サイト内を検索

nice!(0) 
共通テーマ:パソコン・インターネット

Oracle Cloud Infrastructure (OCI)にサインアップした話 [クラウド]

さて、本日はクラウドネタである。
私はAWSにサーバーを立ててシステム構築しているが、世の中にはAWSじゃないクラウドもある。

 MSだとAzure
 GoogleだとGCP
 OracleだとOCI
 Herokuとかよくわからない名前のクラウドサービスもある。

どれもクラウド上でサーバー環境を提供するもの。
まぁ、シェアはAWSが一番ぽい。次がAzureでGCPが3位。Alibaba Cloudっていうのもある。アリババが4位みたい。最新のデータじゃないかもだけど、そんな感じ。

どのクラウドサービスでも「無料枠」っていうのがある。AWSだと1年間の期限付きで無料で使えるサービスがある。AzureにしてもGCPにしても無料枠があるが期限付き。

でね。OracleがやってるOCIだと「無料枠の期限が"ない"」らしい。
さらに、「無料枠の中にデータベースが入っている」らしい。

「えっ、ホント?」と思ってしまうが、Oracleさんもクラウドサービスのシェア取りたいんだろうなぁ。
そういう私ではあるが「SQLポケットリファレンス」なんていう書籍の執筆者なので、無料でOracle使えたらうれしいかも。自宅サーバにいっぱいデータベース入れて検証するの大変なのよね。

ということで、無期限無料枠に釣られてOCIにサインアップしてしまった。

多分、以下のURLからサインアップできる。

Oracle Cloud Infrastructure (OCI)


サインアップ時は、クレジットカードの番号を入力する必要あり。無料枠を超えない限り請求されることはない(はず)。
ネットの記事にはSMSで承認するからスマホ/ケータイが必要と書いてあったりするが、やってみたらメールで承認できた。

サインアップする時に、自分のホームリージョンを決めなくてはいけないのだが、普通に「Tokyo」を選択するとなんかエラーメッセージが。「A1のインスタンスを作るのなら別のリージョンを選んでね」ということらしい。
無料枠を無期限にしたからユーザーが増えちゃって対応できなくなってるのね。

しょうがないので、「US West(San Jose)」にした。

AWSでもそうだが、日本に居たらTokyoリージョン使わないと、ネットワークが遅い。反応が遅い感じになる。そりゃあねぇ海外だからねぇ。OCIでも多分反応悪しだと思う。

クレジットカードの情報を入力すると、コンソール画面が表示されるが、Edgeは推奨されないブラウザになっているみたいで、Chromeを使えとの表示が。そんなところで嫌がらせしなくてもと思いつつ、Chromeでアクセスし直す。

2021-08-06 (1).png

なんか英語でよくわからん。US Westがデフォルトリージョンだからねぇ。
Quick Startが並んでいるだけか。
これは日本語にはならないのか?...

地球のアイコンで変更できるのか。

2021-08-06 (2).png

あっ。日本語で表示された。これなら読みやすい。

2021-08-06 (3).png

とりあえずは、VM作ってみるか。VMはVirtual Machineだろうな。AWSでいうとEC2インスタンスかな。
全部デフォルトで作ってみた。キーペアのファイルをダウンロードするのはAWSと同じ。
作成時間は、AWSと同じくらい?数分で作成された。
ssh用のキーペアをMacに持ってきてsshアクセス。IPアドレスは、インスタンスの詳細に書いてある。ユーザー名も書いてあった。

ログインは普通にできたので、/proc/cpuinfoを見てみる。

[opc@instance-20210806-1418 ~]$ cat /proc/cpuinfo 
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 23
model		: 1
model name	: AMD EPYC 7551 32-Core Processor
stepping	: 2
microcode	: 0x1000065
cpu MHz		: 1996.251
cache size	: 512 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 nt_good virt_ssbd arat
bugs		: fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips	: 3992.50
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 40 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: AuthenticAMD
cpu family	: 23
model		: 1
model name	: AMD EPYC 7551 32-Core Processor
stepping	: 2
microcode	: 0x1000065
cpu MHz		: 1996.251
cache size	: 512 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 1
apicid		: 1
initial apicid	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibpb vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 nt_good virt_ssbd arat
bugs		: fxsave_leak sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips	: 3992.50
TLB size	: 1024 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 40 bits physical, 48 bits virtual
power management:


AMD EPYC 7551で2コアだそうな。仮想化されているから、実際のCPUは違う?
まぁ、どうでもいい。AMDのCPUが2コア使えてる。32bitというのが気になるが。

メモリはというと...

[opc@instance-20210806-1418 ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:           686M        291M        101M        1.3M        293M        290M
Swap:          8.0G        5.8M        8.0G


メモリはしょぼいか。無料枠だし。
ストレージは...

[opc@instance-20210806-1418 ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         313M     0  313M    0% /dev
tmpfs            344M     0  344M    0% /dev/shm
tmpfs            344M  5.0M  339M    2% /run
tmpfs            344M     0  344M    0% /sys/fs/cgroup
/dev/sda3         39G  3.2G   36G    9% /
/dev/sda1        200M  7.4M  193M    4% /boot/efi
tmpfs             69M     0   69M    0% /run/user/0
tmpfs             69M     0   69M    0% /run/user/994
tmpfs             69M     0   69M    0% /run/user/1000


40Gくらい。こっちはまぁまぁか。
Ethernetは...

[root@instance-20210806-1418 opc]# ifconfig -a
ens3: flags=4163  mtu 9000
        inet 10.0.0.XXX  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::17ff:XXXX:XXXX  prefixlen 64  scopeid 0x20
        ether XX:XX:XX:XX:XX:XX  txqueuelen 1000  (Ethernet)
        RX packets 2564  bytes 634724 (619.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2132  bytes 1763042 (1.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


一つだけ。
遠いリージョンなので、通信は少々もたつく感じ。後でファイル転送してみよう。

AWSだとグローバルIPを割り当てていないと再起動で変更になってしまうが、OCIではどうだろう。
再起動してみる。

再起動した。IP変わらないじゃん。
停止して、起動したら変わるのかなぁ。ちょっとやってみる。

おや、変わってない。AWSだと変わってたと思うんだけど。OCIでは変わらないのかな。
ということは、一回作ると固定されるっていうことでいいんでしょうか。

せっかく作ったがAMDなので今度はARMのやつを作ってみる。
AMDのインスタンスは「終了」して削除する。停止と終了が異なるのはAWSと同じだな。

ARMのインスタンスにするには、シェイプというので変更する。AMDの場合はCPUとメモリは設定変更できなかったが、ARMのやつはできる。無料枠の最大である4 OCPUで24Gメモリの設定にしてみた。

2021-08-06 (4).png

キーペアはこれ毎回生成しないとダメなのか?AWSの場合は既存のやつを使うことができたのだが...
公開キーって何?
勉強不足なので、もう一度秘密鍵をダウンロード。公開鍵もダウンロード。

「作成」ボタンでインスタンスが起動するのだが、ARMに変えたらエラー発生。
容量不足だって。みんな試してみてるんだろうねぇ。メモリ24Gってけっこう多いよねぇ。

2021-08-06 (5).png

2 OCPUでメモリ12Gにしたらなんかできた。

sshでログインして、cpuinfoを見る。

[opc@instance-20210806-1510 ~]$ cat /proc/cpuinfo
processor	: 0
BogoMIPS	: 50.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x3
CPU part	: 0xd0c
CPU revision	: 1

processor	: 1
BogoMIPS	: 50.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp ssbs
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x3
CPU part	: 0xd0c
CPU revision	: 1


ARMの場合はこういう感じで表示されるのね。
メモリは...

[opc@instance-20210806-1510 ~]$ free -h
              total        used        free      shared  buff/cache   available
Mem:            10G        478M        9.6G         24M        595M        9.0G
Swap:          8.0G          0B        8.0G


ん、10Gしかないけど。ちょっと鯖読んでる感じ?1024倍じゃないのかな?

ストレージは

[opc@instance-20210806-1510 ~]$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         5.3G     0  5.3G    0% /dev
tmpfs            5.4G     0  5.4G    0% /dev/shm
tmpfs            5.4G   25M  5.3G    1% /run
tmpfs            5.4G     0  5.4G    0% /sys/fs/cgroup
/dev/sda3         39G  3.0G   36G    8% /
/dev/sda1        200M  7.9M  192M    4% /boot/efi
tmpfs            1.1G     0  1.1G    0% /run/user/994
tmpfs            1.1G     0  1.1G    0% /run/user/1000


同じかも。

一度、作成できたのでこのまま遊んでみるか。

無料枠では、4 OCPU 24Gメモリまで使える。従って、あと2 OCPU 12Gのインスタンスをもう一つ作成できる。

2021-08-06 (6).png

あと、Databaseも入れてみないとね。せっかくOracleなんだから。





サイト内を検索

nice!(0) 
共通テーマ:パソコン・インターネット

Let's Encryptでのサーバ証明書が有効期限切れ [クラウド]

本日は、サーバー関係の話である。

3カ月前にCertbotで無料のサーバー証明書を手に入れた。



Let's Encryptで発行される証明書は有効期間が3カ月と短い。
なので、3カ月経過したら更新をやらないといけない。
自動で更新がかかるようにcronをしこんでおいたのだが、なんか失敗したようでアクセスできなくなっていることに気付いた。

えー、おかしいなぁ...

とブツブツ言いながら、端末を開いてcertbotコマンドで手動更新してみると、やっぱりエラー。

nginxの設定で「server_name _;」となっていて、_はダメと言っているようであった。

server_name ドメイン名;


のようにしてやると、certbotコマンドでの更新はうまくいった。
これでnginxを再起動すればOKでしょう。

と思ったのだが、やっぱりアクセスできず。
キャッシュとかが残っているのか?と思って、しばらく経ってからアクセスしてみたがやっぱりダメ。

おかしいなぁ。確かに、/etc/letsencript/archiveにはcert2.pemやらprivkey2.pemができているので更新はされていると思うのだが...

nginxの設定ファイルをもう一度見てみると...

ssl_certficate "/etc/letsencript/archive/xxxx/cert1.pem"


となっている。
更新して新しくできたのが、cert2.pem。設定ファイルはcert1.pemとなっている。
これじゃあダメじゃん。

/etc/letsencript/archive には過去のを含めてアーカイブされるっていうことだな。最新のやつは、/etc/letsencript/liveの方にシンボリックリンクで作成されるのか。

ああ、そういうしくみになっているのね。

ssl_certficate "/etc/letsencript/live/xxxx/cert.pem"


に変更したらうまくいった。汗





サイト内を検索

nice!(0) 
共通テーマ:携帯コンテンツ

AWS EBS ボリュームタイプを変更した話 [クラウド]

どうも、本日はAWSネタである。

AWSにEC2インスタンスを立ててWebサーバーを運用している。先月、Let's Encryptを入れた際に新しくAmazon Linux 2のEC2インスタンス(t4g.nano)にした。Webサーバも無事にSSL化できた。

 https://asai-atsushi.com




旧インスタンス(t3a.nano)は停止状態にしておいた。t3a.nanoよりもt4g.nanoの方がコスト的にお買い得だったので。

これで、月々のお支払いも「少しは安くなる」ものと期待していたのではあるが、なんか予想に反して「少しばかり高く」なってしまったではないか。まぁ、ほんの100円くらいなので、円安になったからか?とも思ったのではあるが、気になり調べると...

 停止状態のEC2インスタンスで使っていた「EBSボリュームが残っている」だけ。

であった模様。EC2インスタンスを停止しておけば、EC2の料金はかからない。しかし、EBSの方は残っているので、その分課金されてしまう。EBSの容量が16Gになっていた。ひとつのEC2で8Gのボリュームを使っているので、ふたつで16G。8Gあたり月に約1$課金されるようなので、合計2$課金されている。これが100円くらい増えた理由か。

早速、停止状態の旧EC2インスタンスは「終了」して削除してしまおう。
EC2インスタンスを終了状態にすると、使っていたEBSも削除されるので、これで課金されることはなくなる。

ついでに、EBSボリュームタイプも変更しておくか。GP2になっているが、これをGP3にする。

スクリーンショット 2021-05-07 8.59.46.png

インスタンスを起動状態のままオンラインで変更できるらしい。なんと、本当に?と思ってしまうが、できちゃうらしい。
GP2よりもGP3の方がお安いので、またまたコスト減となって嬉しい。

オンラインでできるといっても、少々時間はかかるようである。そりゃあねぇ、新しくボリューム作ってコピーしているだろうから。
それでも、この記事を書いている間の「ものの数分」で状態が「in-use」になり、GP3にボリュームタイプが変更された。
今回は8Gのボリュームだから数分で済んだのであろう。100Gとかあれば、もっとかかると思われ。

とりあえず、これで月6$くらいまでにはなったかも。





サイト内を検索

nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

Certbot 無料でサーバー証明書を取得する Let's Encrypt [クラウド]

本日は、サーバー関係のネットワークネタである。

署名とか証明書ってSSLの世界では"しょっちゅう"出てくる話。本ブログでも、コードサイニングの記事でもちょっと触れている。
普通、サーバー証明書を手に入れるのには、お金がかかる。

AWSなら無料っていう話もあるが、実は、ロードバランサー入れないとSSL証明書を使えないので、別途ロードバランサー代がかかってしまう。なので、完全に無料ではない。ロードバランサー入れたら多分、月に数千円はかかるかも。

まぁ、普通に証明書を取ろうと思ったら、1年間で、ナン万円もかかってしまうし、手続きとかも面倒。なので、それに比べたら安いかも。

かくいう私なのだが、AWSにサイトはあるが、ロードバランサー入れるほどの規模じゃないしなぁ、別にHTTPSじゃなくてもいいや。くらいでいたのだが、何かとこのご時世「HTTPSじゃないとダメ」みたいな風潮がある。例えば、ブラウザに安全ではありません、みたいに表示されたり、OIDCプロバイダーを稼働させるにはHTTPSじゃないとダメとか。

でもって、何とかSSL証明書が手に入らないものかと調べると、Let's Encriptというシロモノを発見。まぁ、検索して見ればすぐにわかる。

Let's Encriptを使うとなんと「無料でサーバー証明書が手に入る」というのである。

本当に?AWSみたいに、何かのサービスに入らないとダメで別途料金がかかるのでは?と勘ぐってしまうが、ちょっとやってみることにした。

まずは、certbot、pythonとgitが必要とのこと。certbotはamazon linuxのyumリポジトリにはなかったので、yumでインストールできなかった。しばらく放置していたからなぁ。amazon linux 2のEC2インスタンスを新規に立ち上げて、そこでやってみることにしよう。インスタンスタイプは、ARMのやつ(tg4.nano)にして更なるコストダウンを計ることに。インテルのバイナリじゃないとダメなモジュールも使ってないし、ARMでOK(前にARMはビッグエンディアンと書いた気がするが、Intelと同じリトルエンディアンみたい。ちょっとここで訂正したいと思う)。

amazon-linux-extraコマンドで色々インストール。詳細は、省略。検索してみてね。

certbotがインストールできたら、コマンドを実行。
連絡先用のメールアドレスとドメイン付きのホスト名を入力すれば登録完了。あっけなく終わる。

certbotを実行するホストはDNSでちゃんと名前が検索できてIPアドレスに変換できる必要がある。ちゃんとインターネットに公開されているサーバーで実行しないとダメということらしい(DDNS+自宅サーバーでcertbotができるかどうかは不明)。

有効期限が90日と短いので、cronで定期更新をかけておく。こちらもcertbotコマンドを実行することで更新ができる。

取得したサーバー証明書やプライベートキーは、/etc/letsencrypt/live/ドメイン名 以下のディレクトリに入っているので、apacheやnginxの設定ファイルを編集して証明書関係のファイルを入れ、再起動してやればSSLに対応できる。

サーバーがAWSのEC2に置いてある場合はセキュリティグループの設定で、HTTPSを開けておかないと通信できないので注意。
EC2インスタンスで(iptablesなんかの)ファイアウォール入れていたら、そこにもルールを入れる必要がある。自分のところではやってないので、EC2側では何もやっていない。

ここまでやるのに、ほんの10分くらいか。本当にSSL化できたのか...

ブラウザからhttps://asai-atsushi.com でアクセスしてみると、ちゃんと表示されるではないの。マジか。

スクリーンショット 2021-04-18 6.54.02.png

これで、OIDCやサーバープッシュの試験ができるかも。やったね。




サイト内を検索

nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

TLSのバージョンアップ AWSのALB使っているんだけど [クラウド]

opencv4nodejsの続編を書こうと思ったのではあるが、セキュリティ関係でホットな「ネタ」ができたので、ちょっと書いてみようと思う。

HTTPでセキュアな通信をしようとしたら、暗号化してHTTPSになる。20年前くらいは「SSL」って呼んでたかなぁ。
SSLはSecure Sockets Layer(え、Secret Socket Layerじゃないの?微妙な違いだから"ごまかせる"かも)。
なんかいつの間にか、TLSとか呼ばれるようになった。TLSはTransport Layer Securityだそうな。

でもって、SSLがTLSになったのだが、そのバージョンとしては

SSL1.0 -> SSL2.0 -> SSL3.0 -> TLS1.0 -> TLS1.1 -> TLS1.2 -> TLS1.3

のように遷移している模様。
でもって、2020年時点では、SSLはあまり使われていなくて、TLS1.2が主流。
言わずもがな、バージョンが大きい方が「セキュア度が高い」そりゃそうだよね。
TLS1.0や1.1は”もう古い”過去のプロトコルであるらしい。

でもって、自分の関係しているWebサイトに対して、セキュリティ評価にかけてもらったのだが、その結果...

 TLS1.0や1.1はもはや推奨されない暗号化通信になるので、早急なバージョンアップをお願いします。

というもの。
どうも、2020年にはメジャーなブラウザでTLS1.0/1.1が無効化されるらしい。
でも、今は2020年の12月だけど?

「コロナの影響で先延ばし」みたいな記事も発見できた。

WebサイトはAWS上に構築している。WebサイトのフロントエンドはALB。ALB配下にnodejsのECSタスクを複数立てている感じ。ALBのリスナーポートが443で、nodejs側のポート3000に転送されるようになっている。クライアントとALB間がTLSで暗号化されたHTTPS通信となり、ALBとECSタスク間は暗号化されていないHTTP通信となる。

なので、AWS ALBを使っているのであれば、ALBの設定を変更すれば、TSL1.2だけを使うようにすぐに変えることができる。

参考サイト
https://www.japon-line.co.jp/tech/aws-elastic-load-balancerのtlsバージョンを1-2に固定する方法/

「だが、しかし」である。

上記のサイトにも書いてある通り、ホイホイと気軽にやると、

 昨日までは繋がっていたのに、今日は「使えないぞ」。
 なんか、TLSのバージョンがどうのと言っているが「これは何だ」。

といったクレームが頻発するかも知れない。
メジャーどころのブラウザはTLS1.0/1.1を廃止するといっても、それは最新バージョンでの話。いまだにWindows7やXPで古いバージョンのIEを現役で使っているところも少なくはない... かも知れない。

ALBのログ



ということで、ALBのログを収集して、TLS1.0でアクセスしてくるクライアントが「どの程度いる」のかを調べてみることにした。
ALBでのログ収集はいたって簡単。チェックボックスにチェックを入れて有効化するだけ。ログはS3に保存されるが、ポリシー設定するのが面倒なので、ALBの設定画面でS3バケットを新規に作成するチェックを入れてログを有効化した。

有効化するとS3にログファイルが溜まり始める。ログファイルは5分毎に分割されて作成されていく。ローカルに持ってきてデータベースに入れて集計してもよかったのだが、AWSのAthenaを使うと「いとも簡単」にできるようなので、やってみた。

以下のサイトが元ネタ
https://dev.classmethod.jp/articles/alblog-tls/

ログ分析のやり方は上記のサイトにゆずるとして、SQL命令で簡単に集計することができた。
ふーん、時代は進んでいるのね。
apacheのログを持ってきて、集計して、分析ということを昔は"苦労して"やっていたような気がするが...

それはさておき、半日が経過した時点で集計してみると、ほとんどがTLSv1.2であることが判明。
何だ、取り越し苦労だったかも。でも、まだサンプル数が少ない、ということもあり得るかな。もう少しログ収集を続けてみよう。




サイト内を検索

nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AWS EBSマウントしてEC2インスタンスへのsshログインを復旧させた話 [クラウド]

コロナウイルスも下火になってきたことだし、ブログを更新しておくか。
ということで、本日は、AWSで「やってしまった話」である。

EC2インスタンスの自動停止



ご存知のように、AWS EC2インスタンスは、動いている間だけ課金される。なので、開発用に必要なインスタンスは、夜間を停止しておけばコスト的に「うれしい」ことになる。ならば、ということで自動的に午後8:00に停止して、午前8:00に起動するようにCloud Watch Eventでスケジューリングしたのが「ハマった」きっかけなのではあるが...

スケジュールの設定自体は、結構簡単で、AMIでポリシーを作ってやって、Cloud Watchのルールを作成してやればOK。停止の方は、ポリシー自動生成でできたようだが、インスタンス起動の方は、ポリシー作ってSSMだかなんだかで起動してやる必要がある。

まぁ、開発用のサーバーで自分ひとりしか使ってないので、失敗しても手動で立ち上げればOKでしょ?と気楽な感じでやってみた。
それが、昨日のことである。朝、メールチェックすると、要メンテナンスな内容が飛び込んできていた。早速、データを確認すべく、sshで開発用のEC2にログインすると...

接続できない感じ。そうそう、昨日自動停止して、起動するようにしたからね。ちゃんと起動していないか、IPアドレスが変更されたのであろう。AWSのコンソールで確認する。

ああ、やっぱりIP変わってる。常時起動にしていたから、Elastic IPは割り当てていなかった。多分起動し直したらこうなっちゃうかも、と思いつつも夜間停止したので、慌てることなく、sshの接続先を変更して「事なきを得た」。

以下のようにシェルスクリプトを作って、sshログインしていたが、IPアドレスのところを変更した、ということ。

ssh -i "キーペアのファイルパス" ec2-user@EC2インスタンスのIPアドレス


これで、ちゃんとログインできた。
OK、OK、ということで作業を進めていくが、sshの他、scpでファイル転送っていうこともやっている。ローカルでWebアプリを作って、AWSのEC2インスタンスにWebアプリのtarボールイメージをアップロード、EC2インスタンスでtarボールを展開しDockerイメージを作って、リポジトリにアップロード。ECSのタスクを更新して、Webアプリを更新。というリリース方法を取っているので、scpでのファイル転送がWebアプリの更新には必須となっている。

scpによるファイル転送についても、IPアドレスだけ変更すれば問題ないはず。scpについてもスクリプトを作っているので、IPアドレスの部分を変更すればOK。

scp -i "キーペアのファイルパス" $1 ec2-user@EC2インスタンスのIPアドレス:$1


のようになっているので、IPアドレスの部分だけを変更したつもりであった。
じゃあこれでAWSのEC2インスタンスにコピーっと。ん?いつもと様子が違う。いつもならファイル転送の様子が、表示されていたのだがこれがない。なぜ?エラーになった様子もなく、コマンドはすぐに終了している。

インスタンスを起動し直したことで、セキュリティ関係の何かが変わったのか?
ググってみるとpermissionからみならchmodで権限を変えればOKみたいな記事を発見。/home/ec2-userのパーミッションを777に変更してみる。これでイケるんじゃないと思えたが、状況は変わらず。ファイル転送はできない。

sshログインはできるけど、scpファイル転送はできないって、そんなことある?


ポートは同じだから、フィルタリングされちゃっているっていう話はないよな。scpコマンドはすぐに終了している。接続できなくてタイムアウトしている感じはない。エラーも出ていない。サーバー側のsyslogも参照してみたが、エラーなし。IPアドレスも確認している。

別のPCからやってみよう、と思いssh接続すると今度は「permissionエラー」で接続できないではないか。
ありゃリャ、さっきまでは接続できていたじゃない。なんで、パーミッションがダメ?
接続できていたPCに戻って再度接続してみる。あーんやっぱりできなくなってる。
えっ、やってしまったかも。落ち着いて原因を考えてみよう。直前にやったことといえば、/home/ec2-userのパーミッションを変えたっていう事くらい。ホームディレクトリのパーミッションをchmodで777にしちゃダメだったか?

EBSを別のEC2でマウント



もう、お手上げ。sshログインできないんじゃ、EC2インスタンスの作り直しか?


かと思われたが、そんなことはちゃんとAWSでは「想定済み」みたいである。別のEC2インスタンスにEBSストレージをマウントしてファイルシステムをいじるということが可能になっている。
やり方は結構面倒な作業になる。
まずは、問題が発生しているEC2を停止させる。終了ではないよ。ここで終了するとインスタンスが消えてしまうので注意。
EC2で使用していたEBSボリュームをデタッチして解放する。インスタンスが停止していないと解放できない。
AMIが同じ別のEC2を、同じAZに用意する。EC2はボタンひとつで作成できるが、同じAZにするにはオプション指定する必要がある。
EC2が立ち上がったら先ほど解放したEBSボリュームを別に起動したEC2にアタッチする。アタッチではマウントまではしてくれないので、EC2にログインして、mountコマンドを使ってファイルシステムにマウントする。
マウントすればEBSボリュームの仲が見れるようになるので、後は、お好きなようにできる。
今回は、/mnt/home/ec2-userのパーミッションを元の700に戻した。
ファイルシステムの修復ができたら、アンマウントしてデタッチ、元のEC2にアタッチし直す。アタッチする際に起動デバイスとしてアタッチしないとダメだったので注意。
アタッチできたらEC2を起動する。

やった、これでssh接続が復旧できた。やれやれという感じで一服したのだが、この時点でもう昼近くになってしまっている。

scpはまだできない



ssh接続できるものの、scpでファイル転送はできないままである。
何気にクライアント側でlsしてみると、

「ec2-user@IPアドレス」という名前のファイルができているじゃない。

なんだ、そういうことか。scpのスクリプトでコピー先のファイル名を入力しなくても良いように、$1って書いてあった部分がなくなって、scpコマンドが普通のcpコマンドのように機能してローカルコピーになっていただけか。
つまり、次のようになっていた

scp -i "キーペアのファイルパス" $1 ec2-user@EC2インスタンスのIPアドレス

これを

scp -i "キーペアのファイルパス" $1 ec2-user@EC2インスタンスのIPアドレス:$1

のように変更したらちゃんと元のように動いた。

permissionいじる必要なかったじゃない。


といえばそうなのだが、EC2インスタンスに接続できなくなってしまった際の「復旧方法」がわかったのでよしとする。
でも疲れタァ。





サイト内を検索

nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AWSのインスタンスタイプを変更した話 [クラウド]

本日は、AWSのインスタンスタイプを変更した話題である。
かくいう私、独自ドメインを取得している。AWSの仮想PCであるEC2でWebサーバーを立ち上げちゃったりしている。
URLは以下

http://asai-atsushi.com/

AWSにアカウントを作ったのが約1年前である。そう、無料枠がなくなってしまったので、課金されている。課金といっても数千円なので、別にアカウントを作って引っ越しするまでもないか、とは思っているのではあるが...
どうしたものか。

EC2のインスタンスはt2.microを使っている。最近はt3というインスタンスタイプもできたらしい。AMDのCPUを使っているt3aなんちゃらが結構「お安い」みたいなので、インスタンスタイプを変更するか。

現在使っているのはt2.micro。
料金は、t2.micro 0.0152ドル/時 なので、720時間にしたら、10.944ドル。日本円にしたら1200円くらい。
t3a.micro 0.0122ドル/時 にしたら、720時間で、8.784ドル。966円。ワンコインとはいかないまでも、1000円を切った。

t3a.nano 0.0061ドル/時 っていうのもある。720時間で、4.329ドル。483円。やったワンコインでできるじゃん。


インスタンスタイプの変更



じゃあやってみるか。AWSのEC2なら簡単にインスタンスタイプを変更できるらしい。というのでコンソールを開いてみる。



まずは、インスタンスを「停止」しないといけない。ここで間違っても「終了」を選んではいけない。あくまで停止させるだけ。
きっと誰もアクセスしてないだろうから、気にせず停止してしまう。

インスタンスを選んで、アクション -> インスタンスの設定 -> インスタンスタイプの変更をクリック。
「t3a.nano」を選んでみた。
EBS最適化に自動的にチェックが入った。まぁ、これはそういうものなのであろう。

「適用」ボタンをクリックしちゃう。

一覧表示のインスタンスタイプのところが変化する。

アクション -> インスタンスの設定 -> 開始 で起動させる。

なんか、あっという間に変更できた。





サイト内を検索

nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ

AWSのElastiCacheはノードのタイプをcache.t2.microにしないと無料枠には収まらないので注意 [クラウド]

AWSにやられた

AWSを勉強中である。AWSはAmazon Web Serviceのこと。
なんか、クラウド上でなんでもできてスゴイ。そのうち「ネットに住む」っていうアニメやSFみたいな話が現実になるような気さえしてくる。

AWSにユーザー登録すると1年間は無料枠というのをもらえる。なので、EC2のインスタンスをたくさん立ち上げても無料枠内なら請求されることはない。

ふーん。なんとも太っ腹。

どうでも良いかも知れないが、何かと3文字略語が出てくる。EC2はElastic Compute Cloudの略であるそうな。ECCだと英会話教室みたいになるのでCがふたつでEC2なのかどうかは不明。

サービスの中にはRDSというのがあり、MySQL/MariaDBやPostgreSQLそれにOracleやMS SQL Serverもある。SQL ServerはExpressエディションしか無料枠にないが、Oracleは全部無料枠にあるぞ。マジか。

RDSも3文字略語だな。こちらは、Relational Database Service。まんまですな。

AWSの中には「どんだけストレージがあるのよ」という感じではあるが。

試しにEC2のインスタンスをふたつ、RDSをPostgreSQLでひとつ、ロードバランサー(ALB)をひとつ作ってみた。各インスタンスにNode.jsを入れて、npmでexpressやらSocket.ioを入れてチャットのデモを作ってみたりした。

ロードバランサーがELBだとWebSocketがちゃんと通らず機能しないが、ALB(Application Load Balanser)でセッション維持みたいな設定をするとちゃんとできることがわかり、やってみるとちゃんとチャットできた。

しかし、同一のバックエンドに接続していないとメッセージが飛ばない。分散しちゃったが故の弊害である。

調べると、Node.jsのパッケージsocket.io-redisというのを導入すれば、プロセス間通信でセッション情報を共有できるので、分散されてしまっても大丈夫なようである。つまりredisサーバを入れれば良いことがわかった。

AWSには沢山のサービスがある。その中にElastiCacheというのがある。このサービスがredisを提供してくれるものらしい。もう、至れり尽くせりじゃないですかAWS。早速作ってしまうのである(ElastiCacheは省略してないなぁ)。
redisはオンメモリのデータベースみたいである。キャッシュとなっているのもオンメモリならではなのか。

作る方法はWebからやる。AWSのサービスは基本Webブラウザで「ちょいちょい」って操作して作成する。

がしかし、ここに落とし穴が開いているのである。

ちょいちょいって作ると、データベースの大きさがlarge辺りになる。largeがデフォルトなわけね。ElastiCacheにも無料枠があるのだが、無料で使えるのは、microだけ。なので、デフォルトのlargeで作ってしまうと課金されてしまうのである。

ElastiCacheの作成.png

socket.io-redisの動作確認は取れたのではあるが、これで2000円くらい料金が発生してしまった。

EC2のインスタンスを作る画面には「ここが無料枠です」みたいな表示があるのでわかりやすいが、redisサーバを作る画面はにはそのような配慮はない。他にも色々サービスがあるようだが、大きさに気を付けないと余計なコストがかかってしまうので注意しなければ。

しかし、AWS難しいぞ。EC2じゃなくて、ECSの方が自動スケールしてくれるので良さげではあるが、Dockerとか知らないとキツそう。あーまだまだ先が長いなぁ。

全然話が違うがAmazonプライム・ビデオで観れる「シリコンバレー」がとても面白いのでIT業界のみなさんに観て欲しいと思い紹介しておく。




Silicon Valley - Season 1 [Blu-ray]

Silicon Valley - Season 1 [Blu-ray]

  • 出版社/メーカー:
  • メディア: Blu-ray







サイト内を検索

nice!(0)  コメント(0) 
共通テーマ:携帯コンテンツ
クラウド ブログトップ


Copyright Atsushi Asai Google+朝井淳
[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

イラストで理解 SQL はじめて入門

イラストで理解 SQL はじめて入門

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/05/16
  • メディア: 単行本(ソフトカバー)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2015/03/03
  • メディア: 単行本(ソフトカバー)

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

Access クエリ 徹底活用ガイド ~仕事の現場で即使える

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/05/25
  • メディア: 大型本