「Pulumi Automation API」でPulumi CLIの機能をコード化しよう
動作確認
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
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- PulumiでAWSリソースをデプロイしよう
- TerraformからPulumiへの移行
- 既に存在するリソースをPulumiで管理してみよう
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう
- Pulumi Kubernetes Operatorを活用してPulumiのCI/CDを実現しよう
- 「Pulumi Stack」とは ー Pulumiによるマルチステージ環境の構築方法
- SecretもPulumiで使いこなしたい! PulumiのSecurityを試してみよう
- Pulumiの最新機能「Pulumi ESC」を使ってみよう
- Oracle Cloud Hangout Cafe Season7 #2「IaC のベストプラクティス」(2023年7月5日開催)
- CloudサービスとRPAの連携