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

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

はじめに

本連載も、今回で最終回となります。今回は、2023年12月時点で比較的最近リリースされたPulumiの新機能について、その一部を紹介したいと思います。また、後半では「Pulumi ESC」を用いたハンズオンも実施していきます。

Pulumiで最近リリースされた機能(2023年12月時点)

本稿で紹介する機能は、2023年12月時点での情報となります。Pulumiに関する最新の情報は、主にPulumi Blogなどでご確認ください。

Pulumi AI

Pulumi AIは、自然言語を使用してPulumiのIaCプログラムを生成するPulumiサービス(SaaS)に組み込まれたAIアシスタント機能で、2023年4月ごろにリリースされました。2023年12月時点で自然言語は英語のみ利用可能ですが、生成したいPulumiプログラムの言語を選択してからリソースの要件を英語で入力すると、即座に要件に沿ったPulumiプログラムが生成されます。

言語に「Python」選択後、簡単な英語でS3 BucketのPulumiプログラムを生成

Pulumi AIはブラウザ版とCLI版が用意されており、どちらも無料で利用できますが、CLI版は2023年12月時点ではexperimental(実験運用段階)となります。なお、ブラウザ版はこちらからすぐに利用できるので、ぜひこの機会に試してみてください。

Pulumi AIで利用される言語モデルは、PulumiのドキュメンテーションやPulumi Registry(GCP/AWSなどのproviderのAPI Docs)といったPulumiに関するナレッジを活用してカスタムトレーニングされたGPT-4が利用されています。

ただし、筆者の所感となりますが、比較的シンプルなリソース要件であればPulumi CLIで即時実行可能なプログラムが生成されやすいですが、リソース要件が複雑になればなるほど、そのままでは実行できない(いくつかエラーを含んだ)プログラムが生成されやすくなるので注意が必要です。精度については今後に期待ですね。エラーが出た際はエラー文をそのままPulumi AIに貼り付ければ再度コードを出力してくれます。

provider特有の数値(AMI IDなど)や存在しないclass名などが出力されるケースもある

Pulumi Deployments

Pulumi Deploymentsは、CI/CDシステムの構築のみならず「pulumi up」をPulumi Cloudで実行するための環境(computeリソース)や、source code/credential/環境変数/buildの設定などの集中管理、REST APIを用いたリソースデプロイの仕組みの提供など、インフラストラクチャをPulumi CloudやREST APIで集中管理するためのフルマネージドプラットフォームです。プレビューでの提供が続いていましたが、2023年10月に一般提供が開始されたことで、Pulumi Deploymentsの機能改善と新たな料金プランが提供されています。Pulumi Deploymentsの設定はPulumi Cloudコンソール画面から [Stacks] → [(設定したStack名)] → [Deployments]タブから行うことができます。

GitHubなどにProgramを格納して、Pulumi Cloud上からクリック1つで実行(pulumi up)できる

新しい料金プランでは、個人利用(Individual)において制限はあるものの、Pulumi Deploymentsを無料で利用できます。

個人利用(Individual)では毎月500分以内(Update処理時間)の利用なら無料で試せる

Pulumi ESC

Pulumi ESC(Environments, Secrets, and Configuration)は、複数のソースに格納されたシークレットや変数、Configなどを統合管理して、Pulumi Programのデプロイなどに利用できるCLIベースのサービスです。2023年10月ごろにプレビュー版がリリースされ、現状で一般提供の開始時期はまだ予定されていませんが、Pulumiのアカウントがあれば誰でも無料で利用できます。

複数ソースからシークレットなどを取得して、複数のプロバイダーで活用できる

また、AWSやGCPなどのプロバイダーへの接続に必要なクレデンシャル情報をPulumi ESCが動的に生成してくれる機能もあります。プロバイダー認証にESCを利用することで、ローカル作業環境への認証情報の設定やチームメンバー間の認証情報のやり取りが不要となり、クラウドインフラのよりセキュアな運用を実現できます。

$ esc run <your-pulumi-org-name>/<your-environment-name> -i aws s3 ls
【Pulumi ESC CLIを介してクレデンシャルが生成されプロバイダー認証が行われる】

複数のソースに格納されたシークレットを統合的に管理できるPulumi ESCですが、基本的にPulumi Cloudと連携されているため、Pulumi Cloud自体に格納したシークレットや変数などもESCを介して利用できます。

Pulumi Cloudにおける変数設定画面

Pulumi ESCを利用した動的認証の方法については、以降のハンズオンで紹介していきます。

【ハンズオン】Pulumi ESCを利用したAWSの動的認証

ハンズオンの流れ

今回はPulumi ESCを介したプロバイダー認証を行いますが、Pulumi Programは作成しません。ローカルPC環境にてAWSのクレデンシャル情報が設定されていない状態で、Pulumi ESCを介して「aws s3 ls」コマンドが実行できるか(AWSへの認証が可能か)確認します。作業は主にMacOSのターミナルを利用します。

前提

  • ハンズオンを実施する上で必要なAWSのアクセス権限を有する(role作成など)
  • PCにPythonを導入済み(version 3.7以上)
  • awsコマンドインストール済み(ハンズオン動作確認用)

事前準備

Pulumiを利用したAWSリソースデプロイのハンズオンを実施するには、事前に以下の作業が実施済みである必要があります。なお、事前準備の手順は第2回で紹介していますので、まだ実施されていない方はそちらをご確認ください。

  • Pulumi CLIのインストール
  • PCにPythonを導入済み(version 3.7以上)
  • Pulumiアカウント新規作成
  • AWSアカウントへのPulumiアクセス設定

Pulumi ESC CLIのインストール/ログイン

  1. Pulumi ESCをローカルの作業PCにインストールします。筆者の作業PCはmacOSですが、WindowsやLinuxへのインストールについてはこちらをご確認ください。
    $ brew update && brew install pulumi/tap/esc
  2. インストールが完了したらPulumi ESC CLIのログインを実施します。ログインアカウントはPulumiアカウントと同一です。
    $ esc login

OIDC(OpenID Connect)の設定

Pulumi ESCからプロバイダーへの認証方法は2通りあります。1つは前述した通り、Pulumi ESCと連携されているPulumi Cloudにあらかじめプロバイダーへの認証情報を格納してESCで認証する方法、もう1つはOIDCを利用して認証する方法です。前者はプロバイダー(AWS)側でクレデンシャル情報を発行する必要があるため、それを紛失した際のリスクを考慮するとOIDCを利用する方が好ましいです。ここでは、OIDCを利用するための設定を実施します。

  1. AWSマネジメントコンソールにログインして、[Identity and Access Management (IAM)] → [ID プロバイダ]に遷移します。
  2. [プロバイダを追加]から、以下の情報を入力(選択)していきます。プロバイダのURLを入力後は[サムプリントを取得]をクリックして、サムプリントを手元に保管しておきます。一通り完了したら、画面下部の[プロバイダを追加]をクリックします。
    • プロバイダのタイプ:OpenID Connect
    • プロバイダのURL:https://api.pulumi.com/oidc
    • 対象者:Pulumiアカウント名(組織名)
  3. プロバイダの作成が完了すると、自動的に前の画面へ遷移して「IAMロールを割り当てる必要があります」と表示されるので、画面上部の[ロールの割り当て]をクリックします。
  4. 「新しいロールを作成」を選択した状態で、[次へ]をクリックします。
  5. 「信頼されたエンティティを選択」画面で以下を選択して、[次へ]をクリックします。
    • 信頼されたエンティティタイプ:ウェブアイデンティティ
    • ウェブアイデンティティ - アイデンティティプロバイダー:api.pulumi.com/oidc
    • ウェブアイデンティティ - Audience:先ほど選択したPulumiアカウント名(組織名)
  6. 「許可を追加」画面では「AmazonS3FullAccess」ポリシーのみを選択した状態で、[次へ]をクリックします。
  7. 「名前、確認、および作成」画面では、ロール名に「pulumi-esc-oidc-role」を入力して[ロールを作成]をクリックします。
  8. ロールの作成が完了したら、ロールの詳細画面に移り、ロールのARNを控えておきます。
著者
大関 研丞 (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メルマガ会員のサービス内容を見る

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