👌

OCI上でサーバの環境構築あれこれ

2024/06/15に公開

1.公開鍵認証方式でssh接続

1-1.キーの作成(おまけ)

Windowsのコマンドプロンプトで,

>ssh-keygen -b 4096

(4096は任意鍵長)と打つと,~/.sshに公開鍵と秘密鍵が作成される.例えばユーザー名がTanakaさんなら.C:\Users\Tanaka\.sshに作成される.
秘密鍵のファイル名がid_rsaで,公開鍵がid_rsa.pubとなる.

以降の話ではこの節はあまり関係ない.

1-2.OCIでインスタンス作成

sshキーにスポットをあてて話を進める.
image.png

1-2-1.キーペアを持っていない場合

[ SSHキーの追加 ]欄で,[キー・ペアを自動で生成 ]を選択し,
[公開キーの保存]→[秘密キーの保存]をクリックすることでキーペア取得できる.
この2つのファイルは大切に保管しましょう.(今後も使いまわせるので)

保存された2つのファイルは,
公開鍵が~.key.pub
秘密鍵が~.key
となっている.

この2つのファイルはどこか好きなディレクトリに格納しとこう.
例:C:\Users\Tanaka\Documents\Oracle

インスタンスを作成.

1-2-2.キーペアを持っている場合

OCIでインスタンスを作成する際,[sshキーの追加]欄がある.
ここで,[公開キー・ファイル(.pub)のアップロード]を選択し,
自身の公開鍵のファイル(~.key.pub)をドラッグ&ドロップでアップロード.
インスタンスを作成.

1-3.ssh接続

sshクライアントを起動してssh接続を試みる.

1-3-1.TeraTermの場合

TeraTermを起動させたら[ ホスト(T) ]にIPアドレスを書いて,
その下の[ TCPポート ]欄に「22」と書く※1.
[ ok ]ボタンを押す.

[ ユーザ名 ]に指定されたユーザ名を記入.
OCIのCentOSの初期ユーザ名は「opc」※2.

[ 認証方式 ]で,[ RSA/DSA/ECDSA/ED25119鍵を使う]を選択し,
1-1節で作成した秘密鍵のパスを指定.
例:

C:\Users\Tanaka\Documents\Oracle\~.key

これで接続できる.

※1:sshのデフォルトのport番号が22.これは後で利用できるport番号内で任意番号に変更可能
※2:AWSのRHEL8の場合は「ec2-user」

1-3-2.PowerShellの場合

これだけ.

> ssh -i [秘密鍵のパス] [ユーザ名]@[IPアドレス]

以上。

2. 環境設定

2-1.パスワード設定

ログインできたら,rootユーザとログインユーザ(今回であればopc)のPassを任意に設定しとく.
まずはroot

$sudo passwd root
(パスワード聞かれるので適当に打つ)
(切り替わるか確かめる)
$ su -

次は別のユーザ

#passwd opc

2-2.ssh接続のconfファイル書き換え

セキュリティの観点から,ssh接続のconfigファイルを書き換える.

$ sudo vi /etc/ssh/sshd_config

とやるといろいろ書き換えられる.
英語読めば何の設定なのか想像つくと思うのでてきとーにやっとく.

Port 11326  (←port番号を22から変更)
PermitRootLogin no (←Rootユーザでログインできないようにする)
PubkeyAuthentication yes  (←公開鍵認証方式)
PasswordAuthentication no (←パスワード認証を無効化)
などなど

これではまだ反映されないので,reloadしてメモリの設定を読み込ませる.
(restartじゃないよ)

$ sudo systemctl reload sshd.service

2-3.タイムゾーンを変更

タイムゾーンを東京に変更しとく.

$ sudo timedatectl set-timezone Asia/Tokyo

2-4.変更確かめ

Windows端末のPowerShellでPortして疎通確認.

> Test-NetConnection [ IPアドレス ] -Port [ Port番号 ]

3.yum

参考:https://access.redhat.com/ja/articles/3221791

/etc/yum.confと/etc/yum.repos.dの二つの領域に分かれる。
※rhel8からはyumは廃止されdnfに置き換わっている。使い方はほぼ同じ。
実際、/etc/をみてみると、

[root@publicpc1 etc]# ll|grep yum
drwxr-xr-x.  2 root               root                   57 Mar 24 12:32 yum
lrwxrwxrwx.  1 root               root                   12 Nov 12 00:18 yum.conf -> dnf/dnf.conf
drwxr-xr-x.  2 root               root                  217 Mar 24 12:39 yum.repos.d

[root@publicpc1 yum]# pwd
/etc/yum
[root@publicpc1 yum]# ll
total 0
lrwxrwxrwx. 1 root root 14 Nov 12 00:18 pluginconf.d -> ../dnf/plugins
lrwxrwxrwx. 1 root root 18 Nov 12 00:18 protected.d -> ../dnf/protected.d
lrwxrwxrwx. 1 root root 11 Nov 12 00:18 vars -> ../dnf/vars

となっている。

3-1. yum.conf(dnf.conf)

[root@publicpc1 etc]# cat yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False

[main]はセクション名で、ここに記載されているのはyumのグローバルな設定。

gpgcheck

は署名チェック。1が有効で、0が無効。

3-2. yum.repos.d

[root@publicpc1 yum.repos.d]# ll
total 32
-rw-r--r--. 1 root root  495 May  5  2021 ksplice-ol8.repo
-rw-r--r--. 1 root root  759 Apr 13  2021 mysql-ol8.repo
-rw-r--r--. 1 root root  253 Mar 20  2021 oci-included-ol8.repo
-rw-r--r--. 1 root root  252 Mar 24 12:39 oracle-epel-ol8.repo
-rw-r--r--. 1 root root  694 Mar 24 12:39 oraclelinux-developer-ol8.repo
-rw-r--r--. 1 root root 2740 Mar 24 12:39 oracle-linux-ol8.repo
-rw-r--r--. 1 root root  470 Mar 11 01:09 uek-ol8.repo
-rw-r--r--. 1 root root  243 Mar 11 01:09 virt-ol8.repo

oracle-linux-ol8.repoの中身を見てみると、ダウンロードする際に参照するURLが記載されている。
ここが間違っていると適切にインストールできなくなる。
ただ、ここを編集することはなさそう。

もし社内にあるレポジトリサーバを利用したい場合、対応は2つある。
1つは、 yum.repos.d配下に~.repoファイルを追加する。
2つ目は、yum -y install ~で追加する方法。

1つ目の場合

# vim /etc/ yum.repos.d/test.repo
[test]
name=test
baseurl=http://xxx.xxx/xxx.xxx/xxx
gpgcheck=0

など。

4.踏み台サーバの準備

4-1.キーペアの準備

4-2.scpでファイル転送

4-3.公開鍵認証の読み込みパス指定

https://crieit.net/posts/OCI-CentOS

5. Port ForwardingでRDP接続

5.1 sshトンネリング

6.Pythonインストール

7.OCI CLIの利用方法

公式ドキュメントを参考に進めていくとインストールできる。

7.1 Oracle Linux8でオンラインインストール

参考
OCIのクイックインストール:https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__linux_and_unix

7.1.1 dnfでインストール

dnfを使用してCLIをインストール

$ sudo dnf -y install oraclelinux-developer-release-el8
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for opc:
Ksplice for Oracle Linux 8 (x86_64)                             16 MB/s | 1.2 MB     00:00
MySQL 8.0 for Oracle Linux 8 (x86_64)                          9.1 MB/s | 2.4 MB     00:00
MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64)          5.2 MB/s | 308 kB     00:00
MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64)     214 kB/s |  23 kB     00:00
Oracle Software for OCI users on Oracle Linux 8 (x86_64)        38 MB/s |  46 MB     00:01
Oracle Linux 8 BaseOS Latest (x86_64)                           62 MB/s |  49 MB     00:00
Oracle Linux 8 Application Stream (x86_64)                      48 MB/s |  37 MB     00:00
Oracle Linux 8 Addons (x86_64)                                  21 MB/s | 4.9 MB     00:00
Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linu  63 MB/s |  53 MB     00:00
Package oraclelinux-developer-release-el8-1.0-7.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!

続いて、cliをインストール

$ sudo dnf install python36-oci-cli
Last metadata expiration check: 0:00:34 ago on Sat 13 Aug 2022 03:23:12 PM GMT.
Dependencies resolved.
===============================================================================================
 Package                        Arch        Version                Repository             Size
===============================================================================================
Installing:
 python36-oci-cli               noarch      3.14.0-1.el8           ol8_oci_included       14 M
Upgrading:
 python36-oci-sdk               x86_64      2.78.0-1.el8           ol8_oci_included       23 M
Installing dependencies:
 python3-arrow                  noarch      1.1.1-1.el8            ol8_oci_included      119 k
 python3-jmespath               noarch      0.10.0-1.el8           ol8_oci_included       48 k
 python3-prompt-toolkit         noarch      3.0.29-1.0.2.el8       ol8_oci_included      669 k
 python3-terminaltables         noarch      3.1.0-1.0.1.el8        ol8_oci_included       31 k
 python3-typing-extensions      noarch      3.7.4.2-1.el8          ol8_oci_included       47 k
 python3-wcwidth                noarch      0.2.5-3.el8            ol8_oci_included       48 k

Transaction Summary
===============================================================================================
Install  7 Packages
Upgrade  1 Package

Total download size: 38 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): python3-jmespath-0.10.0-1.el8.noarch.rpm                520 kB/s |  48 kB     00:00
(2/8): python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch.rpm      4.2 MB/s | 669 kB     00:00
(3/8): python3-arrow-1.1.1-1.el8.noarch.rpm                    740 kB/s | 119 kB     00:00
(4/8): python3-terminaltables-3.1.0-1.0.1.el8.noarch.rpm       298 kB/s |  31 kB     00:00
(5/8): python3-typing-extensions-3.7.4.2-1.el8.noarch.rpm      739 kB/s |  47 kB     00:00
(6/8): python3-wcwidth-0.2.5-3.el8.noarch.rpm                  711 kB/s |  48 kB     00:00
(7/8): python36-oci-cli-3.14.0-1.el8.noarch.rpm                 46 MB/s |  14 MB     00:00
(8/8): python36-oci-sdk-2.78.0-1.el8.x86_64.rpm                 37 MB/s |  23 MB     00:00
-----------------------------------------------------------------------------------------------
Total                                                           45 MB/s |  38 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                       1/1
  Upgrading        : python36-oci-sdk-2.78.0-1.el8.x86_64                                  1/9
  Installing       : python3-wcwidth-0.2.5-3.el8.noarch                                    2/9
  Installing       : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch                        3/9
  Installing       : python3-typing-extensions-3.7.4.2-1.el8.noarch                        4/9
  Installing       : python3-arrow-1.1.1-1.el8.noarch                                      5/9
  Installing       : python3-terminaltables-3.1.0-1.0.1.el8.noarch                         6/9
  Installing       : python3-jmespath-0.10.0-1.el8.noarch                                  7/9
  Installing       : python36-oci-cli-3.14.0-1.el8.noarch                                  8/9
  Cleanup          : python36-oci-sdk-2.75.1-1.el8.x86_64                                  9/9
  Running scriptlet: python36-oci-sdk-2.75.1-1.el8.x86_64                                  9/9
  Verifying        : python3-arrow-1.1.1-1.el8.noarch                                      1/9
  Verifying        : python3-jmespath-0.10.0-1.el8.noarch                                  2/9
  Verifying        : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch                        3/9
  Verifying        : python3-terminaltables-3.1.0-1.0.1.el8.noarch                         4/9
  Verifying        : python3-typing-extensions-3.7.4.2-1.el8.noarch                        5/9
  Verifying        : python3-wcwidth-0.2.5-3.el8.noarch                                    6/9
  Verifying        : python36-oci-cli-3.14.0-1.el8.noarch                                  7/9
  Verifying        : python36-oci-sdk-2.78.0-1.el8.x86_64                                  8/9
  Verifying        : python36-oci-sdk-2.75.1-1.el8.x86_64                                  9/9

Upgraded:
  python36-oci-sdk-2.78.0-1.el8.x86_64
Installed:
  python3-arrow-1.1.1-1.el8.noarch               python3-jmespath-0.10.0-1.el8.noarch
  python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch python3-terminaltables-3.1.0-1.0.1.el8.noarch
  python3-typing-extensions-3.7.4.2-1.el8.noarch python3-wcwidth-0.2.5-3.el8.noarch
  python36-oci-cli-3.14.0-1.el8.noarch

Complete!

インストール完了したらバージョン確認。

$ oci --version
3.14.0

7.1.2 構成ファイルの設定

$ oci setup config
    This command provides a walkthrough of creating a valid CLI config file.
    The following links explain where to find the information required by this
    script:
    User API Signing Key, OCID and Tenancy OCID:      https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other
    Region:
        https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm
    General config documentation:
        https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm

Enter a location for your config [/home/opc/.oci/config]:特に指定しなくてok
Enter a user OCID: OCIコンソールよりユーザのOCIDをコピペ
Enter a tenancy OCID: OCIコンソールよりコピペ
Enter a region by index or name(e.g.
1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1,
6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1,
11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1,
16: eu-amsterdam-1, 17: eu-frankfurt-1, 18: eu-marseille-1, 19: eu-milan-1, 20: eu-paris-1,
21: eu-stockholm-1, 22: eu-zurich-1, 23: il-jerusalem-1, 24: me-abudhabi-1, 25: me-dcc-muscat-1,
26: me-dubai-1, 27: me-jeddah-1, 28: mx-queretaro-1, 29: sa-santiago-1, 30: sa-saopaulo-1,
31: sa-vinhedo-1, 32: uk-cardiff-1, 33: uk-gov-cardiff-1, 34: uk-gov-london-1, 35: uk-london-1,
36: us-ashburn-1, 37: us-gov-ashburn-1, 38: us-gov-chicago-1, 39: us-gov-phoenix-1, 40: us-langley-1,
41: us-luke-1, 42: us-phoenix-1, 43: us-sanjose-1): 13(OCIコンソールをブラウザで開いてURLを見るとわかる
Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y
Enter a directory for your keys to be created [/home/opc/.oci]:
Enter a name for your key [oci_api_key]:
Public key written to: /home/opc/.oci/oci_api_key_public.pem
Enter a passphrase for your private key (empty for no passphrase):
Private key written to: /home/opc/.oci/oci_api_key.pem
Fingerprint: ~なんか記載されている~
Config written to /home/opc/.oci/config

完了すると、~/.oci配下にoci_api_key_public.pemが作成されているはず。このキーをOCIコンソールで
アイデンティティ>ユーザー>ユーザーの詳細
に行くと、画面サブに「APIキー」があるのでクリックし、oci_api_key_public.pemの中身を張り付ける。

試しに実行してみる。

$ oci compute instance list --all
Usage: oci compute instance list [OPTIONS]
Error: Missing option(s) --compartment-id.

コンパートメントIDをオプションで追記しろとのこと。

$ oci compute instance list --compartment-id <OCID貼り付け>
いっぱい表示された

ただ、毎回コンパートメントIDを打ち込むのは面倒なので、oci_cli_rcファイルに書き込むことでコマンド入力時にオプション付ける必要がないようにする。

$ vi ~/.oci/oci_cli_rc

[DEFAULT]
compartment-id=<コンパートメントID>

7.1.3 プライベートサブネットからOCI CLIを実行する方法

OCI CLIでコマンドを実行するとAPIエンドポイントと通信を行う。そのため、プライベートサブネットからAPIを発行してエンドポイントへ到達させるにはいくつかの設定が必要になる。方法は以下3つ。
①NATゲートウェイを利用してインターネットに出ていく。②サービスゲートウェイを使用して、OCI環境内に閉じた通信を行う。③プロキシを使用してインターネットへ出ていくルートを作る。

なずは何も設定しない状態でプライベートサブネットからコマンドを実行してみる。その際、APIの実行履歴を出力させるためにデバックオプション--debug(または-d)をつけて実行する。

$ oci compute instance list --all -d
~省略~
DEBUG:oci.base_client.140243454499864:Endpoint: https://iaas.ap-tokyo-1.oraclecloud.com/20160918
INFO:oci.base_client.140243454499864: 2022-08-14 15:05:12.072064: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances
INFO:oci.base_client.140243454499864: 2022-08-14 15:05:23.487363: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances
~つづく~

となり、エンドポイントへの接続を所定の回数試行して失敗すると、以下のようなエラーが返ってくる。

oci.exceptions.ConnectTimeout: (MaxRetryError("OCIConnectionPool(host='iaas.ap-tokyo-1.oraclecloud.com', port=443): Max retries exceeded with url: /20160918/instances?compartmentId=ocid1.compartment.oc1..aaaaaaaantybfae5pn7h77jmgcwgzg2hm27gv6whsiwhmo54ycefc3sxyiwa (Caused by ConnectTimeoutError(<oci.base_client.OCIConnection object at 0x7f8cf8e2f2b0>, 'Connection to iaas.ap-tokyo-1.oraclecloud.com timed out. (connect timeout=10.0)'))",), 'Request Endpoint: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances See https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdk_troubleshooting.htm for help troubleshooting this error, or contact support and provide this full error message.')

実際、エンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打っても返ってこない。

7.1.3.1 NATゲートウェイの利用

NATゲートウェイを作成して、プライベートサブネットのルート表に追加させる。

まずは、
ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>NATゲートウェイ
から「NATゲートウェイの作成」を行う。作成したNATゲートウェイをルート表のルート・ルールに追加する。
image.png

追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。
エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。

$ oci compute instance list --all -d

インスタンス情報が出力されたと思う。

7.1.3.2 サービスゲートウェイの利用

社内ルールで、むやみにインターネットに出ていける設定をしてはいけない場合もあるはず。そういった場合には、OCIのVCN内に閉じた環境でエンドポイントへの通信できるサービスゲートウェイを利用するといい。
ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>サービス・ゲートウェイ
からサービスゲートウェイを作成する。
image.png

作成したら、さきほどと同じようにプライベートサブネットのルート表のルート・ルールに追加する。
image.png

追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。
エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。

$ oci compute instance list --all -d

インスタンス情報が出力されたと思う。

7.1.3.3 プロキシを使用してインターネット経由のルーティング

https通信を行う際にプロキシ経由するように設定をするだけでよい。

$ export HTTPS_PROXY=http://10.1.1.45:3128

設定した後はOCI CLIコマンドを実行すると成功するはずだ。

7.1.4 インスタンスプリンシパルの設定

7.2 インスタンスプリンシパルの設定

さきほどまではAPIを用いてユーザ認証を実行してきた。それとは別に、インスタンスに対して実行権限を付与させる方法がある。それがインスタンスプリンシパル。プリンシパルは操作の実行主体を指す。

7.2.1 別ユーザで実行する

7.3 仮想環境の作成

システム全体にCLIをインストールするのは非推奨。

7.3.1 仮想環境を構成するディレクトリ作成

仮想環境を構成するディレクトリを作成する。
このディレクトリは、仮想環境をアクティブ化する際に打つパスになるので
よく考えてディレクトリ名はつけるように。

[root@publicpc oci]# pwd
/opt/oci

7.3.2 仮想環境作成

まずはPythonのバージョンを確認する。

[opc@publicpc ~]$ python --version
Python 3.6.8

バージョンに応じた仮想環境作成のコマンドを打つ。

python<Pythonのバージョン> -m venv <仮想環境名>
[root@publicpc oci]# python3.6 -m venv venv1

/opt/oci配下にvenv1という仮想環境が作成される。

7.3.3 仮想環境をアクティブ化

OCI CLIのコマンドを打つときは、仮想環境をアクティブ化したうえで実行させる。
アクティブ化させるコマンドは以下の通り。

[root@publicpc oci]# source /opt/oci/venv1/bin/activate
(venv1) [root@publicpc oci]#

ちなみに、非アクティブ化は以下でできる。

(venv1) [root@publicpc oci]# deactivate
[root@publicpc oci]#

7.4 OCI-CLIのオフラインインストール

会社の社内規則などによってLinuxサーバがインターネット接続できない場合、自分がWindows端末にインストールファイルをダウンロードし、
そのファイルをLinuxサーバに配置して読み込ませることでCLIの実行環境を準備することができる。

Github(https://github.com/oracle/oci-cli/releases)から、oci-cli.zipをローカルにダウンロード。
oci-cli.zipを作Linuxサーバに配置し解凍する。

8.Ansibleのインストール

9.BlockVolumeのパーティション切りとマウント

10.コンテナ

Discussion