终止 AWS Elastic Beanstalk 环境

Terminating AWS Elastic Beanstalk environment

我想终止我的 AWS Elastic Beanstalk 环境,但我想保留与该环境关联的 RDS 数据库实例的快照。

我已经成功创建了相关 RDS 数据库的快照,但是当我去终止 Elastic Beanstalk 环境时,它说这样做会:

使用快照终止有问题的数据库

这是否意味着我创建的快照将与数据库实例一起被删除?如果是这样,如何避免快照被删除?

Elastic Beanstalk 在后台使用 CloudFormation 来配置您的环境。 CloudFormation 的工作原理是它有一个堆栈,其中包含它创建的所有资源,一旦您删除了 Beanstalk 环境,该堆栈就会被删除。因此,它将删除属于您的堆栈的所有资源。您可以在控制台中转到 CloudFormation,然后查看它。

如果您手动创建数据库快照,它将位于 CloudFormation 堆栈之外,因此不会被删除。

但是,作为 Beanstalk 环境设置的一部分,您的数据库会有一些自动备份。当您终止环境时,这些将被删除。

这是我的测试环境堆栈:

$ aws cloudformation describe-stack-resources --stack-name awseb-e-jjqgv3nwgp-stack --profile=personal
{
    "StackResources": [
        [...],
        {
            "StackName": "awseb-e-jjqgv3nwgp-stack",
            "StackId": "arn:aws:cloudformation:eu-central-1:[my_account]:stack/awseb-e-jjqgv3nwgp-stack/f21c2e00-ea6d-11eb-9f61-02ad9e7e97f6",
            "LogicalResourceId": "AWSEBRDSDBSecurityGroup",
            "PhysicalResourceId": "awseb-e-jjqgv3nwgp-stack-AWSEBRDSDBSecurityGroup-1SDABJ60VF7G8",
            "ResourceType": "AWS::EC2::SecurityGroup",
            "Timestamp": "2021-07-21T21:52:52.931000+00:00",
            "ResourceStatus": "CREATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "NOT_CHECKED"
            }
        },
        {
            "StackName": "awseb-e-jjqgv3nwgp-stack",
            "StackId": "arn:aws:cloudformation:eu-central-1:[my_account]:stack/awseb-e-jjqgv3nwgp-stack/f21c2e00-ea6d-11eb-9f61-02ad9e7e97f6",
            "LogicalResourceId": "AWSEBRDSDatabase",
            "PhysicalResourceId": "aa1v9kyuepq8x1c",
            "ResourceType": "AWS::RDS::DBInstance",
            "Timestamp": "2021-07-21T21:59:24.817000+00:00",
            "ResourceStatus": "CREATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "NOT_CHECKED"
            }
        },
        [...]
    ]
}

这是我的 RDS 快照:

$ aws rds describe-db-snapshots --profile=personal
{
    "DBSnapshots": [
        {
            "DBSnapshotIdentifier": "foobar-snapshot-test",
            "DBInstanceIdentifier": "aa1v9kyuepq8x1c",
            "SnapshotCreateTime": "2021-07-21T22:09:03.752000+00:00",
            "Engine": "mysql",
            "AllocatedStorage": 5,
            "Status": "available",
            "Port": 3306,
            "AvailabilityZone": "eu-central-1a",
            "VpcId": "vpc-128d5178",
            "InstanceCreateTime": "2021-07-21T21:56:51.205000+00:00",
            "MasterUsername": "foo",
            "EngineVersion": "8.0.23",
            "LicenseModel": "general-public-license",
            "SnapshotType": "manual",
            "OptionGroupName": "default:mysql-8-0",
            "PercentProgress": 100,
            "StorageType": "standard",
            "Encrypted": false,
            "DBSnapshotArn": "arn:aws:rds:eu-central-1:[my_account]:snapshot:foobar-snapshot-test",
            "IAMDatabaseAuthenticationEnabled": false,
            "ProcessorFeatures": [],
            "DbiResourceId": "db-PFQFQBRFBELDWUQTONIPRJRVCU",
            "TagList": []
        },
        {
            "DBSnapshotIdentifier": "rds:aa1v9kyuepq8x1c-2021-07-21-21-57",
            "DBInstanceIdentifier": "aa1v9kyuepq8x1c",
            "SnapshotCreateTime": "2021-07-21T21:57:05.277000+00:00",
            "Engine": "mysql",
            "AllocatedStorage": 5,
            "Status": "available",
            "Port": 3306,
            "AvailabilityZone": "eu-central-1a",
            "VpcId": "vpc-128d5178",
            "InstanceCreateTime": "2021-07-21T21:56:51.205000+00:00",
            "MasterUsername": "foo",
            "EngineVersion": "8.0.23",
            "LicenseModel": "general-public-license",
            "SnapshotType": "automated",
            "OptionGroupName": "default:mysql-8-0",
            "PercentProgress": 100,
            "StorageType": "standard",
            "Encrypted": false,
            "DBSnapshotArn": "arn:aws:rds:eu-central-1:[my_account]:snapshot:rds:aa1v9kyuepq8x1c-2021-07-21-21-57",
            "IAMDatabaseAuthenticationEnabled": false,
            "ProcessorFeatures": [],
            "DbiResourceId": "db-PFQFQBRFBELDWUQTONIPRJRVCU",
            "TagList": []
        }
    ]
}

因此,我们有一个自动快照和一个手动快照。

删除应用后,CloudFormation堆栈被移除,剩下的是手动快照,但自动快照已被删除:

$ aws rds describe-db-snapshots --profile=personal
{
    "DBSnapshots": [
        {
            "DBSnapshotIdentifier": "foobar-snapshot-test",
            "DBInstanceIdentifier": "aa1v9kyuepq8x1c",
            "SnapshotCreateTime": "2021-07-21T22:09:03.752000+00:00",
            "Engine": "mysql",
            "AllocatedStorage": 5,
            "Status": "available",
            "Port": 3306,
            "AvailabilityZone": "eu-central-1a",
            "VpcId": "vpc-128d5178",
            "InstanceCreateTime": "2021-07-21T21:56:51.205000+00:00",
            "MasterUsername": "foo",
            "EngineVersion": "8.0.23",
            "LicenseModel": "general-public-license",
            "SnapshotType": "manual",
            "OptionGroupName": "default:mysql-8-0",
            "PercentProgress": 100,
            "StorageType": "standard",
            "Encrypted": false,
            "DBSnapshotArn": "arn:aws:rds:eu-central-1:[my_account]:snapshot:foobar-snapshot-test",
            "IAMDatabaseAuthenticationEnabled": false,
            "ProcessorFeatures": [],
            "DbiResourceId": "db-PFQFQBRFBELDWUQTONIPRJRVCU",
            "TagList": []
        }
    ]
}

在终止 Beanstalk 上的任何内容之前,您始终可以仔细检查您的 RDS 快照以确保那里有手动快照。