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