私個人の考え方として、OCI に Always Free という無料枠がある事は知っていても、使ってみない事には知っている事にはならないと思っています。そこで実際に何がどうなっているのか OCI CLI を通してインスタンスを作成し OCI の仕組みを勉強してみました。
まずは https://oracle-japan.github.io/ocitutorials/intermediates/using-cli/ を参考に OCI CLI が設定済みの前提から始めます。
OCI CLI のバージョンを確認します。
$ oci --version
3.22.1
OCI で作成するリソースの表示名の先頭を prefix 変数としてセットし、プレフィックス文字列として使用します。
prefix=mnrst
仮想クラウド・ネットワークを作成します。
vcnid=$(oci network vcn create
--cidr-block 172.16.0.0/16
--display-name ${prefix}-vcn
--query data.id
--raw-output)
インターネット・ゲートウェイを作成します。
igwid=$(oci network internet-gateway create
--is-enabled true
--vcn-id $vcnid
--display-name ${prefix}-igw
--query data.id
--raw-output)
ルートテーブルの ID を取得します。
rtid=$(oci network vcn get
--vcn-id $vcnid
--query 'data."default-route-table-id"'
--raw-output)
ルートテーブルにインターネット・ゲートウェイを設定します。
oci network route-table update
--rt-id $rtid
--force
--route-rules '[
{
"cidrBlock":"0.0.0.0/0",
"networkEntityId":"'$igwid'"
}
]'
セキュリティリストの ID を取得します。
slid=$(oci network vcn get
--vcn-id $vcnid
--query 'data."default-security-list-id"'
--raw-output)
セキュリティリストに自分のパブリック IP アドレスからの SSH 接続とプライベート IP アドレス内の通信を全て許可する設定を追加します。
oci network security-list update
--security-list-id $slid
--force
--ingress-security-rules '[
{
"description": null,
"icmp-options": null,
"is-stateless": false,
"protocol": "6",
"source": "'$(curl -s inet-ip.info)'/32",
"source-type": "CIDR_BLOCK",
"tcp-options": {
"destination-port-range": {
"max": 22,
"min": 22
},
"source-port-range": null
},
"udp-options": null
},
{
"description": null,
"icmp-options": {
"code": 4,
"type": 3
},
"is-stateless": false,
"protocol": "1",
"source": "0.0.0.0/0",
"source-type": "CIDR_BLOCK",
"tcp-options": null,
"udp-options": null
},
{
"description": null,
"icmp-options": {
"code": null,
"type": 3
},
"is-stateless": false,
"protocol": "1",
"source": "172.16.0.0/16",
"source-type": "CIDR_BLOCK",
"tcp-options": null,
"udp-options": null
},
{
"description": null,
"icmp-options": null,
"is-stateless": false,
"protocol": "all",
"source": "172.16.0.0/16",
"source-type": "CIDR_BLOCK",
"tcp-options": null,
"udp-options": null
}
]'
仮想クラウド・ネットワークにサブネットを追加します。
subnetid=$(oci network subnet create
--cidr-block 172.16.0.0/24
--vcn-id $vcnid
--display-name ${prefix}-subnet
--query data.id
--raw-output)
OS イメージを探します。
oci compute image list
--all
--query 'data[*].{"operating-system":"operating-system","operating-system-version":"operating-system-version","display-name":"display-name"}'
--output=table
OS イメージ名から ID を取得します。
imageid=$(oci compute image list
--display-name Canonical-Ubuntu-22.04-Minimal-2022.11.05-0
--query data[0].id
--raw-output)
インスタンスのシェイプ(仮想マシンの種類のようなもの)を探します。
oci compute shape list
--image-id $imageid
--query data[].shape
可用性ドメインを取得します。
adname=$(oci iam availability-domain list
--query data[0].name
--raw-output)
インスタンスを作成します。
instanceid=$(oci compute instance launch
--display-name ${prefix}-vm1
--availability-domain $adname
--image-id $imageid
--shape VM.Standard.E2.1.Micro
--ssh-authorized-keys-file "$HOME/.ssh/id_rsa.pub"
--subnet-id $subnetid
--assign-public-ip true
--query data.id
--raw-output)
インスタンスのパブリック IP アドレスを取得します。
publicip=$(oci compute instance list-vnics
--instance-id $instanceid
--query 'data[0]."public-ip"'
--raw-output)
インスタンスに SSH 接続します。
ssh ubuntu@$publicip
という流れでした。
ブログを読んで頂きありがとうございます。誰かの何かの参考になれば幸いです。
タグ: OCI, OCI CLI