云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载导读本文围绕 KubeVela 内置 Terraform 云资源组件的官方示例aws-s3.eg.md展开讲解如何通过一份core.oam.dev/v1beta1的 Application 清单以声明式方式在 AWS 上创建 S3 存储桶并将连接信息endpoint、access key 等自动写入 Kubernetes Secret 供业务应用消费。读完本文你将掌握aws-s3组件的最小可用配置写法、writeConnectionSecretToRef的语义与底层实现、Application 到 TerraformConfiguration的转换链路以及利用vela show生成和查阅组件参考文档的方法。一、示例文档的背景内嵌于仓库的.eg.md仓库中的references/docgen/def-doc/component/aws-s3.eg.md是一份非常精简的 YAML 使用示例它是 KubeVela 文档生成体系中的示例文档suffix 为.eg.md。references/docgen/def-doc/README.md解释了为什么这些示例要内嵌在仓库而非 kubevela.io 站点内示例不仅用于生成 kubevela.io 的组件参考文档也能帮助用户通过vela show为自己的定义生成参考文档这些是内置定义built-in definitions的用法示例应与 vela-templates/definitions/README.md 中的内置定义保持一致。从源码看这些示例通过go:embed被打进 docgen 程序references/docgen/embddoc.go中//go:embed def-doc将整个def-doc目录嵌入二进制初始化时按文件后缀分发到三个 map.eg.md→DefinitionDocSamples示例 YAML.desc.md→DefinitionDocDescription能力描述.param.md→DefinitionDocParameters参数覆盖说明这份aws-s3.eg.md即DefinitionDocSamples[aws-s3]的内容来源既服务于 kubevela.io 参考文档也服务于 CLI 的vela show aws-s3输出。二、最小可用示例完整继承原文档references/docgen/def-doc/component/aws-s3.eg.md的全部内容如下这是官方示例的完整形态可直接复制使用apiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: s3-cloud-source spec: components: - name: sample-s3 type: aws-s3 properties: bucket: vela-website-20211019 acl: private writeConnectionSecretToRef: name: s3-conn逐字段解读字段取值说明apiVersioncore.oam.dev/v1beta1KubeVela Application 的稳定 API 版本kindApplication由 KubeVela 控制器调和reconcile的应用清单spec.components[0].namesample-s3组件实例名用于在应用内区分多个组件spec.components[0].typeaws-s3组件类型对应一个以 Terraform 为 schematic 的ComponentDefinitionproperties.bucketvela-website-20211019要创建的 S3 存储桶名称需全局唯一properties.aclprivate存储桶的访问控制列表取值通常为private、public-read等properties.writeConnectionSecretToRef.names3-conn创建成功后把连接信息写入名为s3-conn的 Secret这里type: aws-s3是关键它让 KubeVela 将bucket、acl等属性透传给 Terraform在云上执行资源创建writeConnectionSecretToRef则解决了云资源创建后凭据/地址如何安全地交给下游应用这一核心问题。三、仓库中的完整示例同样的模式更贴近生产命名仓库在 Terraform 云资源示例目录中提供了一个与之结构完全一致的完整示例docs/examples/terraform/cloud-resource-provision-and-consume/application-aws-s3.yamlapiVersion: core.oam.dev/v1beta1 kind: Application metadata: name: app-aws-s3 spec: components: - name: sample-s3 type: aws-s3 properties: bucket: vela-website-202110191745 acl: private writeConnectionSecretToRef: name: s3-conn两处示例的差异仅在metadata.name和bucket的具体取值云上桶名必须全局唯一因此示例中使用带时间戳的命名。这进一步印证一份aws-s3组件的最小配置骨架就是bucket acl writeConnectionSecretToRef三件套读者可以以此为模板替换为自己的桶名。四、底层原理Application 如何变成 Terraform Configurationaws-s3属于 KubeVela 的 Terraform 云资源组件体系。以同目录下的 ComponentDefinition-alibaba-oss.yaml 为参照可以推断其结构这类定义的spec.workload.definition指向terraform.core.oam.dev/v1beta1的Configuration类型spec.schematic.terraform.configuration内嵌 HCL 模板声明variable bucket、variable acl等输入参数并通过output暴露BUCKET_NAME、endpoint 等结果。应用侧到 Terraform 侧的转换发生在pkg/appfile/appfile.go。其中与本文主题最相关的实现要点保留字定义pkg/appfile/appfile.go#L71-L84writeConnectionSecretToRef、customRegion、providerRef、forceDelete、gitCredentialsSecretReference是应用属性中的特殊键分别对应创建连接 Secret、覆盖云厂商 Region、引用云厂商 Provider、强制删除、Git 私钥引用等能力不会作为 Terraform 变量透传。Secret 引用回填pkg/appfile/appfile.go#L838-L843若组件属性里没有显式写writeConnectionSecretToRef则回落到ComponentDefinition中 Terraform schematic 声明的默认值如果只写了name而未写namespace则自动补上当前应用所在的命名空间。变量清洗pkg/appfile/appfile.go#L867-L875在把组件属性序列化为 Terraform 变量前会从变量 map 中剔除writeConnectionSecretToRef、customRegion、providerRef、forceDelete、gitCredentialsSecretReference这些保留键确保它们不会被错误地当作 HCL 变量传入。也就是说示例中writeConnectionSecretToRef: {name: s3-conn}最终会被翻译为 TerraformConfiguration的spec.writeConnectionSecretToReferenceterraform-controller 在Configuration调和成功后会把 S3 的 endpoint、bucket 名、访问凭据等写入名为s3-conn的 Secret命名空间为应用所在命名空间。需要说明的适用前提Terraform 组件真正执行云上操作依赖集群中已安装 terraform-controller且需要为 AWS 配置好 Provider通过providerRef引用在未配置凭据的环境下该组件无法完成实际资源创建。五、消费连接信息outputs/inputs 串联与 Secret 引用创建出的s3-connSecret 是下游应用消费云资源的桥梁。KubeVela 提供了两种典型用法方式一组件内直接引用 Secret。业务组件如 Deployment通过标准 Secret 挂载/环境变量方式读取s3-conn中的 bucket 与 endpoint。方式二组件间 outputs/inputs 数据串联。在 application-oss-deploy-website.yaml 中可以看到完整的串联范式云资源组件用outputs声明导出业务组件用inputs声明导入- name: create-bucket type: alibaba-oss-website properties: bucket: oss-website-20220302-2135 acl: public-read index_document: index.html error_document: error/index.html writeConnectionSecretToRef: name: oss-website-conn outputs: - name: bucket valueFrom: output.status.apply.outputs.BUCKET_NAME.value - name: endpoint valueFrom: output.status.apply.outputs.EXTERNAL_ENDPOINT.value - name: deploy-website type: deploy-website inputs: - from: bucket parameterKey: properties.bucket - from: endpoint parameterKey: properties.endpointoutputs[].valueFrom引用output.status.apply.outputs.BUCKET_NAME.value——这里的BUCKET_NAME正是 Terraform HCL 模板中声明的output名称。对aws-s3组件同样可以导出类似BUCKET_NAME、endpoint 等输出喂给后续组件例如把静态网站文件上传到 S3 桶的组件。六、用vela show生成与查阅参考文档aws-s3.eg.md这类内嵌示例的另一个直接用途是vela show命令。从 references/cli/show.go#L92-L110 可以看到该命令的完整能力vela show aws-s3 -n vela-system在控制面集群中按名称渲染组件的参考文档控制台格式vela show aws-s3 --format markdown输出 Markdown 格式便于写入仓库文档vela show aws-s3.cue/vela show aws-s3.yaml直接对本地定义文件生成文档vela show一次性把所有能力的文档生成到~/.vela/reference/docs/vela show --web生成全部文档并启动本地 Web 服务器浏览vela show aws-s3 --revision v1查看指定版本的定义文档需该版本存在于集群。这解释了为什么示例文档要放在仓库里而不是只存在 kubevela.io 站点它既用于官方站点文档生成也随 CLI 分发帮助用户在任何环境下为任意含自定义定义生成一致的参考文档。七、实践要点与注意事项桶名全局唯一S3 bucket 名称在 AWS 全局唯一示例中vela-website-20211019、vela-website-202110191745均为演示占位实际使用需替换为你的可用桶名否则 Terraform 应用会失败。acl 取值示例默认private如需公开访问如托管静态网站可参考 OSS 示例中的public-read。具体取值范围以对应组件定义的 HCL 模板变量说明为准。Secret 命名与命名空间writeConnectionSecretToRef.name指定 Secret 名未写namespace时由 pkg/appfile/appfile.go#L841-L843 自动填为应用所在命名空间。特殊属性不参与 Terraform 变量透传customRegion覆盖 Region、providerRef引用云厂商 Provider、forceDelete、gitCredentialsSecretReference等均为 KubeVela 保留键按需配置不会进入 HCL 变量。组件定义与示例对齐references/docgen/def-doc/README.md明确要求示例与 vela-templates/definitions/README.md 中的内置定义保持一致因此当你新增或修改内置 Terraform 组件时应当同步维护对应的.eg.md示例确保vela show输出与文档站点内容不脱节。小结aws-s3.eg.md虽短却是 KubeVela Terraform 云资源组件用法的标准模板type: aws-s3 properties writeConnectionSecretToRef三行核心配置即可声明式地在 AWS 上完成 S3 存储桶的创建与连接信息交付。结合pkg/appfile/appfile.go的转换实现、docs/examples/terraform/cloud-resource-provision-and-consume/下的完整示例以及vela show文档能力开发者可以快速掌握从定义云资源到消费云资源的完整闭环并将其推广到 RDS、OSS、VPC 等任意 Terraform 云资源组件的使用上。赞分享云原生DevOps运维微服务【免费下载链接】kubevelaThe Modern Application Platform.项目地址https://gitcode.com/gh_mirrors/ku/kubevela点击查看免费下载相关推荐创建AWS S3存储桶的Terraform模块指南创建AWS S3存储桶的Terraform模块指南 本指南将详细介绍如何利用位于 GitHub上的 terraform aws modules/terraforAWS S3 桶 Terraform 模块轻松管理您的云存储AWS S3 桶 Terraform 模块轻松管理您的云存储 项目介绍 在现代云原生应用的开发中AWS S3Simple Storage ServiceAWS JavaScript S3 探索者 - 简易浏览S3公共存储桶AWS JavaScript S3 探索者 简易浏览S3公共存储桶 AWS JavaScript S3 Explorer 是一个专为Web浏览器设计的JavaS上一篇Elsevier Tracker告别投稿焦虑实时掌握审稿进度的终极指南下一篇告别投稿焦虑Elsevier Tracker实时追踪审稿进度的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考