Help us understand the problem. What is going on with this article?

Oracle Cloud 仮想インスタンスを cli で作成してInternetからSSHアクセス

More than 1 year has passed since last update.

はじめに

Oracle Cloud の勉強の一環で、公式のチュートリアルを基に進めていきます。公式のチュートリアルでは日本語、かつ、GUI操作の内容となっています。わかりやすく書かれているので、基本はこちらを参照していただけるとよいと思います。

このQiitaの記事は、上記のチュートリアルを CLI であえて実施した備忘録として書きます。
CLI の理由は、GUIと比べて再現性や再実行性が高いのと、なんとなくかっこいいから

今回のテーマ

Instance を作成
https://community.oracle.com/docs/DOC-1019204

前提作業

oci cliの導入

oci cli と jq コマンドを使用可能なこと。次のQiita記事で導入した手順を書いています
https://qiita.com/sugimount/items/63a8cfe1163030ae8804

公開鍵/秘密鍵の作成

Instance接続用に公開鍵/秘密鍵を作成します。

keyの種類はRSDで、鍵長は2048bit で作成します (Default)

ssh-keygen -b 2048 -t rsa

~/.ssh に公開鍵/秘密鍵が作成されたことを確認します。

> ls -la ~/.ssh
total 4
drwx------ 1 sugi sugi  512 Feb  2 22:35 ./
drwxr-xr-x 1 sugi sugi  512 Feb  2 22:24 ../
-rw------- 1 sugi sugi 1675 Feb  2 22:35 id_rsa
-rw-r--r-- 1 sugi sugi  394 Feb  2 22:35 id_rsa.pub

Instanceの作成

oci コマンドでInstanceを作成する前に、前回作成したVCNの OICD を変数に格納します。

set vcn_ocid (oci network vcn list | jq -r '.data | map(select(.["display-name"] == "TutorialVCN"))[].id')

subnet の OCID も変数に格納します

set subnet1_ocid (oci network subnet list --vcn-id $vcn_ocid | jq -r '.data | map(select(.["display-name"] == "tutorial_subnet1"))[].id')

次に、作成するInstanceのImageの OCID を取得します。以下のコマンドで、Oracle Linux 7.6 の Image 一覧の中から、最も最近に作成されたImageのOCIDを変数に格納します。
oci compute image list コマンドを実行した結果を目視で確認して、GPU という文字が含まれていないものの中から選択します

oci compute image list --sort-by TIMECREATED --sort-order DESC | jq -r '.data | map(select( .["operating-system"] == "Oracle Linux" and .["operating-system-version"] == "7.6"))'
set oraclelinux76_ocid (echo ocid1.image.oc1.iad.aaaaaaaawufnve5jxze4xf7orejupw5iq3pms6cuadzjc7klojix6vmk42va)

memo ocid取得コマンド

oci compute image list --operating-system "Canonical Ubuntu" --operating-system-version "18.04 Minimal" --sort-by TIMECREATED --sort-order DESC | jq -r ".data[0].id"

Instanceを作成します。hostnameにアンダーバーは付与できないので、アンダーバーから、ハイフンに変更しています
混乱しやすい一部のパラメータの説明を書きます
--assign-public-ip これを true にすると、作成したInstanceに紐づく VNIC に Public IP (Internet からアクセス可能なグローバルIP) が付与されます。
ただ、これは Ephemeral Public IP となるため、Reserved Public IP を付与したい場合は別の方法で設定する必要があります。
今回は、Reserved Public IP を使用したいため、false としてインスタンスを作成します。

oci compute instance launch \
--availability-domain AJtg:US-ASHBURN-AD-1 \
--fault-domain FAULT-DOMAIN-1 \
--shape VM.Standard2.1 \
--display-name ins_oralinux_1 \
--hostname-label ins-oralinux-1 \
--image-id $oraclelinux76_ocid \
--subnet-id $subnet1_ocid \
--assign-public-ip false \
--private-ip 172.16.1.2 \
--ssh-authorized-keys-file ~/.ssh/id_rsa.pub

作成したinstance の OCID を取得します

set instance1_ocid (oci compute instance list --display-name ins_oralinux_1 --lifecycle-state RUNNING | jq -r '.data[0].id')

memo instance の削除

oci compute instance terminate --instance-id $instance1_ocid --force

Reserved Public IP の作成

まずは、作成したInstanceのVNIC OCID を取得し変数へ格納します

set instance1_vnic_ocid (oci compute instance list-vnics --instance-id $instance1_ocid | jq -r '.data[0].id')

VNIC に付与されている Private IP の OCID を取得し変数へ格納します

set instance1_privateip_ocid (oci network private-ip list --vnic-id $instance1_vnic_ocid | jq -r '.data[0].id')

Reserved Public IP の作成

oci network public-ip create --lifetime RESERVED --display-name tutorial_pubip1 --private-ip-id $instance1_privateip_ocid

作成した Reserved Public IP のOCID を変数に格納します

set publicip_ocid (oci network public-ip list --scope REGION | jq -r '.data | map(select(.["display-name"] == "tutorial_pubip1"))[0].id')

SSHでアクセス

作成したインスタンスに付与されている Public IP 宛にアクセスを行います

ssh -i ~/id_rsa opc@129.213.70.149

実行例

> ssh -i ~/.ssh/id_rsa opc@129.213.70.149
[opc@ins-oralinux-1 ~]$

Instanceの諸々を確認してみた

Oracle Linux を始めて触るため、諸々を確認します
Linuxのバージョン確認

[opc@ins-oralinux-1 ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.6 (Maipo)

Interfaceの確認。もちろん Public IP は付与されていなく、Private IP が見えています

[opc@ins-oralinux-1 ~]$ ip -d a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000
    link/ether 02:00:17:02:d0:81 brd ff:ff:ff:ff:ff:ff promiscuity 0 numtxqueues 4 numrxqueues 4 gso_max_size 65536 gso_max_segs 65535
    inet 172.16.1.2/24 brd 172.16.1.255 scope global dynamic ens3
       valid_lft 81426sec preferred_lft 81426sec

Routing Table の確認。

  • Default Routeは、172.16.1.1
  • 仕様で書かれている通り、169.254.0.0/16 あての通信はStaticRouteが設定されている
[opc@ins-oralinux-1 ~]$ ip r
default via 172.16.1.1 dev ens3
169.254.0.0/16 dev ens3 proto static scope link
169.254.0.0/16 dev ens3 scope link metric 1002
172.16.1.0/24 dev ens3 proto kernel scope link src 172.16.1.2

Mountの確認

[opc@ins-oralinux-1 ~]$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  7.2G     0  7.2G   0% /dev
tmpfs          tmpfs     7.3G     0  7.3G   0% /dev/shm
tmpfs          tmpfs     7.3G  8.6M  7.3G   1% /run
tmpfs          tmpfs     7.3G     0  7.3G   0% /sys/fs/cgroup
/dev/sda3      xfs        39G  2.1G   37G   6% /
/dev/sda1      vfat      200M  9.6M  191M   5% /boot/efi
tmpfs          tmpfs     1.5G     0  1.5G   0% /run/user/1000

CPUの確認

Linux からは、CPUが2個見えています。 InstanceのShapeは、VM.Standard2.1を選んでいて、これはOCPU(Oracle Compute Units) が1なので、Instanceには1個の物理CPUコアを割り当てており、Hyper-threading 後の2個の論理CPUとして見えています。

[opc@ins-oralinux-1 ~]$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) Platinum 8167M CPU @ 2.00GHz
stepping        : 4
microcode       : 0x1
cpu MHz         : 1995.309
cache size      : 16384 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 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2
x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb tpr_shadow vnmi flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f rdseed adx smap avx512cd xsaveopt xsavec xgetbv1 xsaves arat
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips        : 3990.61
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel(R) Xeon(R) Platinum 8167M CPU @ 2.00GHz
stepping        : 4
microcode       : 0x1
cpu MHz         : 1995.309
cache size      : 16384 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 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2
x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb tpr_shadow vnmi flexpriority ept fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f rdseed adx smap avx512cd xsaveopt xsavec xgetbv1 xsaves arat
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips        : 3990.61
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

Memoryの確認

[opc@ins-oralinux-1 ~]$ free -m
              total        used        free      shared  buff/cache   available
Mem:          14763         231       13878           8         653       14214
Swap:          8191           0        8191

block device の確認
約46.6GBの Boot Volume を使用していることを OCI 上で確認出来ていて、Root領域、SWAP領域、Boot領域の3種類で分割されています
TRAN (転送タイプ) は表示されていないのね。local通信なのかな

[root@ins-oralinux-1 ~]# lsblk --pairs
NAME="sda" MAJ:MIN="8:0" RM="0" SIZE="46.6G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="sda2" MAJ:MIN="8:2" RM="0" SIZE="8G" RO="0" TYPE="part" MOUNTPOINT="[SWAP]"
NAME="sda3" MAJ:MIN="8:3" RM="0" SIZE="38.4G" RO="0" TYPE="part" MOUNTPOINT="/"
NAME="sda1" MAJ:MIN="8:1" RM="0" SIZE="200M" RO="0" TYPE="part" MOUNTPOINT="/boot/efi"

[root@ins-oralinux-1 ~]# lsblk -tS
NAME ALIGNMENT MIN-IO  OPT-IO PHY-SEC LOG-SEC ROTA SCHED       RQ-SIZE  RA WSAME NAME HCTL       TYPE VENDOR   MODEL             REV TRAN
sda          0   4096 1048576    4096     512    1 mq-deadline     256 128   32M sda  2:0:0:1    disk ORACLE   BlockVolume      1.0

[root@ins-oralinux-1 ~]# lsblk -f
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda2 swap         10f7b32d-47ad-4fa1-96ea-2e38bef56f17 [SWAP]
├─sda3 xfs          5dfe1823-ab77-4d85-a0e9-3c4602c5f518 /
└─sda1 vfat         4A01-26AE                            /boot/efi

fstab の確認

[root@ins-oralinux-1 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Jan 15 22:54:24 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5dfe1823-ab77-4d85-a0e9-3c4602c5f518 /                       xfs     defaults,_netdev,_netdev 0 0
UUID=4A01-26AE          /boot/efi               vfat    defaults,uid=0,gid=0,umask=0077,shortname=winnt,_netdev,_netdev,x-initrd.mount 0
0
UUID=10f7b32d-47ad-4fa1-96ea-2e38bef56f17 swap                    swap    defaults,_netdev,x-initrd.mount 0 0
######################################
## ORACLE CLOUD INFRASTRUCTURE CUSTOMERS
##
## If you are adding an iSCSI remote block volume to this file you MUST
## include the '_netdev' mount option or your instance will become
## unavailable after the next reboot.
## SCSI device names are not stable across reboots; please use the device UUID instead of /dev path.
##
## Example:
## UUID="94c5aade-8bb1-4d55-ad0c-388bb8aa716a"   /data1    xfs       defaults,noatime,_netdev      0      2
##
## More information:
## https://docs.us-phoenix-1.oraclecloud.com/Content/Block/Tasks/connectingtoavolume.htm

cloud-init の設定ファイル確認
growpart がコメントアウトされている?

[root@ins-oralinux-1 ~]# cat /etc/cloud/cloud.cfg
users:
 - default

disable_root: 1
ssh_pwauth:   0

mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys:   0
ssh_genkeytypes:  ~
syslog_fix_perms: ~

datasource_list: ['OpenStack']
datasource:
  OpenStack:
    metadata_urls: ['http://169.254.169.254']
    timeout: 10
    max_wait: 20

cloud_init_modules:
 - migrator
 - bootcmd
 - write-files
# The growpart module is disabled by default. To enable automatic boot volume resizing, uncomment
# the below entry for '- growpart' and reboot. All the dependent packages for the growpart
# module to work such as cloud-utils-growpart and gdisk are already included in the image.
#- growpart
 - resizefs
 - rsyslog
 - users-groups
 - ssh

cloud_config_modules:
 - mounts
 - locale
 - set-passwords
 - yum-add-repo
 - package-update-upgrade-install
 - timezone
 - puppet
 - chef
 - salt-minion
 - mcollective
 - disable-ec2-metadata
 - runcmd

cloud_final_modules:
 - rightscale_userdata
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message

system_info:
  default_user:
    name: opc
    lock_passwd: true
    gecos: Oracle Public Cloud User
    groups: [wheel, adm, systemd-journal]
    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
    shell: /bin/bash
  distro: rhel
  paths:
    cloud_dir: /var/lib/cloud
    templates_dir: /etc/cloud/templates
  ssh_svcname: sshd

# vim:syntax=yaml

削除時の注意

Instanceを削除したときには、それに関連するVNICは削除されますが、Reserved Public IP は削除されません。こちらも忘れずに削除するようにしましょう。

参考URL

チュートリアル一覧

https://community.oracle.com/docs/DOC-1019313

sugimount
CloudNativeな色々をやっています / 投稿している内容は個人的な見解なので、所属組織とは関係ありません https://twitter.com/sugimount
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした