1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS CDK Ver.2 PythonでCloudFrontとS3による静的サイトホスティングを作ってみた

Posted at

今回の記事では、下の構成図のように、CloudFrontとS3を使って静的サイトをホスティングするリソースをCDK Ver.2 pythonを使って作成していきます。

全コードはGithubを参照してください。
Githubはここ

image.png

前提条件

  • AWS CDK v.2 がインストールされていること
  • Python 3.x がインストールされていること
  • AWSアカウントがあり、AWS CLIが設定されていること

※Cloud9を使うとこの辺りがPassできるため、Cloud9を使って今回の記事の内容は作成しています。

構築手順

1.CDKアプリの初期化

先ずはCDKアプリの初期化を行います。

$ mkdir cdk-lambda-rds-proxy
$ cd cdk-lambda-rds-proxy
$ cdk init --language python

2. 必要なパッケージをインストール

ここでは、CDKアプリを初期化した際に作成された.venvを有効化しています。

$ source .venv/bin/activate
$ pip install -r requirements.txt

3. スタックの作成

from aws_cdk import (
    Stack,
    aws_s3 as s3,
    aws_cloudfront as cf,
    aws_cloudfront_origins as cf_origins,
    aws_s3_deployment as s3deploy,
)
from constructs import Construct


class CdkStaticSiteCfStack(Stack):

    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # S3 Bucket
        bucket = s3.Bucket(
            self, 
            "MyStaticSiteBucket"
        )

        # CloudFront
        distribution = cf.Distribution(
            self,
            'Distribution',
            default_behavior=cf.BehaviorOptions(
                origin=cf_origins.S3Origin(bucket)
            ),
            default_root_object='index.html',
        )

        # Deploy site contents to S3 Bucket
        s3deploy.BucketDeployment(
            self, 
            "BucketDeployment",
            sources=[s3deploy.Source.asset("./website")],
            destination_bucket=bucket,
            distribution=distribution,
            distribution_paths=["/*"]
        )

4. HTMLファイルの作成

websiteフォルダを作成し、その中にindex.htmlを作成して以下の内容を記述します。

<h1>Hello CDK!</h1>

5. CDKアプリをデプロイ

Stackの準備が完了したため、デプロイします。

$ cdk deploy

デプロイ完了後にCloudFrontのディストリビューションを確認すると、以下のように「cloudfront.net」のドメイン名が表示されていることが確認できます。

image.png

アクセスすると以下のような表示となり、HTMLファイルが表示されていることが確認できます。

image.png

まとめ

この記事では、LambdaのCloudFrontとS3を使って静的ウェブサイトをホスティングするリソースをCDKで作成する方法について紹介しました。基本的なサーバレス構成においてよく使われる構成だと思いますので、参考になれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?