はじめに

普段はTerraformを利用していますが、PulumiだったりSDKだったり、汎用言語を使ってAWSリソースを作ってみたかったのでやってみました。
言語は現在勉強しているGoを使いました。

Pulumiを導入してみる

Macで開発しているのでbrew installしました。

brew install pulumi

チュートリアル

https://www.pulumi.com/docs/get-started/aws/
このページにチュートリアルがあるのでこのガイドに従ってやっていきました(内容は割愛します)

試し書き

チュートリアルでS3バケットを作ることができました。
ということで、試しに公式Docを読みながらVPCを1つ作成してみます。

  1. コードを準備する
package main

import (
	"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ec2"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		vpc, err := ec2.NewVpc(ctx, "example_vpc", &ec2.VpcArgs{
			CidrBlock: pulumi.String("10.100.0.0/16"),
			Tags: pulumi.StringMap{
				"Name": pulumi.String("example_vpc"),
			},
		})
		if err != nil {
			return err
		}

        ctx.Export("vpcid: ", vpc.ID())
        return nil
	})
}
  1. pulumi previewで見てみる
    pulumi previewを実行し、作成できるか確認してみます。
> pulumi preview
Previewing update (dev)

View Live: https://app.pulumi.com/xxx

     Type                 Name            Plan       
 +   pulumi:pulumi:Stack  TestPulumi-dev  create     
 +   └─ aws:ec2:Vpc       example_vpc     create     
 
Resources:
    + 2 to create
  1. pulumi upで実際に作成する
> pulumi up
Previewing update (dev)

View Live: https://app.pulumi.com/xxx

     Type                 Name            Plan       
 +   pulumi:pulumi:Stack  TestPulumi-dev  create     
 +   └─ aws:ec2:Vpc       example_vpc     create     
 
Resources:
    + 2 to create

Do you want to perform this update? yes
Updating (dev)

View Live: https://app.pulumi.com/xxx

     Type                 Name            Status      
 +   pulumi:pulumi:Stack  TestPulumi-dev  created     
 +   └─ aws:ec2:Vpc       example_vpc     created     
 
Outputs:
    vpcid: : "vpc-0b8a7faf1fb502f03"

Resources:
    + 2 created

Duration: 6s
  1. コンソール上で確認してみる
    無事にできていることがわかりました。 AWSコンソールでの確認結果

まとめ

Terraformと似たような感じで書けるので、そこまで苦労しませんでした。
次の記事では実際にEC2 - ALBでのWebサーバを構築していきます。