はじめに
Pulumi AIが利用できるようになり、Pulumiというサービスが気になったので、Pulumiのチュートリアルを触ってみます。
以下の流れで、Pulumiを利用し、AWSにリソースをデプロイします。
- AWSアカウントにアクセスするためのPulumiのセットアップと設定。
- 新しいPulumiプロジェクトを作成する。(yamlを使用)
- 新しいAWS S3バケットをプロビジョニングします。
- バケットにindex.htmlファイルを追加し、静的ウェブサイトとして提供します。
- プロビジョニングしたリソースを破棄して、デプロイメントをクリーンアップします。
事前準備
- AWSのアクセスキーとシークレットキーを取得しておく
Pulumi プロジェクトの作成
Macの場合、Homebrewをインストール済みであれば、terminalに以下のコマンドで Pulumiをインストールします
$ brew install pulumi/tap/pulumi
Pulumi 用のディレクトリを作成後、pulumi new aws-yaml
で、Pulumiのプロジェクトをyamlで作成します。
Pulumiのアカウントを作成していない場合、エンターを押した後、ブラウザに遷移し、アカウント作成をする必要があります。
$ mkdir quickstart && cd quickstart
quickstart/ $ pulumi new aws-yaml
Manage your Pulumi stacks by logging in.
Run `pulumi login --help` for alternative login options.
Enter your access token from https://app.pulumi.com/account/tokens
or hit <ENTER> to log in using your browser :
ちなみに、pulumi new aws-yaml
を実行する際、実行時内のディレクトリは、空でなければエラーになります
quickstart/ $ error: /xxxx/quickstart is not empty; rerun in an empty directory, pass the path to an empty directory to --dir, or use --force
アカウント作成後、terminalに戻ると、以下の4つを入力することを求められますので、それぞれ入力しました
- プロジェクト名
- quickstart
- プロジェクトの概要文
- Test
- スタック名
- dev
- デプロイしたいリージョン
- ap-northeast-1
今回は、以下を入力しました
project name: (quickstart) quickstart
project description: (A minimal AWS Pulumi YAML program) Test
Created project 'quickstart'
Please enter your desired stack name.
To create a stack in an organization, use the format <org-name>/<stack-name> (e.g. `acmecorp/dev`).
stack name: (dev) dev
Created stack 'dev'
aws:region: The AWS region to deploy into: (us-east-1) ap-northeast-1
作成されたファイル
pulumi new aws-yaml
を実行し作成されたファイルは2つです。
- Pulumi.yaml
- リソースを管理するプロジェクトとプログラムの両方を定義します。
- Pulumi.dev.yaml
- 初期化したばかりのスタックの構成値が含まれています。
Pulumi.yaml
name: quickstart
runtime: yaml
description: Test
outputs:
# Export the name of the bucket
bucketName: ${my-bucket.id}
resources:
# Create an AWS resource (S3 Bucket)
my-bucket:
type: aws:s3:Bucket
Pulumi.dev.yaml
config:
aws:region: ap-northeast-1
Pulumi.yamlのコードの内容は、新しい S3 バケットを作成し、バケットの名前をエクスポートするようです。
スタックをデプロイ
事前に作成したアクセスキーとシークレットキーが設定されていることを確認し、pulumi up
でスタックをデプロイします。
Do you want to perform this update?
と聞かれると以下の3つの選択肢がでますので、yes
を選択します。
- details
- 変更点の差分が表示されます
- yes
- スタックをデプロイします
- no
- 更新操作を実行せずにユーザープロンプトに戻ります
$ aws configure
AWS Access Key ID [None]: XXXX
AWS Secret Access Key [None]: XXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]:
quickstart/ $ pulumi up
Do you want to perform this update? yes
Updating (dev)
View in Browser (Ctrl+O): https://app.pulumi.com/HiraiYuji/quickstart/dev/updates/3
Type Name Status
pulumi:pulumi:Stack quickstart-dev
+ └─ aws:s3:Bucket my-bucket created (2s)
Outputs:
+ bucketName: "my-bucket-584944b"
Resources:
+ 1 created
1 unchanged
Duration: 3s
my-bucket-584944b
というバケット名で作成されました
Outputsの内容は、下記コマンドで確認できます。
quickstart/ $ pulumi stack output bucketName
my-bucket-584944b
スタックの変更
スタックを変更します。
まず、S3バケットに追加するindex.htmlを追加します。
quickstart/ $ echo '<html>
<body>
<h1>Hello, Pulumi!</h1>
</body>
</html>' > index.html
index.htmlをS3バケットに追加するためには、PulumiのFileAssetリソースを使用します
Pulumi.yamlファイルを以下に書き換えます。
name: quickstart
runtime: yaml
description: Test
resources:
my-bucket:
type: aws:s3:Bucket
index.html:
type: aws:s3:BucketObject
properties:
bucket: ${my-bucket}
source:
fn::fileAsset: ./index.html
outputs:
bucketName: ${my-bucket.id}
このバケットオブジェクトは、バケットオブジェクトのプロパティでバケット名を参照しているため(14行目)、先程デプロイしたBucketの一部となります。
次に、変更した内容をデプロイします。
quickstart/ $ pulumi up
indexl.htmlが追加されていました。
quickstart/ $ aws s3 ls $(pulumi stack output bucketName)
2023-04-23 11:50:33 70 index.html
静的ウェブサイトに変更
インターネット上でアクセスできるようにするための調整を行います。
Pulumi.yamlファイルを以下に書き換えます。
Pulumi.yaml
name: quickstart
runtime: yaml
description: A minimal AWS Pulumi YAML program
resources:
my-bucket:
type: aws:s3:Bucket
properties:
website:
indexDocument: index.html
ownership-controls:
type: aws:s3:BucketOwnershipControls
properties:
bucket: ${my-bucket.id}
rule:
objectOwnership: ObjectWriter
public-access-block:
type: aws:s3:BucketPublicAccessBlock
properties:
bucket: ${my-bucket.id}
blockPublicAcls: false
index.html:
type: aws:s3:BucketObject
properties:
bucket: ${my-bucket.id}
source:
fn::fileAsset: ./index.html
contentType: text/html
acl: public-read
options:
dependsOn:
- ${public-access-block}
outputs:
bucketName: ${my-bucket.id}
bucketEndpoint: http://${my-bucket.websiteEndpoint}
デプロイし、アクセスすると、index.htmlがレスポンスされることを確認できました!
quickstart/ $ pulumi up
quickstart/ $ curl $(pulumi stack output bucketEndpoint)
<html>
<body>
<h1>Hello, Pulumi!</h1>
</body>
</html>
スタックを削除する
スタックを下記コマンドで削除できる
quickstart/ $ pulumi destroy
バケットは、削除されました。
スタック内のリソースは削除されましたが、スタックに関連付けられた履歴と構成は引き続き維持されます。
スタックを完全に削除したい場合は、pulumi stack rm dev
を実行します。
quickstart/ $ pulumi stack rm dev
This will permanently remove the 'dev' stack!
Please confirm that this is what you'd like to do by typing `dev`: dev
Stack 'dev' has been removed!
最後に
チュートリアルの説明通りに進めることで、特に詰まることなくデプロイまで体験することができました。
次は、Pulumi AIを触ってみたいと思います!
Pulumi AIを試したブログを作成しました。興味があれば一読ください、