0
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?

AWS CDKをPythonでやってみる 実行環境構築からリソース作成まで

0
Posted at

はじめに

普段の業務で何気なく利用しているAWS CDK。
おさらいの意味も込めて、実行環境の構築からVPC, 各種AWSリソースの構築などの導入となる部分を振り返る。
プログラム言語はPythonとする。

環境

OS:Ubuntu 24.04 LTS
Node.js:24.20.0
AWS CDK CLI:2.1139.0
Python:3.12.3
AWS CLI:2.36.40

1. 実行環境の構築

1-1. Node.jsのインストール

AWS Cloud Development Kit (AWS CDK) は Node.js 上で動作します。

curl -fsSL https://deb.nodesource.com/setup_24.x | sudo bash -
sudo apt-get install -y nodejs
node --version # バージョンが表示されればOK

1-2. AWS CDK CLIのインストール

sudo npm install -g aws-cdk
cdk --version # バージョンが表示されればOK

1-3. Pythonのインストール

sudo apt-get install -y python3 python3-pip python3-venv python-is-python3
python --version # バージョンが表示されればOK

1-4. AWS CLIのインストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version # バージョンが表示されればOK

2. CDKプロジェクトの準備

2-1. プロジェクトの作成

mkdir my-project
cd my-project
cdk init app --language python

image.png

2-2. Pythonの仮想環境をアクティブ化

source .venv/bin/activate
which python # .venv/bin/pythonが参照されていればOK

2-3. 必要なPythonライブラリのインストール

pip install -r requirements.txt 

2-4. AWS認証情報を設定

今回はアクセスキーが不要なaws loginで一時認証情報を取得する。
AWS Regionはap-northeast-1(東京)を選択する。

aws login

image.png

2-5. CDK環境をブートストラップ

cdk bootstrap

3. AWSリソースの作成

3-1. CDKスタックファイルの更新

VPC, S3バケット, Lambda関数を定義する。
S3バケットへのアクセス権限もLambda関数に設定してみる。

my-project/my_project/my_project_stack.py
from aws_cdk import (
    Stack,
    RemovalPolicy,
    aws_ec2 as ec2,
    aws_lambda as _lambda,
    aws_s3 as s3
)
from constructs import Construct

class MyProjectStack(Stack):

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

        # VPC
        ec2.Vpc(
            self,
            "MyVpc",
            vpc_name="my-vpc",
            max_azs=2,
            nat_gateways=0,
        )

        # S3バケット
        bucket = s3.Bucket(
            self,
            "MyBucket",
            bucket_name="my-bucket-26751582141589660576", # 全リージョンでユニークである必要がある
            removal_policy=RemovalPolicy.DESTROY,
            auto_delete_objects=True,
        )

        # Lambda関数
        fn = _lambda.Function(
            self,
            "MyFunction",
            function_name="my-function",
            runtime=_lambda.Runtime.PYTHON_3_12,
            handler="index.lambda_handler",
            code=_lambda.Code.from_inline(
                "def lambda_handler(event, context):\n"
                "    return {'statusCode': 200, 'body': 'Hello'}"
            ),
        )

        # S3バケットへの読み書きをLambda関数に許可
        bucket.grant_read_write(fn)

3-2. CloudFormationテンプレートを生成

cdk synth

3-3. CDKスタックをデプロイ

cdk deploy

各種AWSリソースが作成される。

  • CloudFormationスタック
    image.png

    • VPC
      image.png

    • S3バケット
      image.png

    • Lambda関数
      image.png

      • S3バケットへのアクセス権限もIAMロールで実装されている
        image.png

3-4. CDKスタックを削除

確認が終わったら作成したCDKスタックを削除する。

cdk destroy MyProjectStack

image.png

各種AWSリソースも削除されます。
image.png

まとめ

Node.jsが必要だったり、実行環境を構築するまでに当時苦労したことを思い出せました。
AWS CDKはfor文やif文などプログラム言語の制御構文が使えたり、抽象的なリソース定義ができるところが便利です。
最適なフォルダ構成など実践的なテクニックについても知識を深めていきたいですね。

参考リンク

0
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
0
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?