typescript - 如何将 Pulumi const 输出保存到 aws s3 存储桶(打字稿)
问题描述
我正在编写IaC以在Pulumi + typescript中部署Amazon EKS。我使用GitHub Actions作为我的 CI/CD。
目前我可以通过我的管道使用 pulumi 毫无问题地创建 EKS 集群,但我还没有找到一种干净的方法来获取生成的 kubeconfig。
我可以通过经常记录的示例获取 kubeconfig,方法是导出 cluster.kubeconfig 值,然后执行堆栈输出 kubeconfig 子命令
# code snippet
export const kubeconfig = cluster.kubeconfig;
# command
pulumi stack output kubeconfig > kubeconfig.yml
作为当前的解决方法,我使用这种方法在 github 操作中创建 kubeconfig 文件,然后使用aws s3
cli 命令将文件上传到 s3。
我已经在我的 pulumi iac 中创建了一个使用 kms 加密的私有 s3 存储桶,并在我的 iac 中定义了 kubeconfig 输出。有没有办法编写我的 pulumi 打字稿代码以将输出直接推送到我的 s3 存储桶而无需这些中间步骤?
UPDATE1:目前的最大努力让我:
const keksAdminBucket = new aws.s3.Bucket("keksAdminBucket", {acl: "private"});
const keksAdminBucketObject = new aws.s3.BucketObject("keksAdminBucketObject", {
key: "kubeconfig",
bucket: keksAdminBucket.id,
source: new pulumi.asset.StringAsset(String(cluster.kubeconfig)),
serverSideEncryption: "aws:kms",
});
这和主题的变化会导致错误,例如:
index.ts(45,42): error TS2345: Argument of type 'Output<any>' is not assignable to parameter of type 'string | Promise<string>'.
Type 'OutputInstance<any>' is not assignable to type 'string | Promise<string>'.
Type 'OutputInstance<any>' is missing the following properties from type 'Promise<string>': then, catch, [Symbol.toStringTag], finally
解决方案
您应该使用该apply
方法,因为kubeconfig
它是一个Output<string>
(或Output<any>
?),而不仅仅是一个string
:
const keksAdminBucketObject = new aws.s3.BucketObject("keksAdminBucketObject", {
key: "kubeconfig",
bucket: keksAdminBucket.id,
source: cluster.kubeconfig.apply(s => new pulumi.asset.StringAsset(JSON.stringify(s))),
serverSideEncryption: "aws:kms",
});
了解有关输出的更多信息并在文档中应用。
推荐阅读
- ios - 在运行时在 tableview 单元格中添加子视图并展开 tableview 单元格的最佳方法
- json - 无法将 json 映射到 golang 结构
- javascript - 我想通过 url 在 php 登陆页面中嵌入视频
- java - paintComponent() 和 paint() - 使用装饰器模式绘制 JButton
- javascript - 如何知道点击事件中点击了什么?
- amazon-web-services - AWS 使用用户池 JWT 从 Cognito 身份池获取凭证
- python - 在 GUI 中显示命令提示符窗口
- python - 带有线程的 Python HTTP 请求
- vue.js - SassError:`darken($color, $amount)` 的参数`$color` 必须是颜色
- java - 检测到 log4j-over-slf4j.jar 和 slf4j-log4j12.jar