Merge pull request 'fix: open preview security groups by default' (#5) from fix/open-preview-security-groups into main
Deploy / Build (push) Successful in 34s
Deploy / Build and Push Docker Image (push) Successful in 1m12s

Reviewed-on: #5
This commit was merged in pull request #5.
This commit is contained in:
2026-07-26 19:12:24 +02:00
2 changed files with 23 additions and 23 deletions
+1 -1
View File
@@ -177,7 +177,7 @@ pp:previewId = <Preview.id>
**EC2 setup per preview:**
1. Generate an ephemeral RSA key pair. Store the private key encrypted in `Preview.sshPrivateKey`. Import the public key to AWS as `pp-preview-<previewId>` and store the name in `Preview.sshKeyName`.
2. Create a security group named `pp-preview-<previewId>` in the default VPC. Allow inbound: TCP 22 (SSH) and TCP `<port>` from `0.0.0.0/0`.
2. Create a security group named `pp-preview-<previewId>` in the default VPC. Allow inbound: all traffic from `0.0.0.0/0` and `::/0` (all protocols, including ICMP, and all ports).
3. Launch instance:
- AMI: Ubuntu 22.04 LTS (hardcode a per-region AMI map, or resolve via SSM `resolve:ssm:/aws/service/canonical/ubuntu/server/22.04/stable/current/amd64/hvm/ebs-gp2/ami-id`)
- Instance type from `RepoConfig.instanceType`
+22 -22
View File
@@ -84,7 +84,9 @@ export async function createPreviewSecurityGroup(ec2: EC2Client, groupName: stri
Filters: [{ Name: "group-name", Values: [groupName] }],
}));
if (describe.SecurityGroups && describe.SecurityGroups.length > 0) {
return describe.SecurityGroups[0].GroupId!;
const groupId = describe.SecurityGroups[0].GroupId!;
await ensurePreviewSecurityGroupOpen(ec2, groupId);
return groupId;
}
const res = await ec2.send(new CreateSecurityGroupCommand({
@@ -93,30 +95,28 @@ export async function createPreviewSecurityGroup(ec2: EC2Client, groupName: stri
}));
const groupId = res.GroupId!;
const ingress: any[] = [
{
IpProtocol: "tcp",
FromPort: 22,
ToPort: 22,
IpRanges: [{ CidrIp: "0.0.0.0/0" }],
},
];
if (port !== 22) {
ingress.push({
IpProtocol: "tcp",
FromPort: port,
ToPort: port,
IpRanges: [{ CidrIp: "0.0.0.0/0" }],
});
}
await ec2.send(new AuthorizeSecurityGroupIngressCommand({
GroupId: groupId,
IpPermissions: ingress,
}));
await ensurePreviewSecurityGroupOpen(ec2, groupId);
return groupId;
}
async function ensurePreviewSecurityGroupOpen(ec2: EC2Client, groupId: string): Promise<void> {
try {
await ec2.send(new AuthorizeSecurityGroupIngressCommand({
GroupId: groupId,
IpPermissions: [
{
IpProtocol: "-1",
IpRanges: [{ CidrIp: "0.0.0.0/0" }],
Ipv6Ranges: [{ CidrIpv6: "::/0" }],
},
],
}));
} catch (e: any) {
if (e.name === "InvalidPermission.Duplicate") return;
throw e;
}
}
const BOOTSTRAP_SCRIPT = `#!/bin/bash
set -euo pipefail
exec > >(tee -a /var/log/pp-bootstrap.log) 2>&1