You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SAM模板中指定OpenSearch摄入管道并引入带替换的外部YAML?

问题1:在SAM模板中以YAML字符串指定OpenSearch Ingestion Pipeline

你可以用YAML的多行字符串语法(|或>)直接定义PipelineConfigurationBody,既能满足字符串格式要求,又能保持配置的可读性。示例如下:

PortfolioDataPipeline:
  Type: AWS::OSIS::Pipeline
  Properties:
    PipelineConfigurationBody: |
      version: "2"
      pipeline:
        source:
          s3:
            bucket_name: "my-source-bucket"
            prefix: "data/"
        processor:
          - grok:
              match:
                log: "%{COMBINEDAPACHELOG}"
        sink:
          - opensearch:
              hosts: ["https://my-domain.us-east-1.es.amazonaws.com"]
              index: "my-index"

用|会保留所有换行符,完全匹配你编写的YAML结构,SAM会自动将这段内容转换为符合要求的字符串传入资源。


问题2:引入外部YAML文件并实现字符串替换

当然可以,用SAM内置函数组合就能实现,无需额外工具:

步骤1:创建外部配置模板文件

新建pipeline-config.yaml,用${变量名}作为占位符标记需要替换的内容:

version: "2"
pipeline:
  source:
    s3:
      bucket_name: "${SourceBucket}"
      prefix: "${DataPrefix}"
  processor:
    - grok:
        match:
          log: "%{COMBINEDAPACHELOG}"
  sink:
    - opensearch:
        hosts: ["${OpenSearchDomainEndpoint}"]
        index: "${TargetIndex}"

步骤2:在SAM模板中读取并替换变量

通过!Sub结合!File函数,读取外部文件内容并完成占位符替换:

PortfolioDataPipeline:
  Type: AWS::OSIS::Pipeline
  Properties:
    PipelineConfigurationBody: !Sub
      - !File ./pipeline-config.yaml
      - SourceBucket: "my-source-bucket"
        DataPrefix: "raw-data/"
        OpenSearchDomainEndpoint: "https://my-domain.us-east-1.es.amazonaws.com"
        TargetIndex: "processed-logs"

核心逻辑

  • !File:读取外部文件的原始文本内容,返回字符串格式。
  • !Sub:将字符串中的${变量名}替换为对应定义的值,完美适配模板化的配置文件。

如果替换逻辑更复杂(比如带条件判断),可以结合SAM的!If函数,或者用Python/Shell脚本预处理生成最终配置文件后,再用!File读取。但多数场景下,!Sub + !File的组合就能解决问题。

内容的提问来源于stack exchange,提问作者Dr. Thomas C. King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:04:52