在 CDK 部署上重新创建 EC2

问题描述

我们所有的堆栈资源都在 VPC 内运行,因此为了访问它们,我们使用堡垒主机,这是一个简单的 EC2 实例,用于创建进入 VPC 的 SSH 隧道。

然后我们将 SSH 密钥添加到主机,但在部署我们的 CDK 堆栈时,EC2 似乎不时被新密钥替换。然后我们每次都必须重新添加我们的 SSH 密钥。

有没有办法不重新创建 EC2 实例?

我们的代码

export default class FooStack extends Stack {
    constructor(scope: App,id: string,props?: StackProps) {
        super(scope,id,props);

        const vpc = this.createVPC();
        const bastionSecurityGroup = this.createBastionSecurityGroup(vpc);
        this.createBastionHost(bastionSecurityGroup,vpc);
    }

    private createVPC() {
        const vpc = new Vpc(this,'Vpc',{ natGateways: 1 });
        return vpc;
    }

    private createBastionSecurityGroup(vpc: Vpc) {
        const bastionSecurityGroup = new SecurityGroup(this,'BastionSecurityGroup',{ vpc,allowAllOutbound: true });
        bastionSecurityGroup.connections.allowFrom(
            bastionSecurityGroup,Port.allTraffic(),'Allow inbound traffic to the Bastion Host from its security group',);
        bastionSecurityGroup.addIngressRule(
            Peer.anyIpv4(),Port.tcp(22),'Allow inbound traffic to the Bastion Host on port 22.',);
        return bastionSecurityGroup;
    }

    private createBastionHost(securityGroup: SecurityGroup,vpc: Vpc) {
        new BastionHostLinux(this,'BastionHost',{
            vpc,instanceType: InstanceType.of(InstanceClass.T3,InstanceSize.NANO),securityGroup,subnetSelection: vpc.selectsubnets({ subnets: [vpc.publicsubnets[0]] }),});
    }
}

解决方法

问题是我没有指定 AMI(亚马逊机器映像)。 因此,每次发布新版本的镜像时,都会在部署时重新创建实例。