既に存在するリソースをPulumiで管理してみよう

2023年10月19日(木)
大関 研丞 (Kenneth Ozeki)
第8回となる今回は、既にクラウド環境にデプロイされているリソースをPulumiで管理(import)する方法について、ハンズオンで実践していきます。

はじめに

前回は「Pulumi Kubernetes Operator」を利用したPulumi Programの継続デリバリーについて解説しました。今回は、Pulumiのリソース更新の流れをおさらいしつつ、既にクラウド環境にデプロイされているリソースについてPulumiで管理(import)する方法を紹介します。

おさらい:Pulumiの基本

既にクラウド環境などにデプロイされているリソースのPulumi管理化を実践するためには、Stack/Stateの概要やPulumiによるリソース更新の流れについて、ある程度理解しておく必要があります。Pulumiの基本的な内容となりますが、ここでPulumiのコンポーネントやリソース更新の流れについて、おさらいしておきます。

Pulumiの主要コンポーネントとState

Pulumiの主要コンポーネントの構成は下図に示すとおりです。Stackごとに現在のインフラストラクチャに関する情報がjsonで記録されていて、これを「State」と呼んでいます。

  • Program → インフラストラクチャのあるべき姿を定義したもの
  • Resource → インフラストラクチャを構成するオブジェクト(実際のインフラリソース)。オブジェクトのプロパティ(設定値)は他のオブジェクトに共有することが可能(図のInputs/Outputsの部分)
  • Project → Programのソースコードとメタデータ(どのようにProgramを動かすかの情報)を格納するディレクトリ
  • Stack → Projectディレクトリ内でProgramを「pulumi up」(Pulumi CLI)した後のインスタンス。同一のProgramから本番環境/ステージング環境など、用途に応じて複数の環境用にインスタンスを作成可能

Pulumiは、Stateからそのインフラストラクチャがいつどのように作成/削除/読み取り/更新されたかなどの情報を読み取り、「pulumi up」コマンド実行時のアクション(次はリソースを作成/更新または削除すべきかどうか)を決定します。

ちなみに、現在のStateは以下の手順で確認できます。

[前提]

  • Pulumi v3.72.2
  • あらかじめ「pulumi new」コマンドなどでStackが作成された状態
  1. 現在アクティブなStackを確認します。
    1$ pulumi stack ls
    2NAME  LAST UPDATE  RESOURCE COUNT  URL
    3dev   1 hour ago   5               https://app.pulumi.com/****/quickstart2/dev
    4stg*  n/a          n/a             https://app.pulumi.com/****/quickstart2/stg
  2. 今回は「dev」StackのStateを取得するので、「dev」Stackを選択します。選択後は再度stack lsで「dev」stackがアクティブであることを確認します。
    1$ pulumi stack select dev
    2 
    3$ pulumi stack ls
    4NAME  LAST UPDATE  RESOURCE COUNT  URL
    5dev*  1 hour ago   5               https://app.pulumi.com/****/quickstart2/dev
    6stg   n/a          n/a             https://app.pulumi.com/****/quickstart2/stg
  3. 「pulumi stack export」コマンドを実行して、現在のStackでStateを標準出力します。
    01$ pulumi stack export
    02{
    03    "version": 3,
    04    "deployment": {
    05        "manifest": {
    06            "time": "2023-09-26T17:36:36.814054+09:00",
    07            "magic": "c57d2cc6e4ddc1ad908bcf42d81d39304d5e92a1de5a6e1d5a5c485a70ff807b",
    08            "version": "v3.72.2"
    09        },
    10        "secrets_providers": {
    11            "type": "service",
    12            "state": {
    13                "url": "https://api.pulumi.com",
    14                "owner": "***",
    15                "project": "quickstart2",
    16                "stack": "dev"
    17            }
    18        },
    19        "resources": [
    20            {
    21                "urn": "urn:pulumi:dev::quickstart2::pulumi:pulumi:Stack::quickstart2-dev",
    22                "custom": false,
    23                "type": "pulumi:pulumi:Stack",
    24                "outputs": {
    25                    "bucketEndpoint": "http://storage.googleapis.com/my-bucket-b5f5f89/index.html-12e5385",
    26                    "bucketName": "gs://my-bucket-b5f5f89"
    27                }
    28            },
    29            {
    30                "urn": "urn:pulumi:dev::quickstart2::pulumi:providers:gcp::default",
    31                "custom": true,
    32                "id": "80738ccf-25df-4478-8b0a-f6c4c3a15dba",
    33                "type": "pulumi:providers:gcp",
    34                "inputs": {
    35                    "project": "pulumi-test",
    36                    "version": "6.29.0"
    37                },
    38                "outputs": {
    39                    "project": "pulumi-test",
    40                    "version": "6.29.0"
    41                },
    42                "parent": "urn:pulumi:dev::quickstart2::pulumi:pulumi:Stack::quickstart2-dev"
    43            },
    44~~~~~~(略)~~~~~~

また、Stateの内容はPulumi service(GUI)でも「いつどのように作成/削除/読み取り/更新されたか」が視覚的に分かりやすい形で確認できます。

  1. 以下のコマンドを実行するとPulumi service画面が表示されます。実行前にログインが済んでいない場合は、ここで一度ログイン処理を実施します。
    1$ pulumi console
    2Manage your Pulumi stacks by logging in.
    3Run `pulumi login --help` for alternative login options.
    4Enter your access token from https://app.pulumi.com/account/tokens
    5    or hit  to log in using your browser
  2. pulumi service画面の「Stacks」タブに移動し、Stateを確認したい対象ProjectのStackをクリックします。
  3. リソース変更履歴欄右側の[Details]リンクをクリックします。
    一番直近のpulumi実行履歴(activity)が表示されます。

Pulumiリソース更新の流れ

Pulumiによるリソース更新を簡単に図で表すと、下図のようになります。

Pulumiユーザーが「pulumi up」コマンドを実行すると、Programの更新をPulumi CLIで検知します。更新を検知したPulumi CLIは「Program(あるべき状態)」と「State(現在の状態)」を比較したのち、必要なアクション(リソースの作成/更新/削除)を決定します。実際のリソース作成/更新/削除はPulumi CLIからの情報を元に、AWSやGCPなどの各サービスに対応した「Provider」で行われます。

既存リソースのPulumi管理化(state import)

既に存在しているクラウド環境のインフラストラクチャ(リソース)をPulumiで管理したい場合は、2つの方法「Programにimport option(リソースID)を付与するimport」または「Pulumiコマンドによるimport」でimport処理を実施できます。

import処理を実施すると、PulumiのStateに対して「既に存在しているリソースの情報」を記録できます。Stateに「既に存在しているリソースの情報」が記録されていない状態、かつ「Programにはリソースの情報が記載されている状態」で「Pulumi up」を実施してしまうと、同じリソースが重複して作成されてしまいますので(詳細は後述)、必ず既存リソースのimport処理を実施しておく必要があります。

・import処理を実施せずにPulumi upを実行した場合

【Stateがカラだとリソースが新規作成される(リソース名にランダム16進数のsuffixが付く】

【import option(リソースID)をProgramに付与してimportする流れ】

  • Pulumiで管理したいリソースのリソースIDを調べる
  • import option(リソースID)をProgramに記載する(管理したいリソースと同様の設定値もProgramに記載する)
  • Pulumi upを実行して差分確認

【事前にimportを実施して既存リソースをPulumi管理化(Pulumiコマンドによるimport)】

【Pulumiコマンドによるimportの流れ】

  • Pulumiで管理したいリソースのリソースIDを調べる
  • リソースIDを引数に指定してPulumi importコマンドを実行する
  • コマンド実行時に出力されたコードをProgramに記載する
  • Pulumi upを実行して差分確認

【事前にimport実施して既存リソースをPulumi管理化(Programにimport option付与)】

著者
大関 研丞 (Kenneth Ozeki)
クリエーションライン株式会社 Data Platform Team
前職では保険や金融エンタープライズのミッションクリティカルシステム(オンプレミス、仮想サーバー、CDN等のインフラ系業務)の設計/構築を経験。クリエーションラインに転職後はクラウドエンジニアとしてGCP関連の案件でインフラの設計/構築、IaCやCI/CDを用いたDevOpsの導入、コンテナ(Kubernetes)基盤の構築、運用自動化ツールの作成などを担当。
クリエーションラインの技術ブログをチェック

連載バックナンバー

システム運用技術解説
第10回

Pulumiの最新機能「Pulumi ESC」を使ってみよう

2023/12/26
最終回となる今回は、2023年12月時点でリリースされている新機能の紹介と、その新機能の中から「Pulumi ESC」を用いたハンズオンを実践していきます。
システム運用技術解説
第9回

TerraformからPulumiへの移行

2023/11/28
第9回となる今回は、既にTerraformでAWS環境に作成されているリソースをPulumiへ移行するケースを想定して、CoexistenceとConversionのハンズオンを実践していきます
システム運用技術解説
第8回

既に存在するリソースをPulumiで管理してみよう

2023/10/19
第8回となる今回は、既にクラウド環境にデプロイされているリソースをPulumiで管理(import)する方法について、ハンズオンで実践していきます。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています