管理 Amazon OpenSearch Service 中的自定义插件 - Amazon OpenSearch Service

管理 Amazon OpenSearch Service 中的自定义插件

使用 OpenSearch Service 的自定义插件,您可以在语言分析、自定义筛选、排名等领域扩展 OpenSearch 功能,已打造个性化的搜索体验。OpenSearch 的自定义插件可以通过扩展 org.opensearch.plugins.Plugin 类并将其打包到 .zip 文件中以实现开发。

Amazon OpenSearch Service 当前支持以下插件扩展:

  • AnalysisPlugin:通过添加自定义分析器、字符分词器或用于文本处理的筛选器等,扩展分析功能。

  • SearchPlugin:通过自定义查询类型、相似度算法、建议选项和聚合增强搜索功能。

  • MapperPlugin:允许您在 OpenSearch 中创建自定义字段类型及其映射配置,从而能够定义不同类型数据的存储和索引方式。

  • ScriptPlugin:允许您向 OpenSearch 添加自定义脚本功能,例如在搜索或索引过程中为评分、排序和字段值转换等操作编写自定义脚本。

您可以使用 OpenSearch Service 控制台或现有 API 命令为自定义软件包上传插件,并将插件关联到 Amazon OpenSearch Service 集群。您还可以使用 DescribePackages 命令描述账户中的所有程序包,并查看 OpenSearch 版本和错误详情等详细信息。OpenSearch Service 对插件包进行验证,以确保版本兼容性、安全漏洞以及允许的插件操作。有关自定义程序包的更多信息,请参阅 在 Amazon OpenSearch Service 中导入和管理软件程序包

OpenSearch 版本和 AWS 区域 支持

在以下 AWS 区域 运行 OpenSearch 2.15 版本的 OpenSearch Service 域支持自定义插件:

  • 美国东部(俄亥俄州)(us-east-2)

  • 美国东部(弗吉尼亚北部)(us-east-1)

  • 美国西部(俄勒冈州)(us-west-2)

  • 亚太地区(孟买)(ap-south-1)

  • 亚太地区(首尔)(ap-northeast-2)

  • 亚太地区(新加坡)(ap-southeast-1)

  • 亚太地区(悉尼)(ap-southeast-2)

  • 亚太地区(东京)(ap-northeast-1)

  • 加拿大(中部)(ca-central-1)

  • 欧洲地区(法兰克福)(eu-central-1)

  • 欧洲地区(爱尔兰)(eu-west-1)

  • 欧洲地区(伦敦)(eu-west-2)

  • 欧洲地区(巴黎)(eu-west-3)

  • 南美洲(圣保罗)(sa-east-1)

注意

自定义插件包含用户开发的代码。任何由用户开发代码导致的问题(包括违反 SLA)均不符合 SLA 积分的适用条件。有关更多信息,请参见 Amazon OpenSearch Service 服务等级协议

插件限额

  • 每个账户在每个区域最多可创建 25 个自定义插件。

  • 插件的最大未压缩大小为 1 GB。

  • 单个域最多可关联 20 个插件。此限额适用于所有插件类型的组合:可选插件、第三方插件和自定义插件。

  • 在运行 OpenSearch 版本 2.15 或更高版本的域上支持自定义插件。

  • 插件的 descriptor.properties 文件必须支持类似于 2.15.0 的引擎版本,或任何 2.x.x 版本,其中补丁版本设置为零。

先决条件

在安装自定义插件并将其关联到域名之前,请确保满足以下要求:

  • descriptor.properties 文件中插件支持的引擎版本应类似于 2.15.02.x.0。也就是说,补丁版本必须为零。

  • 您的域必须启用以下功能:

    • 节点到节点加密

    • 静态加密

    • EnforceHTTPS 设置为 'true'

      另请参阅《AWS Config 开发人员指南》中的 opensearch-https-required

    • 客户端必须支持 Policy-Min-TLS-1-2-PFS-2023-10。您可以使用以下命令指定此支持。将占位符值替换为您自己的信息:

      aws opensearch update-domain-config \ --domain-name domain-name \ --domain-endpoint-options '{"TLSSecurityPolicy":"Policy-Min-TLS-1-2-PFS-2023-10" }'

      有关更多信息,请参阅《Amazon OpenSearch Service API 参考》中的 DomainEndpointOptions

故障排除

如果系统返回错误 PluginValidationFailureReason : The provided plugin could not be loaded,请参阅 自定义插件安装因版本兼容性问题而失败 以获取故障排除信息。

使用控制台安装自定义插件

要将第三方插件与域关联,请先将插件许可证和配置作为程序包导入。

安装自定义插件
  1. 登录到位于 https://console.aws.amazon.com/aos/home 的 Amazon OpenSearch Service 控制台。

  2. 在左侧导航窗格中,选择程序包

  3. 选择导入程序包

  4. 对于名称,输入唯一且易于识别的插件名称。

  5. (可选)对于描述,提供有关程序包或其用途的所有有用详细信息。

  6. 对于程序包类型,选择插件

  7. 对于程序包来源,输入路径或浏览到 Amazon S3 中的插件 ZIP 文件。

  8. 对于 OpenSearch 引擎版本,选择插件支持的 OpenSearch 版本。

  9. 对于程序包加密,选择是否为程序包自定义加密密钥。默认情况下,OpenSearch Service 使用 AWS 拥有的密钥 加密插件包。您也可以使用客户托管型密钥。

  10. 选择导入

导入插件程序包后,将其与域关联。有关说明,请参阅 导入程序包并将其与域关联(控制台)

使用 AWS CLI 管理自定义插件

您可以使用 AWS CLI 管理多个自定义插件任务。

使用 AWS CLI 安装自定义插件

开始前的准备工作

在您将自定义插件与域关联之前,您必须将其上传到 Amazon Simple Storage Service(Amazon S3)存储桶。存储桶必须位于您计划使用插件的同一 AWS 区域 内。有关向 S3 存储桶添加对象的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的上传对象

如果插件包含敏感信息,请在上传时指定使用 S3 管理的密钥进行服务器端加密。上传文件后,记下其 S3 路径。路径格式为 s3://amzn-s3-demo-bucket/file-path/file-name

注意

创建自定义插件时,您可以选择通过指定 AWS Key Management Service(AWS KMS)密钥以保护自定义插件。有关信息,请参阅 创建或更新具有 AWS KMS 密钥安全性的自定义插件

使用 AWS CLI 安装自定义插件
  1. 运行以下 create-package 命令为自定义插件创建新程序包,确保满足以下要求:

    • 存储桶和密钥位置必须指向您运行命令的账户中 S3 存储桶的插件 .zip 文件。

    • S3 存储桶必须位于所创建程序包的同一区域。

    • ZIP-PLUGIN 程序包仅支持 .zip 文件。

    • .zip 文件的内容必须遵循插件预期的目录结构。

    • --engine-version 的值必须采用格式 OpenSearch_{MAJOR}.{MINOR}。例如:OpenSearch_2.17

    占位符值替换为您自己的信息:

    aws opensearch create-package \ --package-name package-name \ --region region \ --package-type ZIP-PLUGIN \ --package-source S3BucketName=amzn-s3-demo-bucket,S3Key=s3-key \ --engine-version opensearch-version
  2. (可选)使用 describe-packages 命令查看 create-package 操作的状态,包括任何验证和安全漏洞调查发现。将占位符值 替换为您自己的信息:

    aws opensearch describe-packages \ --region region \ --filters '[{"Name": "PackageType","Value": ["ZIP-PLUGIN"]}, {"Name": "PackageName","Value": ["package-name"]}]'

    命令返回类似于下文的信息:

    {
        "PackageDetailsList": [{
            "PackageID": "pkg-identifier",
            "PackageName": "package-name",
            "PackageType": "ZIP-PLUGIN",
            "PackageStatus": "VALIDATION_FAILED",
            "CreatedAt": "2024-11-11T13:07:18.297000-08:00",
            "LastUpdatedAt": "2024-11-11T13:10:13.843000-08:00",
            "ErrorDetails": {
                "ErrorType": "",
                "ErrorMessage": "PluginValidationFailureReason : Dependency Scan reported 3 vulnerabilities for the plugin: CVE-2022-23307, CVE-2019-17571, CVE-2022-23305"
            },
            "EngineVersion": "OpenSearch_2.15",
            "AllowListedUserList": [],
            "PackageOwner": "OWNER-XXXX"
        }]
    }
    注意

    create-package 操作过程中,Amazon OpenSearch Service 会检查 ZIP-PLUGIN 值的版本兼容性、支持的插件扩展以及安全漏洞。使用 Amazon Inspector 服务扫描安全漏洞。这些检查的结果显示在 API 响应的 ErrorDetails 字段中。

  3. 使用 associate-package 命令,通过上一步所创建程序包的包 ID,将插件关联到您选择的 OpenSearch Service 域。

    提示

    如果您有多个插件,则可改用 associate-packages 命令,通过单次操作将多个程序包关联至某个域。

    占位符值 替换为您自己的信息:

    aws opensearch associate-package \ --domain-name domain-name \ --region region \ --package-id package-id
    注意

    使用蓝绿部署过程安装和卸载插件。

  4. (可选)使用 list-packages-for-domain 命令查看关联的状态。随着工作流程从 ASSOCIATINGACTIVE 的进展,关联状态随之变化。插件安装完成后,其状态将更改为“活动”,此时插件已可投入使用。

    占位符值替换为您自己的信息。

    aws opensearch list-packages-for-domain \ --region region \ --domain-name domain-name

使用 AWS CLI 更新自定义插件

使用 update-package 命令对插件进行更改。

注意

更新自定义插件时,您可以选择通过指定 AWS Key Management Service(AWS KMS)密钥以保护自定义插件。有关信息,请参阅 创建或更新具有 AWS KMS 密钥安全性的自定义插件

使用 AWS CLI 更新自定义插件
  • 运行以下命令。将占位符值替换为您自己的信息。

    aws opensearch update-package \ --region region \ --package-id package-id \ --package-source S3BucketName=amzn-s3-demo-bucket,S3Key=s3-key \ --package-description description

更新程序包后,您可以使用 associate-packageassociate-packages 命令将程序包更新应用于域。

注意

您可以使用 AWS CloudTrail 以审核、创建、更新、关联和取消关联插件上的操作。有关更多信息,请参阅 使用 AWS CloudTrail 监控 Amazon OpenSearch Service API 调用

创建或更新具有 AWS KMS 密钥安全性的自定义插件

创建或更新自定义插件时,您可以通过指定 AWS KMS 密钥保护自定义插件。要完成此操作,请将 PackageEncryptionOptions 设置为 true,并指定密钥的 Amazon 资源名称(ARN),如下例所示:

示例:创建具有 AWS KMS 密钥安全性的自定义插件

aws opensearch create-package \ --region us-east-2 --package-name my-custom-package \ --package-type ZIP-PLUGIN \ --package-source S3BucketName=amzn-s3-demo-bucket,S3Key=my-s3-key --engine-version OpenSearch_2.15 "PackageConfigOptions": { ... } "PackageEncryptionOptions": { "Enabled": true, "KmsKeyId":"arn:aws:kms:us-east-2:111222333444:key/2ba228d5-1d09-456c-ash9-daf42EXAMPLE" }

示例:更新具有 AWS KMS 密钥安全性的自定义插件

aws opensearch update-package \ --region us-east-2 --package-name my-custom-package \ --package-type ZIP-PLUGIN \ --package-source S3BucketName=amzn-s3-demo-bucket,S3Key=my-s3-key --engine-version OpenSearch_2.15 "PackageConfigOptions": { ... } "PackageEncryptionOptions": { "Enabled": true, "KmsKeyId":"arn:aws:kms:us-east-2:111222333444:key/2ba228d5-1d09-456c-ash9-daf42EXAMPLE" }
重要

如果您指定的 AWS KMS 密钥已禁用或删除,则可能导致关联的集群无法运行。

有关 AWS KMS 与自定义程序包集成的更多信息,请参阅 Amazon OpenSearch Service 自定义程序包 AWS KMS 集成

使用 AWS CLI,将带有自定义插件的 OpenSearch Service 域升级至更高版本的 OpenSearch

当您需要将使用自定义插件的 OpenSearch Service 域升级到更高版本的 OpenSearch 时,请完成以下流程。

使用 AWS CLI,将带有自定义插件的 OpenSearch Service 域升级至更高版本的 OpenSearch
  1. 使用 create-package 命令为您的插件创建新程序包,并指定新的 OpenSearch 版本。

    确保所有引擎版本的插件程序包名称保持一致。更改程序包名称会导致蓝绿部署期间的域升级过程失败。

  2. 按照 升级 Amazon OpenSearch Service 域 中的步骤将域升级至更高版本。

    在此过程中,Amazon OpenSearch Service 会解除旧版本插件程序包的关联,并通过蓝绿部署方式安装新版本。

卸载自定义插件和查看其解除关联状态

要从任何域中卸载插件,可使用 dissociate-package 命令。执行此命令还会删除任何相关的配置或许可证程序包。然后,您可以使用 list-packages-for-domain 命令查看解除关联状态。

提示

您还可以使用 dissociate-packages 命令,一次性从域中卸载多个插件。

卸载自定义插件和查看其解除关联状态
  1. 在每个索引中禁用插件。这必须在解除插件程序包的关联之前完成。

    如果您尝试在从每个索引中禁用插件之前将其卸载,则蓝绿部署过程仍处于 Processing 状态。

  2. 运行以下命令卸载插件。将占位符值替换为您自己的信息。

    aws opensearch dissociate-package \ --region region \ --package-id plugin-package-id \ --domain-name domain name
  3. (可选)运行 list-packages-for-domain 命令以查看解除关联的状态。