[AWS CDK(Cloud Development Kit)] 複数アカウント・複数リージョンへのデプロイを管理する
コンニチハ、千葉です。
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でも対応できることを確認できました。