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でDocument DBを作成してみた

Posted at

CDKを使ってDocument DBを構築してみたので、備忘的に記録を残しておきます。今回は、EC2を踏み台として使ってDocument DBに接続する構成を目標としています。また、EC2への接続はSession Managerを使って行う形としています。

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

image.png

前提条件

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

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

構築手順

1. CDKアプリの初期化

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

$ mkdir cdk-documentdb
$ cd cdk-documentdb
$ cdk init --language python

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

続いて必要パッケージのインストールになります。
ここでは、CDKアプリを初期化した際に作成された.venvを有効化しています。

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

3. スタックの記述

from aws_cdk import (
    Stack,
    aws_docdb as docdb,
    aws_ec2 as ec2,
    aws_iam as iam,
    aws_logs as logs,
    
)
from constructs import Construct

class CdkDocumentdbStack(Stack):

    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        
        docdb_port = 27017
        
        # VPC
        vpc = ec2.Vpc(
            self,
            'VPC',
            max_azs=2,
            restrict_default_security_group=True,
            subnet_configuration=[
                ec2.SubnetConfiguration(
                    name='public',
                    subnet_type=ec2.SubnetType.PUBLIC,
                    cidr_mask=24,
                ),
                ec2.SubnetConfiguration(
                    name='private',
                    subnet_type=ec2.SubnetType.PRIVATE_ISOLATED,
                    cidr_mask=24,
                ),
            ],
        )
        
        # Security Groups
        sg_bastion = ec2.SecurityGroup(
            self,
            'SecurityGroupForBastionInstance',
            vpc=vpc,
        )
        
        sg_docdb = ec2.SecurityGroup(
            self,
            'SecurityGroupForDocumentDb',
            vpc=vpc,
        )
        sg_docdb.add_ingress_rule(
            peer=ec2.Peer.security_group_id(sg_bastion.security_group_id),
            connection=ec2.Port.tcp(docdb_port),
        )
        
        # 踏み台用EC2
        # - 簡単のため、Public Subnet上に作成
        # - 接続はSSMを使って接続する
        bastion = ec2.Instance(
            self,
            'BastionInstance',
            instance_type=ec2.InstanceType('t3.nano'),
            machine_image=ec2.MachineImage.latest_amazon_linux2(),
            vpc=vpc,
            security_group=sg_bastion,
            ssm_session_permissions=True,
            vpc_subnets=ec2.SubnetSelection(subnet_type=ec2.SubnetType.PUBLIC),
        )
        
        # DocumentDB
        docdb_cluster = docdb.DatabaseCluster(
            self,
            'DocumentDbCluster',
            instance_type=ec2.InstanceType('t4g.medium'),
            master_user=docdb.Login(username='dbuser'),
            vpc=vpc,
            cloud_watch_logs_retention=logs.RetentionDays.TWO_MONTHS,
            engine_version='5.0.0',
            instances=1,
            port=docdb_port,
            security_group=sg_docdb,
            storage_encrypted=True,
            vpc_subnets=ec2.SubnetSelection(
                subnet_type=ec2.SubnetType.PRIVATE_ISOLATED
            ),
        )

4. CDKのデプロイ

cdk deploy

デプロイが完了すると、DocumentDBとアクセス用のEC2が構築されます。
以上で構築完了です。

5. Document DBへの接続検証

EC2からDocumentDBへの接続検証については、下のドキュメントを参照いただけると分かりやすいと思いますので、ご確認下さい。

Amazon EC2 を使用したConnect

まとめ

この記事では、CDKを使ってDocumentDBを構築した記録を残しています。
どなたかの参考になれば幸いです。

参考

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?