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?

#117 AWS CDKを使ってIaCしてみた② - リソース連携

Posted at

はじめに

前回の記事では、AWS CDK(Cloud Development Kit)を使って、基本的なインフラリソースをコードで管理する方法をご紹介しました。今回はその続編として、CDKで複数のリソースを連携させてみます。

応用編の概要

今回の応用編では、以下のような内容をカバーします。
複数リソースの連携:CDKを使って、リソース間で依存関係を持つ設定を行います。

複数リソースの連携

CDKの強力な機能の一つは、リソース間の依存関係を自動的に管理してくれる点です。例えば、EC2インスタンスが特定のS3バケットにアクセスできるように設定するには、IAMロールをEC2にアタッチして、S3へのアクセス許可を与える必要があります。

例: EC2インスタンスにS3バケットへのアクセス権限を付与

前回の記事で利用した、lib/aws-cdk-stack.tsを以下のように変更して、cdk synthコマンドとcdk deployコマンドを実行して、各リソースをデプロイしてみましょう。

Terminal
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as s3 from 'aws-cdk-lib/aws-s3';
import * as iam from 'aws-cdk-lib/aws-iam';
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';

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

    // S3バケットの作成
    const bucket = new s3.Bucket(this, 'MyAppBucket', {
      versioned: true, // バージョニングを有効化
    });

    // EC2インスタンス用のVPCの作成
    const vpc = new ec2.Vpc(this, 'MyAppVpc', {
      maxAzs: 2, // 利用するアベイラビリティゾーンの最大数
    });

    // IAMロールの作成: EC2インスタンスがAWSリソースにアクセスする権限を持つ
    const role = new iam.Role(this, 'MyAppEc2Role', {
      assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'), // EC2インスタンスがこのロールを引き受ける
    });

    // IAMロールにS3バケットへの読み書き権限を付与
    bucket.grantReadWrite(role);

    // セキュリティグループの作成: EC2インスタンスのネットワークアクセスを制御
    const securityGroup = new ec2.SecurityGroup(this, 'MyTestSg', {
      vpc,
      description: 'Allow SSH access to EC2 instance',
      allowAllOutbound: true, // インスタンスからのアウトバウンドトラフィックを許可
    });

    // SSHアクセスを許可 (ポート22)
    securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), 'Allow SSH access');

    // EC2インスタンスの作成
    new ec2.Instance(this, 'MyAppInstance', {
      vpc, // 作成したVPCに関連付け
      role, // IAMロールを関連付けて権限を付与
      instanceType: new ec2.InstanceType('t2.micro'), // インスタンスタイプを指定
      machineImage: ec2.MachineImage.latestAmazonLinux(), // 最新のAmazon Linux AMIを使用
      securityGroup, // セキュリティグループを関連付け
    });
  }
}

上記のコードでは、以下の処理を行っています。
・S3バケットを作成
・EC2インスタンスが配置されるVPCを作成
・EC2インスタンス用のIAMロールを作成し、そのロールにS3への読み書き権限を付与
・そのロールを持つEC2インスタンスを作成


「EC2インスタンスの作成」の部分を見てわかるように、new ec2.Instance()の引数の一部として、連携対象であるvpcのデータやroleのデータを渡すだけで、リソース間の連携をすることができます。どういったメソッドにどんな値を渡すことができるかについてはAWS CDKの公式情報(AWS CDK API Reference)を確認してみると良いでしょう。このようにしてCDKでは、リソース間の依存関係を自動で解決してくれます。実際にデプロイしてAWSコンソールで確認してみましょう。

Terminal
cdk synth
cdk deploy

そして、出来上がったEC2インスタンスを確認してみましょう。


aws-cdk-2-1

aws-cdk-2-2

無事、作製したVPC(MyAppVpc)にEC2が配置され、作成したセキュリティグループとロールが付与されていることが確認できました。

まとめ

今回の記事では、AWS CDKの応用的な使い方として、複数のリソースを連携する例を紹介しました。CDKを使うことで、インフラ構築の柔軟性が大幅に向上し、開発者としてより効率的にクラウド環境を管理できますので、ぜひトライしてみてください。

参考

AWS CDK API Reference

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?