原文はこちら:https://blogs.oracle.com/developers/iac-in-the-cloud%3a-getting-started-with-resource-manager
Terraformの使い方とOracle Cloud Infrastructureの管理についてのブログシリーズにおかえりなさい。シリーズの最初のポストでは開発者向けのTerraformの基礎を、第二弾ではTerraformをインストールし、スクリプトを記述し適用してOracle Cloud Infrastructureのテナンシーでリソースを作成しました。このポストでは、OCIのエンジニアたちがResource Managerというツールを使い、どのようにわれわれのクラウドにTerraformを統合しているかについてご紹介していきます。
OCI Resource Managerとは?
Resource ManagerはTerraformをクラウドで記述し、実行するひとつの方法です。ここで、「Terraformをローカルで、あるいはCI/CDパイプライン、Terraform CLI、また、さまざまなプラグインで実行できるのに、どうしてそんなものが必要なの?」と疑問を抱いているかもしれません。答えは、有り体に言えば「場合による」というものです。なるほど、Terraformプランをクラウドで実行する必要がない(あるいはしたくない)ときもあるでしょう。でも、後述するように、そうすることが便利なこともあるわけです。Resource Managerは、あなたのTerraformプロジェクトを改善するために、また、あなたが定義したインフラストラクチャをデプロイするユーザーのために役立つ機能を備えています。時には定義したインフラストラクチャを分散させるようなかたちで定義することもありますよね。この場合、あなたは定義を内部/外部のチームと共有することになります。また、あなたは他のひとたちがOracle Cloudにデプロイするオープンソースのプロジェクトを作成するかもしれません。Resource Managerはそのようなときにあなたを手助けしてくれます。
Tip:Resource Managerを使うときは、 provider
ブロックで必要なフィールドは対象の region
だけです。これは、ジョブがテナンシー内でセキュアに実行され、ログインしているユーザーのパーミッションとポリシーを継承しているためです。
後で混乱するのを防ぐために、いくつかの用語についてはっきりさせておく必要があります。詳細は公式ドキュメントを参照していただく必要がありますが、概要は以下の通りです。
Configuration Source Provider
Terraform設定ファイルのバージョン管理のために使っている外部のソースコントロールシステムに関連する情報。これらにより、ZIPファイルにパッケージしてアップロードすることなく、バージョン管理システムから直接ビルドできるようになるためとても便利です。
Stacks(スタック)
ひとつのプランの一部として実行されるスクリプトのグループ。ZIPファイルとしてアップロードするか、Configuration Source Providerから直接プルすることもできます。
Job(ジョブ)
Stackに対して実行されるもの。プラン、適用、破棄のジョブ。
Drift(ドリフト)
実際のステートと、そのスタックに対して最後に実行したジョブが保存していたステートとの差分。例えば、Resource Managerジョブによって作成/更新したリソースをあなたが手動で変更した場合、ステートにドリフトを持ち込んだことになります。このようなケースでは、ドリフト検知レポートが役に立ちます。
Resource ManagerはOCIコンソール、SDK、OCI CLIから利用可能です。
Resource Managerの使用
To learn about Resource Manager, I think it will be best if we use a project for our configuration and use that project to create a stack and execute our plan/apply jobs.
Resource Managerについて知るためには、例となるプロジェクトで設定とスタックの作成、プランと適用のジョブを実行してみるのが一番だと思います。
Gitリポジトリの作成
このデモのために、コードをGitHubに保存しておき、OCI Configuration Source Providerで自動的に最新のTerraform設定をリポジトリからプルできるようにしましょう。これでスタックを実行するたびにZIPしてアップロードする手間が省けます。
https://github.com/newでGitHubに新しいリポジトリを作成します。
そうしたらローカルにリポジトリをチェックアウトしましょう。
では設定ファイルを追加していきます。
Configuration Source Providerの作成
まずは、GitHubプロジェクトからスタックを直接ビルドできるよう、Configuration Source Providerをセットアップしておきましょう。GitHubのパーソナルアクセストークンが必要になるので、https://github.com/settings/tokensに行ってトークンの生成をクリックします。
トークンに名前をつけて、スコープは read:packages
を選択します。
作成をクリックして次のページでトークンをコピーしましょう。
OCIコンソールで、"configuration source provider"を探してそこに移動します。
「Create Configuration Source Provider」をクリック。
ダイアログでは名前をつけ(1番)、備考を記述し(2番)、コンパートメントを選択し(3番)、「GitHub」のタイプを選択し(4番)、サーバーURLには https://github.com
を入力し(5番)、GitHubパーソナルアクセストークンをペーストします(6番)。
これで次のステップでプロバイダーを使う準備ができました。
スタックの作成
このステップでは、基本的なリソース作成を行うTerraformスクリプトを作成し、それをGitHubリポジトリにチェックインし、GitHubリポジトリからResource Managerにプルさせてスタックを作成します。
先程GitHubリポジトリをクローンしたディレクトリに移動し、demo.tfというファイルを作成します。複雑になりすぎるといけないので、ここではTerraform設定ファイルを単一のファイルにしておきます。まず、providerブロックを追加します。このスクリプトはOracle Cloud内で実行されるため、providerで宣言が必要なのはregionだけです。
次に、Object Storageバケットを作成するresourceブロックを追加します。バケット名、ネームスペースを格納する変数を記述し、バケット作成結果を出力させます。以下がスクリプトです。
ではファイルをGitコミット、プッシュしましょう。
ではスタックをビルドしましょう。OCIコンソールで"Stacks"を探して移動します。
「Create Stack」をクリック。
オリジンに「Souce Code Control System」(1番)、GitHub Source Provider(2番)、プロジェクトリポジトリ(3番)、mainブランチ(4番)をそれぞれ選択しましょう。スタックに名前をつけます(5番)。
「Next」をクリックすると必須な変数設定がないことの確認をする二番目のウィザードに移ります。必要な場合にはここで変数の入力ができますが、それはあとで見ることにしましょう。
Nextをクリックして、情報を確認してからCreateをクリックします。するとスタック詳細ページに遷移します。
スタックが作成できたので、ジョブの実行を見ていきましょう。
注意:GitHubリポジトリからスタックを作成したので、ジョブを実行するたびに指定したブランチの最新のコミットをプルします。
ジョブの実行
ページの上のほうにTerraform Actionsというラベルがついたドロップダウンがありますね?これをクリックして実行できるアクションを見てみましょう。
このスタックに対してterraform planを実行するにはPlan(1番)をクリックします。terraform applyを実行するにはApply(2番)を、terraform destroyを実行するにはDestroy(3番)をクリックします。
When running a plan, give it a name and click ‘Plan’.
プランを実行するには、名前をつけてPlanをクリックします。
プランを実行したら、プラン詳細ページで成功メッセージが表示されるでしょう。コミットハッシュはこのプランを実行するために使われたコミットのものです。
プラン詳細ページでログをチェックしてみましょう。
スタック詳細ページに戻ってプランを適用しましょう。
Observe the Log output on the apply job, and once it’s complete you can view the job output.
ジョブの適用で出力されたログをチェックしておき、ジョブが完了すればアウトプットも見られます。
Object Storageバケットリストページを見ると新しいバケットが作成されていることを確認できます。
最後に、スタックから作成したバケットをクリーンアップして削除します。スタック詳細ページに行ってDestroyジョブを作成し実行しましょう。
破棄はログ出力で確認できます。
まとめ
このポストではResource Managerを使いTerraformスクリプトをOracle Cloudで動かす方法を学びました。次のポストでは、Terraformプロジェクトを配布、共有したり、シンプルにスクリプトを使うチームメンバーのUXを改善したりすることができるよう、様々な変数の入力と検証に対応するようにスクリプトをパワフルなものに拡張します
0 件のコメント:
コメントを投稿