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

2023年12月26日(火)
大関 研丞 (Kenneth Ozeki)
最終回となる今回は、2023年12月時点でリリースされている新機能の紹介と、その新機能の中から「Pulumi ESC」を用いたハンズオンを実践していきます。

Pulumi Cloudで新しい変数(environment)を作成

次に、Pulumi Cloud画面にてPulumi ESCで取得する変数を作成します。ESC経由でAWSへの認証を行うために必要となる3つの変数「AWS_ACCESS_KEY_ID」「AWS_SECRET_ACCESS_KEY」「AWS_SESSION_TOKEN」をPulumi Cloud側で用意していきます。

  1. ブラウザでPulumi Cloudにログインして、左メニューから [Environments] → [Create Environment] をクリックします。
  2. 「Create Environment」画面で「aws-cred-environment」と入力して、[Create Environment]をクリックします。
  3. 変数を定義する「Environment definition」欄で以下のyamlに書き換えます。「roleArn」には先ほどの手順で控えたロールのARNを入力します。認証に必要な変数の他に、自身が用意したい変数(TEST_ENV: “hoge”)もテスト用に設定しておきます。入力が完了したら、画面下部の[Save]をクリックします。
    values:
      aws:
        login:
          fn::open::aws-login:
            oidc:
              duration: 1h
              roleArn: <your-oidc-iam-role-arn>
              sessionName: pulumi-environments-session
      environmentVariables:
        AWS_ACCESS_KEY_ID: ${aws.login.accessKeyId}
        AWS_SECRET_ACCESS_KEY: ${aws.login.secretAccessKey}
        AWS_SESSION_TOKEN: ${aws.login.sessionToken}
        TEST_ENV: "hoge"
    AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKENそれぞれの値は、yamlに記載のaws-loginプロバイダーからOIDCを利用して自動的に取得されます。最終的に、Pulumi ESCが実行された際に「environmentVariables」配下に記載した変数のkey、valueがPulumi ESCの実行環境のPCに環境変数としてセットされるイメージです。

動作確認

Pulumi ESCを利用するための一通りの設定が完了したので、動作確認をしてみます。

  1. ローカルPCで、ESCの変数(env)リストを取得します。
    $ esc env ls
    
    aws-cred-environment
  2. 「esc env get」コマンドで、変数(env)の設定内容を確認します。
    $ esc env get aws-cred-environment
    
       Value 
      
        {
          "aws": {
            "login": null
          },
          "environmentVariables": {
            "AWS_ACCESS_KEY_ID": null,
            "AWS_SECRET_ACCESS_KEY": null,
            "AWS_SESSION_TOKEN": null,
            "TEST_ENV": "hoge"
          }
        }
      
       Definition 
      
        values:
          aws:
            login:
              fn::open::aws-login:
                oidc:
                  duration: 1h
                  roleArn: arn:aws:iam::***
                  sessionName: pulumi-environments-session
          environmentVariables:
            AWS_ACCESS_KEY_ID: ${aws.login.accessKeyId}
            AWS_SECRET_ACCESS_KEY: ${aws.login.secretAccessKey}
            AWS_SESSION_TOKEN: ${aws.login.sessionToken}
            TEST_ENV: "hoge"
  3. 「esc env open」コマンドで、変数(env)のvalueをレンデリングした内容を取得します。
    $ esc env open aws-cred-environment
    
    {
      "aws": {
        "login": {
          "accessKeyId": "ASIA***",
          "secretAccessKey": "*******",
          "sessionToken": "*********"
        }
      },
      "environmentVariables": {
        "AWS_ACCESS_KEY_ID": "ASIA***",
        "AWS_SECRET_ACCESS_KEY": "********",
        "AWS_SESSION_TOKEN": "********",
        "TEST_ENV": "hoge"
      }
    }
    AWSの認証関連に利用される変数(env)と、自身で設定した変数(env)が取得できていることが確認できます。ちなみに「--format shell」オプションを付加することで、shellコマンドで変数(env)のvalueをレンダリングした内容を取得できます。
    $ esc env open aws-cred-environment --format shell
                      
    export AWS_ACCESS_KEY_ID="ASIA***"
    export AWS_SECRET_ACCESS_KEY="*******"
    export AWS_SESSION_TOKEN="************"
    export TEST_ENV="hoge"
  4. 最後に「esc run」コマンドで、AWSのクレデンシャル情報が設定されていない状態で「aws s3 ls」コマンドが実行できるか(AWSへの認証が可能か)確認します。まずは、aws s3 lsコマンド単体では認証エラーが出ることを確認します(実行環境によってはエラーメッセージが異なる場合があります)
    $ aws s3 ls
    
    An error occurred (ExpiredToken) when calling the ListBuckets operation: The provided token has expired.
  5. 今度は、esc runコマンドを用いてaws s3 lsコマンドを実行します。ESC経由で実行したいコマンドは「-i」オプション以降に指定します。
    $ esc run aws-cred-environment -i aws s3 ls
    
    2023-08-23 14:20:30 ***
    2023-11-17 13:33:10 ***
    ESC経由であれば、AWSのクレデンシャル情報が設定されていない状態でも無事にawsコマンドが実行できる(認証できる)ことが確認できました。ESCを実行して取得した環境変数をPulumi Programで利用したい場合はconfiguration APIを利用する方法がありますので、ぜひ参考にしてみてください。

おわりに

今回で、「今日からはじめる Pulumiでカンタン インフラ運用・管理」の連載は終了となります。本連載を通じて、Pulumiが提供する素晴らしい機能や利点を少しでも伝えられたなら、大変嬉しく思います。また、クラウドインフラストラクチャの構築と管理がよりシンプルで柔軟になるPulumiの可能性に触れ、読者の皆さんが新たな技術に対する興奮を共有できたなら、それに越したことはありません。

また本連載のような執筆ができる機会が訪れるまで、今後も技術の進化に合わせて、より深い洞察と実践的な情報をお届けできるよう、努力してまいります。最後まで本連載をお読みいただき、本当にありがとうございました。今後ともよろしくお願いいたします。

【参考】Pulumi公式ホームページ(英語)

著者
大関 研丞 (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メルマガ会員のサービス内容を見る

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