基础设施即代码:用Pulumi和Java配置AWS S3网站

74 阅读1分钟

pulumi.com和Java 17为一个静态网站配置一个公共S3桶


import com.pulumi.Pulumi;
import com.pulumi.asset.FileAsset;
import com.pulumi.aws.s3.BucketObjectv2;
import com.pulumi.aws.s3.BucketObjectv2Args;
import com.pulumi.aws.s3.BucketV2;
import com.pulumi.aws.s3.BucketV2Args;
import com.pulumi.aws.s3.BucketWebsiteConfigurationV2;
import com.pulumi.aws.s3.BucketWebsiteConfigurationV2Args;
import com.pulumi.aws.s3.inputs.BucketWebsiteConfigurationV2IndexDocumentArgs;

public static void main(String[] args) {
    Pulumi.run(ctx -> {

......首先创建一个通用的桶:


    
    var bucket = new BucketV2("Bucket", BucketV2Args.builder()
            .bucket("pulumi.duke")
            .forceDestroy(true)
            .build());

...然后配置为网站。 index.html 的名称也被配置了:


    var configuration = new BucketWebsiteConfigurationV2("Configuration",
            BucketWebsiteConfigurationV2Args.builder()
                    .bucket(bucket.getId())
                    .indexDocument(BucketWebsiteConfigurationV2IndexDocumentArgs.builder()
                            .suffix("index.html").build())
                    .build());

现在要上传一个静态文件,这一步是完全可选的:


    var object = new BucketObjectv2("Object",BucketObjectv2Args.builder()
        .acl("public-read")
        .bucket(bucket.getId())
        .source(new FileAsset("./index.html"))
        .key("index.html")
        .contentType("text/html")
    .build());

......并提供输出作为网站的域名:


    ctx.export("bucketName", bucket.bucket());
    ctx.export("cli", configuration.websiteEndpoint().applyValue(uri -> "curl " + uri));
    });
}

看看从头开始的部署,包括现场部署(和错误:-))。