diff --git a/examples/aws-ec2-pulumi/package.json b/examples/aws-ec2-pulumi/package.json new file mode 100644 index 000000000..1a1e490d1 --- /dev/null +++ b/examples/aws-ec2-pulumi/package.json @@ -0,0 +1,20 @@ +{ + "name": "aws-ec2-pulumi", + "version": "1.0.0", + "description": "", + "type": "module", + "main": "index.js", + "scripts": { + "deploy": "go run ../../cmd/sst deploy", + "remove": "go run ../../cmd/sst remove", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "sst": "3.0.1-7" + }, + "dependencies": { + } +} diff --git a/examples/aws-ec2-pulumi/sst.config.ts b/examples/aws-ec2-pulumi/sst.config.ts new file mode 100644 index 000000000..80bd2118a --- /dev/null +++ b/examples/aws-ec2-pulumi/sst.config.ts @@ -0,0 +1,59 @@ +/// + +/** + * ## EC2 (using Pulumi) example + * + * Use raw pulumi code to create an EC2 instance. + */ +export default $config({ + app(input) { + return { + name: "aws-ec2-pulumi", + home: "aws", + removal: input?.stage === "production" ? "retain" : "remove", + }; + }, + async run() { + // Notice you don't need to import pulumi, it is already part of sst. + const securityGroup = new aws.ec2.SecurityGroup("web-secgrp", { + ingress: [ + { + protocol: "tcp", + fromPort: 80, + toPort: 80, + cidrBlocks: ["0.0.0.0/0"], + }, + ], + }); + + // Find the latest Ubuntu AMI + const ami = aws.ec2.getAmi({ + filters: [ + { + name: "name", + values: ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"], + }, + ], + mostRecent: true, + owners: ["099720109477"], // Canonical + }); + + // User data to set up a simple web server + const userData = `#!/bin/bash + echo "Hello, World!" > index.html + nohup python3 -m http.server 80 &`; + + // Create an EC2 instance + const server = new aws.ec2.Instance("web-server", { + instanceType: "t2.micro", + ami: ami.then((ami) => ami.id), + userData: userData, + vpcSecurityGroupIds: [securityGroup.id], + associatePublicIpAddress: true, + }); + + return { + app: server.publicIp, + }; + }, +});