この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
コンニチハ、千葉です。
CDKを利用すると、コードでCloudFormationを定義できます。ループ処理ができたり、変数なども柔軟に定義できるようになります。
今回は、CDKを利用して複数アカウントや複数リージョンへのデプロイをやってみます。
やってみた
前提
- CDKをインストールして利用可能になっている
- CDKは複数の言語に対応していますが、今回は
Python
を利用 - 2アカウント、2リージョンにそれぞれデプロイしてみる
はじめての方は、こちらが参考になります。
プロファイルの設定
事前にプロファイルを設定しておきます。プロファイルとはAWS CLIで利用していた、環境ごとにアクセスするためのキーを切り替えるためのものです。
Linuxだと ~/.aws/config
に保存されます。今回作成したプロファイルのサンプルです。
本番環境、開発環境のキーをそれぞれ指定します。サンプルとしてキーを指定していますが、AWSのベストプラクティスとしてはキー指定指定ではなく、IAMロールの指定なのでご注意ください。
[profile dev]
aws_access_key_id=xxx
aws_secret_access_key=xxx
[profile prd]
aws_access_key_id=xxx
aws_secret_access_key=xxx
プロジェクトの作成と初期化
CDKの環境を初期化しつつ、今回のサンプルコードをデプロイします。
$ mkdir cdk-multi-sample && cd cdk-multi-sample
$ cdk init --language python
$ source .env/bin/activate
$ pip install -r requirements.txt
$ pip install aws-cdk.aws-s3
デプロイするサンプルコード
今回デプロイするサンプルコードです。サンプルとしてS3バケットを作ります。
まずapp.py内にエントリポイントを作成します。複数アカウント、複数リージョンを指定します。
#!/usr/bin/env python3
from aws_cdk import core
from cdk_multi_sample.cdk_multi_sample_stack import CdkMultiSampleStack
app = core.App()
CdkMultiSampleStack(app, 'Stack-dev-tokyo', env={'account': 'ONE', 'region': 'ap-northeast-1'})
CdkMultiSampleStack(app, 'Stack-dev-virginia', env={'account': 'ONE', 'region': 'us-east-1'})
CdkMultiSampleStack(app, 'Stack-prd-tokyo', env={'account': 'TWO', 'region': 'ap-northeast-1'})
CdkMultiSampleStack(app, 'Stack-prd-virginia', env={'account': 'TWO', 'region': 'us-east-1'})
app.synth()
- app:デプロイ時に指定するアプリケーション名
- account:任意のAWSアカウントIDを指定
- region:任意のリージョンを指定
次に、cdk_multi_sample/cdk_multi_sample_stack.py
にS3バケットを作成するコードを記述します。
from aws_cdk import (
aws_s3 as s3,
core
)
class CdkMultiSampleStack(core.Stack):
def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# The code that defines your stack goes here
bucket = s3.Bucket(self,
cdk-s3-multi-sample,)
デプロイ
それでは、各アカウントと各リージョンにそれぞれデプロイします。 まずは、CloudFormationのテンプレートを生成します。
$ cdk synth
$ cdk ls
Stack-dev-tokyo
Stack-dev-virginia
Stack-prd-tokyo
Stack-prd-virginia
デプロイしてみます。
$ cdk deploy Stack-dev-tokyo --profile dev
$ cdk deploy Stack-dev-virginia --profile dev
$ cdk deploy Stack-prd-tokyo --profile prd
$ cdk deploy Stack-prd-virginia --profile prd
マネージメントコンソールから見てみました。それぞれ、CloudFormationスタックが追加されてました。また、S3バケットも作成されてます。
環境削除
試せたので、サンプル環境を掃除します
$ cdk destroy Stack-dev-tokyo --profile dev
$ cdk destroy Stack-dev-virginia --profile dev
$ cdk destroy Stack-prd-tokyo --profile prd
$ cdk destroy Stack-prd-virginia --profile prd
最後に
CDKを利用して、マルチアカウント、マルチチージョンに対してデプロイしてみました。CloudFormationのStackSetsを利用することでも可能ですが、CDKでも対応できることを確認できました。