首页 > 解决方案 > 如何将 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 s3cli 命令将文件上传到 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

标签: typescriptamazon-web-servicespulumi

解决方案


您应该使用该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",
});

了解有关输出的更多信息并在文档中应用。


推荐阅读