[aws-cdk-cloudfront-s3] CloudFront + S3(OAI)な構成を作るConstructライブラリを公開しました

OAIを使ってCloudFront / S3構成websiteを作れるAWS CDK向けのライブラリです。

Why use OAI?

S3の静的ウェブサイトホスティング機能を使うのが簡単です。が、これだとS3のオブジェクトに直接アクセスできるという問題が発生します。大体の場合は気にしないことが多いのかなと思いますが、privateなコンテンツを提供したいときなどにはちょっと悩ましいところがあります。

で、そうなるとOAIを使ってCloudFrontからのみアクセスできるようにする方法が出てきますが、今度は/blog/のようなスラッシュで終わるURLのリクエストをLambda@edgeで処理してやる必要がでてきます。

これらの構成を組んでいくのが面倒だったので、AWS CDKのConstructにしてみました。

What is this?

以下のリソースを作ってくれるConstructです。

  • CloudFront distribution
  • S3 bucket
  • OAI
  • Lambda@edge

Usage

簡単なサンプルがこちら

import { expect as expectCDK, haveResource, SynthUtils } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import { Bucket } from '@aws-cdk/aws-s3';
import { CloudfrontS3 } from '@wpkyoto/aws-cdk-cloudfront-s3';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'TestStack');
new CloudfrontS3(stack, 'MyTestConstruct', {
  name: 'example',
});

自前のS3バケットを利用したい場合

import { expect as expectCDK, haveResource, SynthUtils } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import { Bucket } from '@aws-cdk/aws-s3';
import { CloudfrontS3 } from '@wpkyoto/aws-cdk-cloudfront-s3';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'TestStack');
new CloudfrontS3(stack, 'MyTestConstruct', {
  name: 'example',
  s3Bucket: Bucket.fromBucketName(stack, 'Dummy', 'dummy'),
});

独自ドメインとSSL証明書を設定する

ACMの証明書をARN指定で使えます。

import { expect as expectCDK, haveResource, SynthUtils } from '@aws-cdk/assert';
import * as cdk from '@aws-cdk/core';
import { Bucket } from '@aws-cdk/aws-s3';
import { CloudfrontS3 } from '@wpkyoto/aws-cdk-cloudfront-s3';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'TestStack');
new CloudfrontS3(stack, 'MyTestConstruct', {
  name: 'example',
  acmCertificationARN: 'YOUR_ACM_ARN',
  domains: ['example.com']
});

Try it out!

簡単なサンプルを用意してますので、興味ある方はお試しください。

$ git clone git@github.com:wpkyoto/aws-cdk-cloudfront-s3.git
$ cd aws-cdk-cloudfront-s3
$ npm install
$ cd example
$ npm install
$ npm run build && npm run cdk deploy

And the stack template YAML can see here.

Comment