Terraformを使用したOracle Cloudリソースのプロビジョニングの多くの方法 (2022/12/31)

Terraformを使用したOracle Cloudリソースのプロビジョニングの多くの方法  (2022/12/31)

https://technology.amis.nl/oracle-cloud/many-ways-to-provision-oracle-cloud-resources-using-terraform/

投稿者:Lucas Jellema


Terraformは、Oracle Cloud Infrastructure上のリソースの自動プロビジョニングに使用されます。リソースはHCL(Terraformでインフラを記述するためのDSL)で定義され、これらの定義はTerraform用のOCIプロバイダによって処理され、定義がOCI REST APIの必要な呼び出しに変換されます。


Terraformの定義に基づいてOCIリソース管理を実行するには、いくつかの方法があります。この記事ではそれらをまとめ、OCI CLIを使ったStackの作成とその後の適用を簡単にデモしています。



Terraformの定義からOCI Resourcesを作成する方法です。


  •     スタンドアロン Terraform を実行する (どこでも、セルフインストール) - OCI Provider をインストールし、ローカルの OCI 設定と認証を行う - 私の記事を読んでください。
    •         Terraform を使って作成できる OCI リソースの 1 つは、Terraform の設定をベースにした Stack で、OCI リソースのプロビジョニングに使用できることに留意してください。
  •     OCI CloudShell から Terraform を実行する - Terraform は既に含まれており、Instance Principal Authorization (秘密鍵不要) で実行できる - 私の記事を読んでください。
    •         Terraform を使って、Terraform の設定に基づいた Stack を作成することができます(そして、その Stack はさらに別の Stack を定義したりすることができます)。
  •     Terraform の設定に基づき OCI でスタックを作成し、変数に値を与えた後、スタックを適用します。Terraform は完全に管理された VM を実行します(Terraform、OCI Provider、認証が管理されます); スタックはいくつかの方法で作成できます。
    •         コンソールから - アップロードされたZipファイル、ソースコードリポジトリ(OCI DevOps Code Repo, GitHub, BitBucket, GitLab, ...)への参照、プライベートテンプレート、既存の区画(とそのリソース)- 私の記事を読んでください。
    •         OCI CLIから - ローカルまたはCloud Shellで実行 - ローカルZIPファイルまたはソースコード・リポジトリへのリファレンスを使用
    •         Oracle DevOps Build Pipelineから - OCI DevOps Build Serverは、OCI CLIがプリインストールされたVMである(Terraformはないが)。
  •     (近い将来-執筆時点では未サポート-2022年12月)OCI DevOps Deployment Pipelineを実行し、次にStackを適用するResource Managerジョブを実行する。


以前の記事で、このリストの最初の3つのオプションを紹介しました(参考文献を参照)。この記事の残りの部分では、OCI CLIを使用してTerraformの設定から素早くStackを作成し、そのStackを適用します。この方法は、OCI Console Cloud Shell や OCI DevOps Build Pipeline など、OCI CLI が動作する場所であればどこでも使用することができます。



OCI CLIによるStackの作成と適用


まず、StackのベースとなるTerraformの構成が入ったGitリポジトリをクローンします。そして、Terraformの設定を構成するファイルを含むZIPファイルを作成します。今回の場合、GitリポジトリはこちらのGitHub URLにあります。Terraformの設定はstackBucketAndObjectというディレクトリに格納されています。以下のコードでは、リポジトリのクローンを作成し、このディレクトリの内容でzipファイルbucket-and-object-stack.zipを作成し、クローンしたリポジトリを削除しています。


cd /tmp

git clone https://github.com/lucasjellema/oci-terraform-composites

cd ./oci-terraform-composites/stackBucketAndObject

zip -r bucket-and-object-stack.zip .

mv bucket-and-object-stack.zip ../..

rm -Rf oci-terraform-composites

cd ../..




スタック用の zip ファイルを手に入れたら、次は OCI CLI を使ってスタックを作成し、そのスタック用の適用ジョブを作成する 2 つのコマンドを実行します。


export config_source_zip=./bucket-and-object-stack.zip  

export compartment_id=ocid1.compartment.oc1..aaaaaaaa5q2srleka3ll2xgpcdj3uns3nshzc3lbn2wgx2kcuah5blh47icq

export stack_display_name=object-storage-bucket-stack

STACK_ID=$(oci resource-manager stack create –compartment-id $compartment_id –display-name=$stack_display_name –description “Created through OCI CLI”  –config-source $config_source_zip | jq -r  ‘.data.id’)

oci resource-manager job create-apply-job –execution-plan-strategy AUTO_APPROVED –stack-id $STACK_ID –display-name “Running Apply Job from OCI CLI”


これらのコマンドの実行は、次のようになります(Command Shellの場合)。



すべてがうまくいっているように見えます。しかし、このジョブは失敗していることが判明しました。この方法でスタックを作成すると、コンソールからスタックを作成したときと同じデフォルト値が tenancy_ocid と compartment_ocid に適用されないらしいのです。



したがって、スタックの作成時に、これらの変数に(デフォルトの)値を提供する必要があります。適用するジョブが作成されるとき、スタックに定義された値を上書きするために、変数も提供することができます。


2番目の試みは次のようなものです。


export config_source_zip=./bucket-and-object-stack.zip  

export compartment_id=ocid1.compartment.oc1..aaaaaaaa5q2srleka3ll2xgpcdj3uns3nshzc3lbn2wgx2kcuah5blh47icq

export tenancy_ocid=ocid1.tenancy.oc1..aaaaaaaag7c7slwmlvsodyym662ixlsonnihko2igwpjwwe2egmlf3gg6okq

export stack_display_name=object-storage-bucket-stack

export region=”us-ashburn-1″

export variables=(‘{“compartment_ocid”: “‘${compartment_id}'”, “tenancy_ocid”: “‘${tenancy_ocid}'” , “region”: “‘${region}'” }’)

STACK_ID=$(oci resource-manager stack create –compartment-id $compartment_id –display-name=$stack_display_name –description “Created through OCI CLI”  –config-source $config_source_zip –variables “${variables}”   | jq -r  ‘.data.id’)

oci resource-manager job create-apply-job –execution-plan-strategy AUTO_APPROVED –stack-id $STACK_ID –display-name “Running Apply Job from OCI CLI”




そして、今回はスタックが作成され、ジョブが正常に実行されました。



仕事の成果:



BucketとObjectが作成されます。



別のBucketとオブジェクトのために、2つ目のスタックを作成し、適用してみましょう。

export bucket_name=”atlas-bucket”

export object_name=”countries-collection.csv”

export source_url=”https://raw.githubusercontent.com/mledoze/countries/master/dist/countries.csv”

export variables=(‘{“compartment_ocid”: “‘${compartment_id}'”, “tenancy_ocid”: “‘${tenancy_ocid}'” , “region”: “‘${region}'”, “bucket_name”:”‘${bucket_name}'”, “object_name”:”‘${object_name}'”, “source_url”:”‘${source_url}'” }’)

STACK_ID=$(oci resource-manager stack create –compartment-id $compartment_id –display-name=$stack_display_name –description “Created through OCI CLI”  –config-source $config_source_zip –variables “${variables}”   | jq -r  ‘.data.id’)

oci resource-manager job create-apply-job –execution-plan-strategy AUTO_APPROVED –stack-id $STACK_ID –display-name “Running Apply Job from OCI CLI”



そして、対応するBucketとObjectが作成されます。



Bucketにディープリンクすることも




リソース

run standalone Terraform (anywhere, self installed) – with OCI Provider
installed and with local OCI configuration and authentication – read my article

    run Terraform from OCI CloudShell – which already contains Terraform
    and can run with Instance Principal Authorization (no private key
    required) – read my article

      create a Stack in OCI based on a Terraform configuration and – after
      providing values for variables – apply the stack – through the console – based on an uploaded Zip-file –
      read my article

      OCI Documentation CLI Reference Create Stack – https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.22.0/oci_cli_docs/cmdref/resource-manager/stack/create.html

      my GitHub Repo with OCI Terraform definitions – https://github.com/lucasjellema/oci-terraform-composites

      コメント

      このブログの人気の投稿

      Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

      Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

      Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)