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?

CloudFormation より簡単!?AWS CDK で楽々 IaC 実践

Posted at

はじめに

AWS Cloud Development Kit(AWS CDK)は、プログラミング言語を用いてクラウドインフラをコードとして定義できる強力なツールです。
CloudFormation の利便性を保ちつつ、より柔軟で可読性の高いインフラ管理が可能になります。

本記事では、AWS CDK の基本概念から具体的な活用例までを解説し、効率的なインフラ管理を実現する方法を紹介します。

対象読者

  • AWS 環境のインフラをコード化したいエンジニア
  • CloudFormation を利用しているが、より柔軟な管理をしたい方
  • AWS CDK の導入を検討している技術者
  • DevOps や IaC(Infrastructure as Code)に興味がある方
  • AWS CDK を活用した CI/CD パイプラインを構築したい方

事前準備

AWS CDK を使用するためには、以下の環境を準備する必要があります。

  • AWS アカウント(AWS リソースをデプロイするため)
  • Node.js(バージョン 18 以上推奨)
  • AWS CLI(適切な認証情報の設定が必要)
  • AWS CDK のインストール
npm install -g aws-cdk
  • CDK プロジェクトの作成
mkdir my-cdk-app && cd my-cdk-app
cdk init app --language=typescript

AWS CDK の基本概念

1. スタック(Stack)

AWS CDK では、CloudFormation のスタックに相当する単位として「Stack」を定義します。

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';

export class MyStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, 'MyBucket', {
      versioned: true
    });
  }
}

2. アプリ(App)

CDK アプリは 1 つ以上のスタックを含むエントリーポイントとなります。

import * as cdk from 'aws-cdk-lib';
import { MyStack } from './my-stack';

const app = new cdk.App();
new MyStack(app, 'MyStack');
app.synth();

3. コンストラクト(Construct)

リソースの再利用を可能にする単位が「Construct」です。
AWS の各リソース(S3、Lambda など)は基本的にコンストラクトとして提供されます。

AWS CDK の活用例

1. S3 バケットの作成

new s3.Bucket(this, 'MySecureBucket', {
  versioned: true,
  encryption: s3.BucketEncryption.S3_MANAGED
});

2. Lambda 関数のデプロイ

import * as lambda from 'aws-cdk-lib/aws-lambda';

new lambda.Function(this, 'MyLambda', {
  runtime: lambda.Runtime.NODEJS_18_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda')
});

3. API Gateway と Lambda の統合

import * as apigw from 'aws-cdk-lib/aws-apigateway';

const api = new apigw.RestApi(this, 'MyApi');
const lambdaIntegration = new apigw.LambdaIntegration(myLambda);
api.root.addMethod('GET', lambdaIntegration);

4. EventBridge を使用した Lambda の定期実行

import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';

const rule = new events.Rule(this, 'ScheduledRule', {
  schedule: events.Schedule.rate(cdk.Duration.hours(1)), // 1時間ごとに実行
});
rule.addTarget(new targets.LambdaFunction(myLambda));

5. DynamoDB テーブルの作成

import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';

new dynamodb.Table(this, 'MyTable', {
  partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING },
  billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});

6. SNS トピックの作成とサブスクライブ

import * as sns from 'aws-cdk-lib/aws-sns';
import * as subs from 'aws-cdk-lib/aws-sns-subscriptions';

const topic = new sns.Topic(this, 'MyTopic');
topic.addSubscription(new subs.EmailSubscription('example@example.com'));

7. SQS キューの作成

import * as sqs from 'aws-cdk-lib/aws-sqs';

new sqs.Queue(this, 'MyQueue', {
  visibilityTimeout: cdk.Duration.seconds(30),
});

8. VPC の作成

import * as ec2 from 'aws-cdk-lib/aws-ec2';

new ec2.Vpc(this, 'MyVpc', {
  maxAzs: 2
});

9. IAM ロールの作成と Lambda へのアタッチ

import * as iam from 'aws-cdk-lib/aws-iam';

const role = new iam.Role(this, 'MyLambdaRole', {
  assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com')
});
role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'));

new lambda.Function(this, 'MyLambdaWithRole', {
  runtime: lambda.Runtime.NODEJS_18_X,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
  role: role
});

AWS CDK のメリット

  • プログラムとして記述可能 → 条件分岐やループを活用できる
  • モジュール化と再利用 → Construct を活用してコードの再利用性を向上
  • CloudFormation と互換性あり → 既存の CF テンプレートと統合可能
  • CI/CD との統合が容易 → GitHub Actions や AWS CodePipeline と連携しやすい

まとめ

AWS CDK を活用すると、より柔軟で効率的な AWS インフラ管理が可能になります。
本記事で紹介した活用例を参考に、AWS 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?