在5 分钟内创建 AWS S3 网站 YT 视频并在 Amazon S3 Pulumi 上托管静态网站教程中有很好的解释如何使用 Pulumi 在 S3 上创建网站托管。
在示例代码中使用了 Pulumi 的Bucket和BucketObject。第一个创建一个 S3 存储桶,后者创建对象,这些对象主要index.html
用于公共访问,如下所示:
const aws = require("@pulumi/aws");
const pulumi = require("@pulumi/pulumi");
const mime = require("mime");
// Create an S3 bucket
let siteBucket = new aws.s3.Bucket("s3-website-bucket");
let siteDir = "www"; // directory for content files
// For each file in the directory, create an S3 object stored in `siteBucket`
for (let item of require("fs").readdirSync(siteDir)) {
let filePath = require("path").join(siteDir, item);
let object = new aws.s3.BucketObject(item, {
bucket: siteBucket,
source: new pulumi.asset.FileAsset(filePath), // use FileAsset to point to a file
contentType: mime.getType(filePath) || undefined, // set the MIME type of the file
});
}
exports.bucketName = siteBucket.bucket; // create a stack export for bucket name
现在使用基于 Vue.js / Nuxt.js 的应用程序,我需要上传多个生成的文件,这些文件位于dist
我的项目根目录中。它们由 a 生成npm run build
并生成以下文件:
$ find dist
dist
dist/favicon.ico
dist/index.html
dist/.nojekyll
dist/200.html
dist/_nuxt
dist/_nuxt/LICENSES
dist/_nuxt/static
dist/_nuxt/static/1619685747
dist/_nuxt/static/1619685747/manifest.js
dist/_nuxt/static/1619685747/payload.js
dist/_nuxt/f3a11f3.js
dist/_nuxt/f179782.js
dist/_nuxt/fonts
dist/_nuxt/fonts/element-icons.4520188.ttf
dist/_nuxt/fonts/element-icons.313f7da.woff
dist/_nuxt/c25b1a7.js
dist/_nuxt/84fe6d0.js
dist/_nuxt/a93ae32.js
dist/_nuxt/7b77d06.js
我的问题是这些文件还包含嵌套在子目录中的文件,这些文件本身也可能是子目录 - 例如dist/_nuxt/fonts/element-icons.4520188.ttf
. 教程中提供的方法不评估子目录,我不知道如何使用 Pulumi/TypeScript 做到这一点。