「Pulumi Automation API」でPulumi CLIの機能をコード化しよう

2023年8月8日(火)
大関 研丞 (Kenneth Ozeki)
第6回となる今回は、Automation APIの概要を解説し、実際にAutomation APIを使ったRESTful APIの静的Webサーバーを構築するハンズオンを実践していきます。

動作確認

Webアプリケーションの作成と準備が整ったので、実際にHTTPリクエストを投げて、コンテンツが作成されるか確認します。HTTPサーバーを起動するターミナル(①)、HTTPリクエストを投げるターミナル(②)の2つのターミナルを用意します。

・HTTPサーバーの起動
1. FlaskでHTTPサーバーを起動します。portは1337に指定します。

①
$ pwd   
/****/pulumi_over_http 

$ FLASK_RUN_PORT=1337 FLASK_ENV=development venv/bin/flask run

問題がなければ、以下のようなメッセージが表示されます。以後、HTTPリクエストを受け付けるたびにログが出力されます。

①
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:1337/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 328-006-235

・コンテンツ新規作成
2. 別のターミナルを起動して、先ほど起動したHTTPサーバーにHTTPリクエストを投げます。「--data」に続くjsonでは、コンテンツのID=Stackの名前となる「id」とコンテンツの内容「content」をそれぞれ用意します。

②
$ curl --header "Content-Type: application/json"   --request POST   --data '{"id":"hello","content":"hello world¥n"}'   http://localhost:1337/sites

HTTPサーバーを起動しているターミナル側では、設定に問題がなければ自動的にpulumi upが実行されている様子がログとして出力されます。

①
Updating (*/hello)


View Live: https://app.pulumi.com/*/pulumi_over_http/hello/updates/1


 +  pulumi:pulumi:Stack pulumi_over_http-hello creating (0s)
@ Updating......
 +  aws:s3:Bucket s3-website-bucket creating (0s)
@ Updating......
 +  aws:s3:Bucket s3-website-bucket created (2s)
 +  aws:s3:BucketPublicAccessBlock bucket-public-access-block creating (0s)
 +  aws:s3:BucketObject index creating (0s)
 +  aws:s3:BucketPolicy bucket-policy creating (0s)
@ Updating....
 +  aws:s3:BucketObject index created (0.75s)
 +  aws:s3:BucketPublicAccessBlock bucket-public-access-block created (0.76s)
@ Updating....
 +  aws:s3:BucketPolicy bucket-policy created (1s)
@ Updating.....
 +  pulumi:pulumi:Stack pulumi_over_http-hello created (6s)

Outputs:
    website_url: "s3-website-bucket-*******.s3-website-ap-northeast-1.amazonaws.com"

Resources:
    + 5 created

Duration: 9s

127.0.0.1 - - [27/Jul/2023 13:29:56] "POST /sites HTTP/1.1" 200 -

HTTPサーバー側の処理が完了し、HTTPリクエストを投げたターミナルに戻ると、コンテンツのURLが出力されていることを確認できます。

②
$ curl --header "Content-Type: application/json"   --request POST   --data '{"id":"hello","content":"hello world¥n"}'   http://localhost:1337/sites
{
  "id": "hello", 
  "url": "s3-website-bucket-*******.s3-website-ap-northeast-1.amazonaws.com"
}

3. コンテンツのURLにcurlでアクセスすると、無事コンテンツの内容が返ってくることを確認できます。

②
$ curl s3-website-bucket-*******.s3-website-ap-northeast-1.amazonaws.com
—
hello world

4. さらに別のコンテンツを作成します。「--data」に続くjsonの「id」を「bye」に変えて、また「content」を「good bye¥n」に変えて再度HTTPリクエストを投げます。

②
$ curl --header "Content-Type: application/json"   --request POST   --data '{"id":"bye","content":"good bye¥n"}'   http://localhost:1337/sites

先ほどと同様に、再度HTTPサーバー側のターミナルでpulumi upが実行されています。Automation APIにより、ユーザー独自のインフラ(Bucket/コンテンツ)を自由に作成/スケールできる様子がわかります。

①
Updating (*/bye)


View Live: https://app.pulumi.com/*/pulumi_over_http/bye/updates/1


 +  pulumi:pulumi:Stack pulumi_over_http-bye creating (0s)
@ Updating.....
 +  aws:s3:Bucket s3-website-bucket creating (0s)
@ Updating........
 +  aws:s3:Bucket s3-website-bucket created (4s)
@ Updating....
 +  aws:s3:BucketPublicAccessBlock bucket-public-access-block creating (0s)
 +  aws:s3:BucketObject index creating (0s)
 +  aws:s3:BucketPolicy bucket-policy creating (0s)
@ Updating....
 +  aws:s3:BucketObject index created (0.74s)
 +  aws:s3:BucketPublicAccessBlock bucket-public-access-block created (1s)
 +  aws:s3:BucketPolicy bucket-policy created (1s)
@ Updating....
 +  pulumi:pulumi:Stack pulumi_over_http-bye created (7s)

Outputs:
    website_url: "s3-website-bucket-*******.s3-website-ap-northeast-1.amazonaws.com"

Resources:
    + 5 created

Duration: 11s

127.0.0.1 - - [27/Jul/2023 13:56:38] "POST /sites HTTP/1.1" 200 -

5. 先ほどと同様にコンテンツのURLにcurlでアクセスすると、idをbyeで作成したコンテンツも無事に返ってくることを確認できます。

②
$ curl s3-website-bucket-*******.s3-website-ap-northeast-1.amazonaws.com
—
good bye
著者
大関 研丞 (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メルマガ会員のサービス内容を見る

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