以下の内容はhttps://kakakakakku.hatenablog.com/entry/2025/10/01/085855より取得しました。


既存の AWS リソースを Pulumi にインポートする: import コマンドと import リソースオプション

既存の AWS リソースを途中から Pulumi で管理する場合はインポートできる👌

Pulumi のインポート方法は大きく「import コマンド」「import リソースオプション」の2種類ある.詳しくはドキュメントに載っている.あくまでイメージだけど Terraform の import コマンドimport ブロックの関係に似てるとも言えそう.

www.pulumi.com

1. import コマンドを試す

まず AWS CLI で Amazon CloudWatch Logs ロググループ sandbox-pulumi-import-cli を作っておく.ログクラスは Infrequent Access・保持期間は 90日 にしておく.

$ aws logs create-log-group --log-group-name sandbox-pulumi-import-cli --log-group-class INFREQUENT_ACCESS
$ aws logs put-retention-policy --log-group-name sandbox-pulumi-import-cli --retention-in-days 90
$ aws logs describe-log-groups --log-group-name-prefix sandbox-pulumi-import-cli
{
    "logGroups": [
        {
            "logGroupName": "sandbox-pulumi-import-cli",
            "creationTime": 1758519450411,
            "retentionInDays": 90,
            "metricFilterCount": 0,
            "arn": "arn:aws:logs:ap-northeast-1:000000000000:log-group:sandbox-pulumi-import-cli:*",
            "storedBytes": 0,
            "logGroupClass": "INFREQUENT_ACCESS",
            "logGroupArn": "arn:aws:logs:ap-northeast-1:000000000000:log-group:sandbox-pulumi-import-cli"
        }
    ]
}

ここで pulumi import コマンドを実行する.pulumi import コマンドの指定方法はドキュメントに載っている📝

www.pulumi.com

するとプレビュー時に 1 to import・デプロイ時に 1 imported と表示された❗️そしてインポートしたリソースには protect 設定(誤って削除されないように保護できる)が付いているという注意コメントと Pulumi コードも出力される \( 'ω')/

$ pulumi import aws:cloudwatch/logGroup:LogGroup sandbox-pulumi-import-cli sandbox-pulumi-import-cli
Previewing import (dev)

     Type                        Name                       Plan       
     pulumi:pulumi:Stack         sandbox-pulumi-aws-dev                
 =   └─ aws:cloudwatch:LogGroup  sandbox-pulumi-import-cli  import     

Resources:
    = 1 to import
    2 unchanged

Do you want to perform this import? yes
Importing (dev)

     Type                        Name                       Status               
     pulumi:pulumi:Stack         sandbox-pulumi-aws-dev                          
 =   └─ aws:cloudwatch:LogGroup  sandbox-pulumi-import-cli  imported (0.26s)     

Resources:
    = 1 imported
    2 unchanged

Duration: 2s

Please copy the following code into your Pulumi application. Not doing so
will cause Pulumi to report that an update will happen on the next update command.

Please note that the imported resources are marked as protected. To destroy them
you will need to remove the `protect` option and run `pulumi update` *before*
the destroy will take effect.

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";

const sandbox_pulumi_import_cli = new aws.cloudwatch.LogGroup("sandbox-pulumi-import-cli", {
    logGroupClass: "INFREQUENT_ACCESS",
    name: "sandbox-pulumi-import-cli",
    region: "ap-northeast-1",
    retentionInDays: 90,
}, {
    protect: true,
});

pulumi import コマンドを実行したタイミングでインポート対象リソース(今回で言うと Amazon CloudWatch Logs ロググループ)は Pulumi 側に登録されている👌ちなみに protect 設定を意味する鍵マークにカーソルを合わせると Resource is protected from accidental deletion と表示される🔒️

あとは出力された Pulumi コードを追加して pulumi preview コマンドを実行すれば差分なし❗️

$ pulumi preview
Previewing update (dev)

     Type                 Name                    Plan     
     pulumi:pulumi:Stack  sandbox-pulumi-aws-dev           

Resources:
    3 unchanged

最後にインポートした Amazon CloudWatch Logs ロググループ sandbox-pulumi-import-cli の設定変更を試す.保持期間を 180日 に変更する.

const sandbox_pulumi_import_cli = new aws.cloudwatch.LogGroup("sandbox-pulumi-import-cli", {
    logGroupClass: "INFREQUENT_ACCESS",
    name: "sandbox-pulumi-import-cli",
    region: "ap-northeast-1",
    retentionInDays: 180,
}, {
    protect: true,
});

pulumi up コマンド実行して期待通りに変更できていた👌

2. import リソースオプションを試す

同じく AWS CLI で Amazon CloudWatch Logs ロググループ sandbox-pulumi-import-option を作っておく.ログクラスは Infrequent Access・保持期間は 90日 にしておく.

$ aws logs create-log-group --log-group-name sandbox-pulumi-import-option --log-group-class INFREQUENT_ACCESS
$ aws logs put-retention-policy --log-group-name sandbox-pulumi-import-option --retention-in-days 90
$ aws logs describe-log-groups --log-group-name-prefix sandbox-pulumi-import-option
{
    "logGroups": [
        {
            "logGroupName": "sandbox-pulumi-import-option",
            "creationTime": 1758545230909,
            "retentionInDays": 90,
            "metricFilterCount": 0,
            "arn": "arn:aws:logs:ap-northeast-1:000000000000:log-group:sandbox-pulumi-import-option:*",
            "storedBytes": 0,
            "logGroupClass": "INFREQUENT_ACCESS",
            "logGroupArn": "arn:aws:logs:ap-northeast-1:000000000000:log-group:sandbox-pulumi-import-option"
        }
    ]
}

import リソースオプションを使う場合は Pulumi コードを自分で実装する必要がある.さらに以下のように import リソースオプションに対象リソースの識別子を指定する.Amazon CloudWatch Logs ロググループの場合は name を指定する.

new aws.cloudwatch.LogGroup("sandbox-pulumi-import-option", {
    logGroupClass: "INFREQUENT_ACCESS",
    name: "sandbox-pulumi-import-option",
    region: "ap-northeast-1",
    retentionInDays: 90,
}, {
    import: "sandbox-pulumi-import-option"
});

ここで pulumi up コマンドを実行する.するとプレビュー時に 1 to import・デプロイ時に 1 imported と表示された❗️

$ pulumi up
Previewing update (dev)

     Type                        Name                          Plan       
     pulumi:pulumi:Stack         sandbox-pulumi-aws-dev                   
 =   └─ aws:cloudwatch:LogGroup  sandbox-pulumi-import-option  import     

Resources:
    = 1 to import
    3 unchanged

Do you want to perform this update? yes
Updating (dev)

     Type                        Name                          Status               
     pulumi:pulumi:Stack         sandbox-pulumi-aws-dev                             
 =   └─ aws:cloudwatch:LogGroup  sandbox-pulumi-import-option  imported (0.26s)     

Resources:
    = 1 imported
    3 unchanged

Duration: 3s

そして Pulumi 側にも登録されていた👌

最後にインポートした Amazon CloudWatch Logs ロググループ sandbox-pulumi-import-option の設定変更を試す.保持期間を 180日 に変更する.

new aws.cloudwatch.LogGroup("sandbox-pulumi-import-option", {
    logGroupClass: "INFREQUENT_ACCESS",
    name: "sandbox-pulumi-import-option",
    region: "ap-northeast-1",
    retentionInDays: 180,
}, {
    import: "sandbox-pulumi-import-option"
});

pulumi up コマンド実行して期待通りに変更できていた👌

関連記事

今回はドキュメントを参考に自分で考えながらインポートを試したけど,インポートを体験できるチュートリアル「Importing AWS Infrastructure」もあるので興味があったらこちらもぜひ❗️

www.pulumi.com




以上の内容はhttps://kakakakakku.hatenablog.com/entry/2025/10/01/085855より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14