はじめに
Oracle Cloud を使っていて、これ便利だなーとか、これ注意したほうがいいなーとか、これ小ネタだなー と気が付いたものを、まとめていきます。
気が付いたタイミングで随時追加していきます。
Compute
Oracle Linux を無停止アップデート
Oracle Cloud Infrastructure 上で Oracle Linux のを使用する場合は、追加コスト無しに Oracle Linux Premier Support を受けることが出来ます
Oracle Linux Premier Support には、Oracle Linux を無停止してアップデートを行うための、Oracle Ksplise が含まれています(スゴイ)
Oracle Ksplise を使用すると、再起動無しに OSのセキュリティパッチを適用することが出来るため、運用コストの大幅削減が見込まれます
Document
https://docs.cloud.oracle.com/iaas/Content/Compute/References/images.htm#zero
OCPUについて
OCPU(Oracle Compute Units)は、Instanceのスペック(Shape)を指定するときに、CPUの個数を表現するものとなっている。
1OCPUは、1物理CPUコア = Hyper-Threading後で2論理CPUコア となっており、仮想Instanceから見ると、CPUが2個見えている。地味にわかりにくいので、普通に2vCPUって表現してもらったほうが嬉しいなコレ・・・
仮想インスタンスへのログイン方法
Oracle Linux と CentOS
ユーザ:opc
ログイン方法:秘密鍵を使用してSSH接続
memo : opc は、「Oracle Public Cloud User」の略らしい
Ubuntu
ユーザ:ubuntu
ログイン方法:秘密鍵を使用してSSH接続
Windows
ユーザ:opc
ログイン方法:パスワードを指定してリモートデスクトップ接続
パスワード:Oracle Cloud のコンソールやAPIを使用して、one-time password を確認。初回ログイン後はパスワード変更するのが推奨
OCI Utilities
Oracle Cloud 上でLinux仮想インスタンスを稼働する時に、Linuxに入れておくと便利な OCI Utilities という名前のソフトウェアがあります。
Utilities を導入することにより、ブロックボリュームの自動検出、ルートファイルシステムの拡張、セカンダリVNICの設定、インスタンスのPiblicIPの検出、インスタンスのメタデータ表示、といった各種便利な機能を利用することが出来ます。
DHCP
仮想インスタンスは、DHCP client は有効にし続ける必要があります。無効にしてしまうとリース期限(24時間)が切れたタイミングでアクセスが出来なくなります。
NTP
OCI側で無償のNTPサーバを提供しています。基本的にはInternetではなく、OCIのNTPサーバと時刻同期をするのが良いとおもいます。
DNS
OCI上でInstanceを利用するときは、2種類のDNS構成パターンがあります。
- Internet and VCN Resolver (default)
- Custom Resolver
Internet and VCN Resolver
何も意識しないでInstanceを作成すると、このパターンとなります。
VCN上で提供されている、仮想的なDNSサーバを利用する形となっていて、Internet上のhostnameと、VCN上の内部的なhostnameを名前解決することが出来ます。
LinuxInstanceの /etc/resolv/conf は以下の設定となっており、169.254.169.254 を使用して名前解決を行います。
[root@web-1 yum.repos.d]# cat /etc/resolv.conf
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
; generated by /usr/sbin/dhclient-script
search tutorial.oraclevcn.com subnet2.tutorial.oraclevcn.com
nameserver 169.254.169.254
www.google.co.jp を名前解決した例
[root@web-2 ~]# dig @169.254.169.254 www.google.co.jp
; <<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<>> @169.254.169.254 www.google.co.jp
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52622
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.co.jp. IN A
;; ANSWER SECTION:
www.google.co.jp. 300 IN A 216.58.211.99
;; AUTHORITY SECTION:
. 514413 IN NS e.root-servers.net.
. 514413 IN NS i.root-servers.net.
. 514413 IN NS l.root-servers.net.
. 514413 IN NS m.root-servers.net.
. 514413 IN NS k.root-servers.net.
. 514413 IN NS b.root-servers.net.
. 514413 IN NS d.root-servers.net.
. 514413 IN NS j.root-servers.net.
. 514413 IN NS h.root-servers.net.
. 514413 IN NS a.root-servers.net.
. 514413 IN NS c.root-servers.net.
. 514413 IN NS f.root-servers.net.
. 514413 IN NS g.root-servers.net.
;; Query time: 327 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sat Feb 09 00:34:42 GMT 2019
;; MSG SIZE rcvd: 272
VCN上のInstanceに紐づいているInternal な FQDN を名前解決した例
[root@web-2 ~]# dig @169.254.169.254 web-1.subnet2.tutorial.oraclevcn.com
; <<>> DiG 9.9.4-RedHat-9.9.4-72.el7 <<>> @169.254.169.254 web-1.subnet2.tutorial.oraclevcn.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5262
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;web-1.subnet2.tutorial.oraclevcn.com. IN A
;; ANSWER SECTION:
web-1.subnet2.tutorial.oraclevcn.com. 300 IN A 172.16.2.2
;; AUTHORITY SECTION:
subnet2.tutorial.oraclevcn.com. 86400 IN NS vcn-dns.oraclevcn.com.
;; ADDITIONAL SECTION:
vcn-dns.oraclevcn.com. 82135 IN A 169.254.169.254
;; Query time: 2 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sat Feb 09 00:44:40 GMT 2019
;; MSG SIZE rcvd: 119
Custom Resolver
独自に設定した DNSサーバを指定するパターンとなります。
VCNで、独自にDNSサーバを設定したDHCP Option を作成した後、VCN Subnetを作るときにDHCP Optionを指定することで、Custom Resolver を構成することが出来ます。
例えば、Custom Resolverとして Googleが提供しているDNSサーバ (8.8.8.8) を設定することで、以下の設定とすることが出来ます
[opc@testdns ~]$ cat /etc/resolv.conf
; Any changes made to this file will be overwritten whenever the
; DHCP lease is renewed. To persist changes you must update the
; /etc/oci-hostname.conf file. For more information see
;[https://docs.cloud.oracle.com/iaas/Content/Network/Tasks/managingDHCP.htm#notes]
;
; generated by /usr/sbin/dhclient-script
nameserver 8.8.8.8
Networking
OCIで予約されているネットワーク
次のCIDRは、OCI側で使用されるので付与することはできません。
ブートボリュームおよびブロックボリュームへのiSCSI接続、インスタンスメタデータ、およびその他のサービスに使用されます。
169.254.0.0/16
OCIで予約されているアドレス
Subnetの中で次のIPアドレスは予約されているため、Instanceなどで使用できません。192.168.0.0/24 を例にしています
- 192.168.0.0 (the network address)
- 192.168.0.255 (the broadcast address)
- 192.168.0.1 (the subnet default gateway address)
Gatewayは .1 を使用する形ですね。.254 になじみのある方は注意です。
Security List の適用先
Security List の適用先は、Subnet となっています。AWSには、セキュリティーグループと、ネットワークACLという2種類の概念が存在しており、InstanceとSubnetのパケットフィルターをそれぞれのレイヤーで管理することができます。が、OCIではSubnetのみの管理となっています。
細かいアクセスポリシーの設定は、Instance内の Firewalld や Iptables を使用するとよいと思います
Default の Security List は Ping(ICMP)が通らない
Default で作成された Security List では、VCN上に作成されたInstance間で Ping(ICMP) を行うことが出来なくなっている。正確に記載すると、ICMPのType3(到達不可能) のみ通信を許可している。typeをallを変更することで、Pingを通すことが出来る
マルチキャスト不可
マルチキャストは通信できない。マルチキャストが必要なアプリケーションを動かす際には、検討が必要
Internet Gatewayの地味にハマる仕様
Internet Gateway は、InternetからVCN上のInstanceへ通信を行うためのgatewayとなっています。地味なハマる仕様として、Internet Gateway は NATは行ってくれません。
Public Subnet に紐づいている、Route Table の Default GatewayをInternet Gatewayとしている場合、そのSubnetにInstanceをPublicIP無しで作成すると、Internetと疎通を行うことが出来ません。Internet Gateway は NATを行うことが出来ないためですね。
じゃー NAT Gateway を追加すればいいかというとそれも結構メンドクサイです。Route Table の DefaultGW を Internet Gateway にしているので、NAT GatewayはDefaultGWにすることが出来ないため、適切なStaticRouteの設定は難しいです。
じゃーどうするかというと、Subnetを設計するときに役割を明確にして使い分けを行うとよいと思います。
Subnetの役割
- Internetからのアクセスを許すSubnet。ここに作成するInstanceはすべてPublicIPを付与する。webサーバなどを配置するFrontend用のSubnetという位置づけ
- Internetからのアクセスを許さないけど、NATでInternetへ出るSubnet。ここに作成するInstanceはPublicIPは付与しない。データベースなどを配置するSubnet
IPsec VPN の制限 (?)
OCIのVCN同士でIPsec VPN を接続検証することが出来なかった(少なくとも自分の環境では)
片方のVCNでDRG+IPsec Connectionを作成し、もう片方のVCN上でLibreswanを稼働させてみたが、ヒアを張ることはできたようにみえたものの、PingやSSHなどの通信は通らなかった
BlockVolume
Volumeの接続タイプ
OCIのBlockVolumeには2種類の接続タイプが存在しています
- iSCSI方式
- 準仮想化方式
iSCSI方式
メリット
準仮想化方式と比べるとパフォーマンスが良い。Oracle Cloud で掲げられているパフォーマンスのSLAは、こちらのiSCSI方式を選択した時のみ有効になる。
デメリット
InstanceがiSCSIのイニシエータとなる必要があるため、イニシエータに必要な設定や、fstabの設定を行う必要がある。
iSCSIを経由したfstabの指定は、注意して作成する必要がある。/dev/sdXの番号は再起動するたびに変更になるため、wwidや永続的なpath設定を通じてfstabを設定する必要がある
準仮想化方式
メリット
OCI上で設定するだけで、Instance上からBlockDeviceが見える (準仮想化された状態)
デメリット
iSCSI方式と比べるとパフォーマンスが落ちる
Volumeの容量制限
50GB ~ 32TB(32,768 GB) の間で容量を指定する必要がある。また、増減で指定可能な単位は1GB単位で指定する必要がある。
Volumeが接続可能な制限
Block Volume は、同一のAD(availability-domain)に存在するInstanceにのみ接続可能。他のADや他のRegionには接続することが出来ない。
なお、Block Volume には Fault-Domain の概念は存在していないため、instanceが存在する Fault-Domain は意識しなくても良い
VolumeのAttach type iSCSI時の注意点
再起動するたびに /dev/sdX の番号が変わる。fstabに記載するときに要注意。要詳細追記
- uuidを使用する
- 永続的なpathを使用する
検証済みQiita記事
https://qiita.com/sugimount/items/913aab1e1c9759486abc
Image
WindowsImageをImportする前にレジストリ設定が必要
WindowsInstanceのタイムゾーンを変更した場合、HWクロックと同期したタイミングでデフォルトのタイムゾーンに戻る。この場合、レジストリを変更する必要がある
https://docs.cloud.oracle.com/iaas/Content/Compute/Tasks/imageimportexport.htm#WinOS
x7 x5 サーバによって、Imageの互換性がある
Oracle Cloud では、Oracle Server X5とX7の二種類でコンピュートリソースなどを提供しているようです。Compute Host でX7とX5のどちらを利用するかによって、それに対応するImageを使用する必要があります。異なるバージョンでImageを動かしてしまうと、一部の機能が動かないことがあるようです。
Archive Storage
操作方法全般
OCI上でArchive Storage を利用する際には、Object Storage のメニューで Bucket を作成するときに、 [Archive]を選択して Bucket を作成して扱う。
File Storage
NFSv3のみサポートしている。Windowsからアクセスする場合は、NFS Client を Installする必要がある。WindowsOSにバンドルされているため、機能を有効化すればよい。
Object Storage
oci cli で File を Uploadするときに、ホームディレクトリでは指定できない
--file
で指定するパスが以下のようなパスでは正常にアップロード可能
oci os object put --bucket-name tutorial-bucket1 --file '/home/sugi/test2/test.txt' --name tutorial-testput.txt
しかし、以下のようにホームディレクトリ経由で指定するとエラーになる (なぜ・・・?)
oci os object put --bucket-name tutorial-bucket1 --file '~/test2/test.txt' --name tutorial-testput.txt
Object Storage で疑似的にディレクトリとしてアクセス
詳細は以下
Document の Sampleにギブソンやフェンダーが使われているw
OracleでDocument作る人にギター好きなエンジニアがいるっぽい
(for example, guitars/fender/stratocaster.jpg, guitars/gibson/lespaul.jpg).
oci cli
JSON
JSONでパラメータを与えたい時があります。以下作成例
作成済みのInternetGatewayのIDを取得します
set ig_ocid (oci network internet-gateway list --display-name "tutorial-int-gw1" --vcn-id $vcn_ocid | jq -r '.data[0].id')
RuleのJSON作成
mkdir ~/workdir
string trim '
[
{
"cidrBlock":"0.0.0.0/0",
"destination": "0.0.0.0/0",
"destination-type": "CIDR_BLOCK",
"networkEntityId":"sedstring"
}
]
' > ~/workdir/routetable_rule.json
sed -i "s/sedstring/$ig_ocid/g" ~/workdir/routetable_rule.json
作成したJSONファイルを確認します。oci で対象を list したときに表示される情報を参考にして指定すればやりやすいです。
> cat routetable_rule.json
[
{
"cidrBlock":"0.0.0.0/0",
"destination": "0.0.0.0/0",
"destination-type": "CIDR_BLOCK",
"networkEntityId":"ocid1.internetgateway.oc1.iad.aaaaaaaaknm4us55oouldxwrk5oi7hmyjeju6vb5wgrixrk5tk6pp76gnkhq"
}
]
作成
oci network route-table create --display-name lb_routetable --vcn-id $vcn_ocid --route-rules file:///home/sugi/workdir/routetable_rule.json
確認
> oci network route-table list --vcn-id $vcn_ocid 866ms{
"data": [
{
"compartment-id": "mask",
"defined-tags": {},
"display-name": "lb_routetable",
"freeform-tags": {},
"id": "ocid1.routetable.oc1.iad.aaaaaaaa7xe6ufwopliid7gqc766gdsd27gdeom6gwooxfek3szsq23tutia",
"lifecycle-state": "AVAILABLE",
"route-rules": [ <======== ※ここのJSON形式を参考にしてパラメータファイルを作成するとわかりやすい!
{
"cidr-block": "0.0.0.0/0",
"destination": "0.0.0.0/0",
"destination-type": "CIDR_BLOCK",
"network-entity-id": "ocid1.internetgateway.oc1.iad.aaaaaaaaknm4us55oouldxwrk5oi7hmyjeju6vb5wgrixrk5tk6pp76gnkhq"
}
],
"time-created": "2019-02-09T03:20:25.918000+00:00",
"vcn-id": "ocid1.vcn.oc1.iad.aaaaaaaamqjvjlxum3t2p727i2akoeltk2z2tk4wxukoqlmbskf27lzollna"
}
]
Fn
環境変数設定
valueが何もない config 設定は、設定コマンド自体は成功しても、実際は反映されない
fn config func env-app oci-lb-list OCI_PrivateRSAKey_passphrase ""
参考
https://qiita.com/feifo/items/5789ee7a724c6cb786a9
その他
ServiceLimit
ここにまとめられている