こんにちは。k.otsukaです。かなり久々の投稿です!
Oracle Cloud Infrastructure Advent Calendar 2024のシリーズ2 Day1記事です。
リソースマネージャを使って環境の複製を試してみたときに、知らないことでハマるであろうポイントがいくつかあったので、今回はそのポイントを紹介しようと思います。
リソースマネージャとは何かについては、過去記事を参照ください!
【過去記事】
・Oracle Cloud Infstracture Resource Managerについて
・Oracle Cloud InfrastructureのResource Managerを使用してみました!
複製環境について
複製検証のための環境は下図の通りで、VCNとコンピュートインスタンスのみのシンプル構成です。
(個人的に利用しているコンパートメントを利用しようと思いましたが、リソースが余りにも多く断念しました。。)
複製の準備
環境複製は、リソースマネージャのスタック作成時に「既存のコンパートメント」を選択することで実現できます。この機能を利用すると、コンパートメント内に作成しているリソースの設定ファイル(.tfファイル)がリソースマネージャによって作成されて、追加や修正といった管理ができるようになります。
なお、親コンパートメントで本機能を利用したところ、想定では子コンパートメントの情報が作成されると思ってましたが作成されませんでした。なので、コンパートメントを複数利用していて一括で管理したい場合は、一度コンパートメントごとに設定ファイルを抜き出して、自分の手でマージする必要があります。
(親コンパートメント配下の情報が全部取れればさらに便利なんですけどね。。。)
また、本機能を利用すると、ブロックボリュームのバックアップポリシーなどOCIがデフォルトで用意しているリソースの設定ファイルも作成されます。複製において必要のないものやリソースマネージャで管理したくないものは必要に応じて削除しましょう。
本記事では、VCNとコンピュートインスタンスを複製対象としているため、その他リソースの設定ファイルは削除しました。
ハマポイントたち
コードエディタが反映されない。。
OCIには、コンソール画面上でVisual Studio Codeを利用して設定ファイルを編集することができる便利な機能があります。そんな便利な機能を使って設定ファイルの削除や設定ファイルの細かな修正を試みたのですが、何度やってもエラー内容が変わらない事態に陥りました。
最終的には設定ファイルをローカルにダウンロードし、修正後にアップロードすることでエラー内容が変わることがわかりましたので、このバグ(?)が修正されるまでは、「Terrafrom構成をコード・エディタで編集」機能は使用しないことを推奨します。
自動保存を選択しているし、「すべて保存」をクリックするなど試しましたがダメでした。。。
もしかしたらやり方を間違えている可能性も考えられるので、本機能を利用する場合はしっかり公式ドキュメントに従いましょう。(感覚で操作するのはおすすめしません。w)
OCIDが直指定されている
既存のコンパートメントから設定ファイルを作成しているため、そのコンパートメント内に作成されているリソースのOCID情報が設定ファイル上に記入されます。そのため、「引っこ抜く」⇒「複製先で実行」だけでは複製することができず、エラーが発生します。
今回の構成の場合は、VNICのOCIDを修正することで複製先のコンパートメント上で正常に動作しましたが、その他にもリソースが存在する場合は直接OCIDが指定されているかどうかを確認しましょう。
直接OCIDが指定されている場合は、下記例を参考にすると、
設定ファイル内でリソース(VNIC)を作成し、その作成したリソース(VNIC)を指定のリソース(プライベートIP)に紐づけるような修正が必要になります。
### VNICリソース作成の構文を追記する
resource "oci_core_vnic_attachment" "new_vnic" {
instance_id = <インスタンス.ID>
display_name = "otsuka-srv-vnic"
create_vnic_details {
subnet_id = <サブネット.ID>
display_name = "otsuka-srv-vnic"
hostname_label = "otsuka-srv-vnic-1"
assign_public_ip = true
}
}
resource oci_core_private_ip export_otsuka-srv {
defined_tags = {
}
display_name = "otsuka-srv"
freeform_tags = {
}
#vnic_id = ocid1.vnic.oc1.ap-tokyo-1.xxxxxxxx xxxxx /// 直指定OCIDはコメントアウト
vnic_id = oci_core_vnic_attachment.new_vnic.vnic_id /// VNICリソースを指定
IDの指定方法は、リソースによって異なるので、terraformの公式ドキュメントを参照ください。
vnicの指定方法について
作成したリソースが見つからない
スタック作成時に変数としてコンパートメントIDを指定するため、指定したコンパートメント内にリソースが作成されるものだと誤認していた結果、スタックの適用には成功しているのにリソースが作成されていないことがありました。
本記事の方法を利用する場合は、「artifacs.tf」内にコンパートメントIDが記入されているので、ここのOCIDを直接修正するか、「変数の構成」に書いた変数を参照するように修正しましょう。
終わりに
初めてリソースマネージャを使ってみて、私がハマってしまったポイントをまとめて紹介してみました。数少ないOCIリソースの複製でもかなりのエラーと戦ったので、本格的に扱えるようになるにはまだまだ時間がかかりそうです。可能なら、OCIのDevOpsと組み合わせて自動化も進められたらと思ってますので、引き続き検証をしたいと思います。