

# 创建 Amazon S3 Storage Lens 存储统计管理工具控制面板
<a name="storage_lens_creating_dashboard"></a>

可以创建其它 S3 Storage Lens 存储统计管理工具自定义控制面板，其范围可以限定为涵盖 AWS Organizations 中您的组织，或者账户中的特定 AWS 区域或存储桶。

**注意**  
对控制面板配置所做的任何更新最长可能需要 48 小时才能准确显示或可视化。

## 使用 S3 控制台
<a name="storage_lens_console_creating"></a>

使用以下步骤在 Amazon S3 控制台中创建 Amazon S3 Storage Lens 存储统计管理工具控制面板。

**步骤 1：配置常规设置**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在页面顶部的导航栏中，选择当前所显示 AWS 区域的名称。接下来，选择要切换到的区域。

1. 在导航窗格中，在 **S3 Storage Lens 存储统计管理工具**下选择**控制面板**。

1. 选择**创建控制面板**。

1. 在**控制面板**页面的**常规**部分中，执行以下操作：

   1. 查看控制面板的**主区域**。主区域是在其中存储此 Storage Lens 存储分析功能控制面板的配置和指标的 AWS 区域。

   1. 输入控制面板名称。

      控制面板名称必须少于 65 个字符，且不得包含特殊字符或空格。
**注意**  
创建控制面板后，您无法更改此控制面板名称。

   1. 选择**启用**可在控制面板中显示更新的每日指标。

   1. （可选）您可以选择将**标签**添加到控制面板。您可以使用标签管理控制面板的权限并跟踪 S3 Storage Lens 存储统计管理工具的成本。有关更多信息，请参阅《IAM 用户指南》**中的[使用标签控制对 AWS 资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)以及《AWS Billing 用户指南》**中的[使用 AWS 生成的标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/aws-tags.html)。
**注意**  
您最多可以在控制面板配置中添加 50 个标签。

1. 选择**下一步**以保存您的更改并继续。

**步骤 2：定义控制面板范围**

1. 在**控制面板范围**部分，选择希望 S3 Storage Lens 存储统计管理工具在控制面板中包括或排除的区域和存储桶。

1. 在所选区域中选择希望 S3 Storage Lens 存储统计管理工具包括或排除的桶。您可以包括或排除桶，但不能同时包括和排除桶。创建组织级控制面板时，此选项不可用。
**注意**  
您可以包括或排除区域和桶。在组织中跨成员账户创建组织级控制面板时，此选项仅限于“区域”。
您最多可以选择 50 个桶来包括或排除。

1. 选择**下一步**以保存您的更改并继续。

**步骤 3：选择 Storage Lens 存储统计管理工具套餐**

1. 在 **Storage Lens 存储统计管理工具套餐**部分，选择要用于此控制面板的功能聚合套餐。

   1. 要包括在存储桶级别聚合且可在 14 天内供查询的免费指标，请选择**免费套餐**。

   1. 要启用高级指标，请选择**高级套餐**。这些选项包括前缀或 Storage Lens 组聚合、Amazon CloudWatch 发布、扩展前缀报告和情境化建议。数据可查询 15 个月。高级指标和建议需要额外付费。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

      有关高级指标和免费指标的更多信息，请参阅[指标选择](storage_lens_basics_metrics_recommendations.md#storage_lens_basics_metrics_selection)。

1. 在**高级指标类别**下，选择您要启用的指标类别：
   + **活动指标**
   + **Detailed status code metrics（详细的状态代码指标**
   + **成本优化指标**
   + **数据保护指标**
   + **性能指标**

   要预览每个类别中包含哪些指标，请使用指标类别复选框列表下方的下拉箭头按钮。有关指标类别的更多信息，请参阅[指标类别](storage_lens_basics_metrics_recommendations.md#storage_lens_basics_metrics_types)。要获得指标的完整列表，请参阅 [Amazon S3 Storage Lens 存储统计管理工具指标词汇表](storage_lens_metrics_glossary.md)。

1. 选择或指定**前缀分隔符**来区分每个前缀中的级别。此值用来标识每个前缀级别。Amazon S3 中的默认值为“`/`”字符，但是您的存储结构可能会使用其他分隔符字符。

1. 选择**下一步**以保存您的更改并继续。

**步骤 4：（可选）选择指标聚合**

1. 在**其他指标聚合**下，选择要聚合的指标：
   + Prefix aggregation（前缀聚合）
   + Storage Lens 组聚合

1. 如果您启用了**前缀聚合**，请为控制面板指定最小**前缀阈值**和**前缀深度**。然后选择**下一步**以保存并继续。
**注意**  
**前缀深度**设置决定 S3 Storage Lens 存储统计管理工具分析对象前缀的层次深度，最大限制为 10 级。**前缀阈值**指定一个前缀在存储总量中必须占有的最低百分比，只有超过该阈值的前缀才会包含在 Storage Lens 存储统计管理工具指标中。

1. 如果您已启用 **Storage Lens 组聚合**，请选择以下选项之一：
   + **包括 Storage Lens 组**
   + **排除 Storage Lens 组**

1. 当您在聚合中包括 Storage Lens 组时，您可以**包括主区域中的所有 Storage Lens 组**，也可以指定要包括的 Storage Lens 组。

1. 选择**下一步**以保存您的更改并继续。

**步骤 5：（可选）选择指标导出和发布设置**

1. 如果您想在 CloudWatch 控制面板中访问 Storage Lens 存储统计管理工具指标，请在**指标发布**下选择 **CloudWatch 发布**。
**注意**  
前缀级别的指标在 CloudWatch 中不可用。

1. 在**指标导出**下，选择要每天导出的 Storage Lens 存储统计管理工具控制面板数据：
   + **默认指标报告**
   + **扩展前缀指标报告**

1. （可选）如果您选择了**默认指标报告**，则在**默认指标报告**设置中，选择存储桶类型。您可以将报告导出到通用 Amazon S3 存储桶或 AWS 托管的 S3 表存储桶。根据所选存储桶类型，更新**通用存储桶目标设置**或**表存储桶目标设置**选项。
**注意**  
**默认指标报告**仅包含在前缀聚合设置中所设定的阈值和深度范围内的前缀。  
如果您选择指定加密密钥，则必须选择 AWS KMS 密钥（SSE-KMS）或 Amazon S3 托管密钥（SSE-S3）。如果您的目标存储桶策略要求加密，则必须为指标导出提供加密密钥。如果没有加密密钥，导出到 S3 会失败。有关更多信息，请参阅 [使用 AWS KMS key 加密您的指标导出](storage_lens_encrypt_permissions.md)。

1. （可选）如果您选择了**扩展前缀指标报告**，请在**扩展前缀指标报告**设置中，选择存储桶类型。您可以将报告导出到通用 Amazon S3 存储桶或只读 S3 表存储桶。根据所选存储桶类型，更新**通用存储桶目标设置**或**表存储桶目标设置**。
**注意**  
**扩展前缀指标报告**包括在控制面板范围内指定的所有选定存储桶中的所有前缀，前缀深度最多为 50 级。  
如果您选择指定加密密钥，则必须选择 AWS KMS 密钥（SSE-KMS）或 Amazon S3 托管密钥（SSE-S3）。如果您的目标存储桶策略要求加密，则必须为指标导出提供加密密钥。如果没有加密密钥，导出到 S3 会失败。有关更多信息，请参阅 [使用 AWS KMS key 加密您的指标导出](storage_lens_encrypt_permissions.md)。

1. 选择**下一步**以保存您的更改并继续。

1. 检查**查看并创建**页面上的所有内容。如果无需进行其他更改，请选择**下一步**以保存更改并创建控制面板。

**步骤 6：检查控制面板配置并创建控制面板**

1. 检查**常规**部分中的设置。选择**编辑**以进行任何更改。

1. 检查**控制面板范围**部分中的设置。选择**编辑**以进行任何更改。

1. 检查 **Storage Lens 存储统计管理工具套餐**部分中的设置。选择**编辑**以进行任何更改。

1. 检查**指标聚合**部分中的设置。选择**编辑**以进行任何更改。

1. 检查**指标导出**部分中的设置。选择**编辑**以进行任何更改。

1. 检查并确认所有控制面板配置设置后，选择**提交**以创建控制面板。

在您成功创建新的 Storage Lens 存储统计管理工具控制面板后，您可以在 Storage Lens 存储统计管理工具**控制面板**页面下查看列出的新控制面板。

## 使用 AWS CLI
<a name="S3PutStorageLensConfigurationTagsCLI"></a>

**Example**  
以下示例命令创建带标签的 Amazon S3 Storage Lens 存储统计管理工具配置。要使用这些示例，请将 `user input placeholders` 替换为您自己的信息。  

```
aws s3control put-storage-lens-configuration --account-id=111122223333 --config-id=example-dashboard-configuration-id --region=us-east-1 --storage-lens-configuration=file://./config.json --tags=file://./tags.json
```

**Example**  
以下示例命令创建不带标签的 Amazon S3 Storage Lens 存储统计管理工具配置。要使用这些示例，请将 `user input placeholders` 替换为您自己的信息。  

```
aws s3control put-storage-lens-configuration --account-id=222222222222 --config-id=your-configuration-id --region=us-east-1 --storage-lens-configuration=file://./config.json
```

## 使用适用于 Java 的 AWS SDK
<a name="S3CreateandUpdateStorageLensConfigurationJava"></a>

**Example – 创建和更新 Amazon S3 Storage Lens 存储统计管理工具配置**  
以下示例在适用于 Java 的 SDK 中创建和更新 Amazon S3 Storage Lens 存储统计管理工具配置：  

```
package aws.example.s3control;

import software.amazon.awssdk.awscore.exception.AwsServiceException;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3control.S3ControlClient;
import software.amazon.awssdk.services.s3control.model.AccountLevel;
import software.amazon.awssdk.services.s3control.model.ActivityMetrics;
import software.amazon.awssdk.services.s3control.model.AdvancedCostOptimizationMetrics;
import software.amazon.awssdk.services.s3control.model.AdvancedDataProtectionMetrics;
import software.amazon.awssdk.services.s3control.model.AdvancedPerformanceMetrics;
import software.amazon.awssdk.services.s3control.model.BucketLevel;
import software.amazon.awssdk.services.s3control.model.CloudWatchMetrics;
import software.amazon.awssdk.services.s3control.model.DetailedStatusCodesMetrics;
import software.amazon.awssdk.services.s3control.model.Format;
import software.amazon.awssdk.services.s3control.model.Include;
import software.amazon.awssdk.services.s3control.model.OutputSchemaVersion;
import software.amazon.awssdk.services.s3control.model.PrefixLevel;
import software.amazon.awssdk.services.s3control.model.PrefixLevelStorageMetrics;
import software.amazon.awssdk.services.s3control.model.PutStorageLensConfigurationRequest;
import software.amazon.awssdk.services.s3control.model.S3BucketDestination;
import software.amazon.awssdk.services.s3control.model.SSES3;
import software.amazon.awssdk.services.s3control.model.SelectionCriteria;
import software.amazon.awssdk.services.s3control.model.StorageLensAwsOrg;
import software.amazon.awssdk.services.s3control.model.StorageLensConfiguration;
import software.amazon.awssdk.services.s3control.model.StorageLensDataExport;
import software.amazon.awssdk.services.s3control.model.StorageLensDataExportEncryption;
import software.amazon.awssdk.services.s3control.model.StorageLensExpandedPrefixesDataExport;
import software.amazon.awssdk.services.s3control.model.StorageLensTableDestination;
import software.amazon.awssdk.services.s3control.model.StorageLensTag;

import java.util.Arrays;
import java.util.List;

public class CreateAndUpdateDashboard {

    public static void main(String[] args) {
        String configurationId = "ConfigurationId";
        String sourceAccountId = "111122223333";
        String exportAccountId = "Destination Account ID";
        String exportBucketArn = "arn:aws:s3:::destBucketName"; // The destination bucket for your metrics export must be in the same Region as your S3 Storage Lens configuration.
        String awsOrgARN = "arn:aws:organizations::123456789012:organization/o-abcdefgh";
        Format exportFormat = Format.CSV;

        try {
            SelectionCriteria selectionCriteria = SelectionCriteria.builder()
                    .delimiter("/")
                    .maxDepth(5)
                    .minStorageBytesPercentage(10.0)
                    .build();

            PrefixLevelStorageMetrics prefixStorageMetrics = PrefixLevelStorageMetrics.builder()
                    .isEnabled(true)
                    .selectionCriteria(selectionCriteria)
                    .build();

            BucketLevel bucketLevel = BucketLevel.builder()
                    .activityMetrics(ActivityMetrics.builder().isEnabled(true).build())
                    .advancedCostOptimizationMetrics(AdvancedCostOptimizationMetrics.builder().isEnabled(true).build())
                    .advancedDataProtectionMetrics(AdvancedDataProtectionMetrics.builder().isEnabled(true).build())
                    .advancedPerformanceMetrics(AdvancedPerformanceMetrics.builder().isEnabled(true).build())
                    .detailedStatusCodesMetrics(DetailedStatusCodesMetrics.builder().isEnabled(true).build())
                    .prefixLevel(PrefixLevel.builder().storageMetrics(prefixStorageMetrics).build())
                    .build();

            AccountLevel accountLevel = AccountLevel.builder()
                    .activityMetrics(ActivityMetrics.builder().isEnabled(true).build())
                    .advancedCostOptimizationMetrics(AdvancedCostOptimizationMetrics.builder().isEnabled(true).build())
                    .advancedPerformanceMetrics(AdvancedPerformanceMetrics.builder().isEnabled(true).build())
                    .advancedDataProtectionMetrics(AdvancedDataProtectionMetrics.builder().isEnabled(true).build())
                    .detailedStatusCodesMetrics(DetailedStatusCodesMetrics.builder().isEnabled(true).build())
                    .bucketLevel(bucketLevel)
                    .build();

            Include include = Include.builder()
                    .buckets(Arrays.asList("arn:aws:s3:::bucketName"))
                    .regions(Arrays.asList("us-west-2"))
                    .build();

            StorageLensDataExportEncryption exportEncryption = StorageLensDataExportEncryption.builder()
                    .sses3(SSES3.builder().build())
                    .build();

            S3BucketDestination s3BucketDestination = S3BucketDestination.builder()
                    .accountId(exportAccountId)
                    .arn(exportBucketArn)
                    .encryption(exportEncryption)
                    .format(exportFormat)
                    .outputSchemaVersion(OutputSchemaVersion.V_1)
                    .prefix("Prefix")
                    .build();

            StorageLensTableDestination s3TablesDestination = StorageLensTableDestination.builder()
                    .encryption(exportEncryption)
                    .isEnabled(true)
                    .build();

            CloudWatchMetrics cloudWatchMetrics = CloudWatchMetrics.builder()
                    .isEnabled(true)
                    .build();

            StorageLensDataExport dataExport = StorageLensDataExport.builder()
                    .cloudWatchMetrics(cloudWatchMetrics)
                    .s3BucketDestination(s3BucketDestination)
                    .storageLensTableDestination(s3TablesDestination)
                    .build();

            StorageLensAwsOrg awsOrg = StorageLensAwsOrg.builder()
                    .arn(awsOrgARN)
                    .build();

            StorageLensExpandedPrefixesDataExport expandedPrefixesDataExport = StorageLensExpandedPrefixesDataExport.builder()
                    .s3BucketDestination(s3BucketDestination)
                    .storageLensTableDestination(s3TablesDestination)
                    .build();

            StorageLensConfiguration configuration = StorageLensConfiguration.builder()
                    .id(configurationId)
                    .accountLevel(accountLevel)
                    .include(include)
                    .dataExport(dataExport)
                    .awsOrg(awsOrg)
                    .expandedPrefixesDataExport(expandedPrefixesDataExport)
                    .prefixDelimiter("/")
                    .isEnabled(true)
                    .build();

            List<StorageLensTag> tags = Arrays.asList(
                    StorageLensTag.builder().key("key-1").value("value-1").build(),
                    StorageLensTag.builder().key("key-2").value("value-2").build()
            );

            S3ControlClient s3ControlClient = S3ControlClient.builder()
                    .region(Region.US_WEST_2)
                    .credentialsProvider(ProfileCredentialsProvider.create())
                    .build();

            s3ControlClient.putStorageLensConfiguration(PutStorageLensConfigurationRequest.builder()
                    .accountId(sourceAccountId)
                    .configId(configurationId)
                    .storageLensConfiguration(configuration)
                    .tags(tags)
                    .build()
            );

        } catch (AwsServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it and returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

要访问 S3 Storage Lens 组或扩展前缀，您必须升级控制面板以使用高级套餐。将收取额外费用。有关免费和高级套餐的更多信息，请参阅[指标选择](storage_lens_basics_metrics_recommendations.md#storage_lens_basics_metrics_selection)。有关 S3 Storage Lens 组的更多信息，请参阅 [使用 S3 Storage Lens 组筛选和汇总指标](storage-lens-groups-overview.md)。