2 min read | by Jordi Prats
Pulumi is a powerful infrastructure as code tool that allows developers to deploy and manage cloud resources using familiar programming languages. However, when it comes to using Pulumi with LocalStack, there are some changes that need to be made to make Pulumi be able to reach LocalStack.
We will be utilizing the following Golang code (full project available in github) to create an S3 bucket on AWS, although our intention is to use it to create a bucket on LocalStack:
package main import ( "github.com/pulumi/pulumi-aws/sdk/v4/go/aws/s3" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) func main() { pulumi.Run(func(ctx *pulumi.Context) error { bucket, err := s3.NewBucket(ctx, "my-bucket", nil) if err != nil { return err } ctx.Export("bucketName", bucket.Bucket) return nil }) }
In order to configure pulumi to reach LocalStack we'll have to edit the Pulumi.test.yaml file with the following:
config: aws:region: us-east-1 aws:accessKey: test aws:secretKey: test aws:endpoints: - s3: http://localhost:4566 - cloudwatch: http://localhost:4566 - cloudwatchlogs: http://localhost:4566 - dynamodb: http://localhost:4566 - iam: http://localhost:4566 - lambda: http://localhost:4566 - secretsmanager: http://localhost:4566 - sns: http://localhost:4566 - sqs: http://localhost:4566 aws:s3_force_path_style: true aws:skipCredentialsValidation: true aws:skipRequestingAccountId: true
For this example we just really need the s3 endpoint. With this file updated, we can use pulumi up as usual:
$ pulumi up Previewing update (test) View in Browser (Ctrl+O): https://app.pulumi.com/jordiprats/s3-demo/test/previews/17671359-b569-449a-ac12-6be5bb15c33b Type Name Plan pulumi:pulumi:Stack s3-demo-test + └─ aws:s3:Bucket my-bucket create Outputs: + bucketName: "my-bucket-0035d8a" Resources: + 1 to create 1 unchanged Do you want to perform this update? yes Updating (test) View in Browser (Ctrl+O): https://app.pulumi.com/jordiprats/s3-demo/test/updates/2 Type Name Status pulumi:pulumi:Stack s3-demo-test + └─ aws:s3:Bucket my-bucket created (0.41s) Outputs: + bucketName: "my-bucket-d016c02" Resources: + 1 created 1 unchanged Duration: 4s
We can validate that it has created the S3 bucket using LocalStack by checking it with awslocal:
$ awslocal s3 ls 2023-04-22 12:02:34 my-bucket-d016c02
Posted on 25/04/2023