はじめに
この連載ではAWSCDKを用いたaws環境構築の基本を学びます。
前回はawscdkの環境を構築しました。
今回はecs_patternsを使用して実際にaws環境を構築し、
Dockerで立てたアプリケーションfargate上で動作させてみましょう。
連載記事一覧
現在のモジュールの内容確認
実際に構築作業を行う前に前回作成したモジュールの内容を簡単に確認してみましょう。
まず、./cdk-test/bin/cdk-test.tsの中身をみてみましょう。
#!/usr/bin/env node import 'source-map-support/register'; import cdk = require('@aws-cdk/core'); import { CdkTestStack } from '../lib/cdk-test-stack'; const app = new cdk.App(); new CdkTestStack(app, 'CdkTestStack');
「new CdkTestStack(app, 'CdkTestStack');」デプロイ可能な1単位としてのスタックの作成、
「import { CdkTestStack } from '../lib/cdk-test-stack';」で実際のスタック(aws環境)の定義ファイルの読み込みを行なっています。
リージョンとアカウントはスタックが保持しています。
次に、./cdk-test/lib/cdk-test-stack.tsを見てみましょう。
import cdk = require('@aws-cdk/core'); export class CdkTestStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // The code that defines your stack goes here } }
constructorの中身に実際のawsリソースの定義を書き込んでいきます。「// The code that defines your stack goes here」の部分です。
実際に構築してみる
前回 作成したモジュールのルートディレクトリがカレントディレクトリの前提です。
依存ライブラリのインストールと、「cdk synth」で現在の定義をもとにクラウドフォーメーションのテンプレートファイルを生成しています。
cd cdk-test npm run build cdk synth
今回はec2 ecs aws-ecs-patternsのライブラリを使用します。
aws-ecs-patternsとは、複数のawsリソースを含む一般的パターンを定義しているライブラリです。このクラスのコンストラクタに、必要なリソースのインスタンスを渡すだけで、一般的なパターンのインフラ環境を簡単に作成できる、非常に強力なライブラリです。
npm install @aws-cdk/aws-ec2 @aws-cdk/aws-ecs @aws-cdk/aws-ecs-patterns
では実際に実装してみましょう。./cdk-test/lib/cdk-test-stack.tsを以下のようにしてください
import cdk = require('@aws-cdk/core'); import ec2 = require("@aws-cdk/aws-ec2"); import ecs = require("@aws-cdk/aws-ecs"); import ecs_patterns = require("@aws-cdk/aws-ecs-patterns"); export class CdkTestStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, "CdkTestVpc", { maxAzs: 2 }); const cluster = new ecs.Cluster(this, "CdkTestCluster", { vpc: vpc, clusterName: 'CdkTestCluster', }); const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDefinition'); const container = taskDefinition.addContainer('CdkTestContainer', { image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'), }); container.addPortMappings({ containerPort: 80 }); new ecs_patterns.ApplicationLoadBalancedFargateService(this, "CdkTestFargateService", { cluster: cluster, cpu: 512, desiredCount: 1, memoryLimitMiB: 1024, taskDefinition: taskDefinition }) } }
意味は見ればなんとなくわかりますよね。 実装完了しましたら、再度ビルド・クラウドフォーメーションテンプレートの生成し、内容を確認してみましょう。
npm run build cdk synth
デプロイ・動作確認
以下のコマンドでデプロイします。「cdk deploy 【スタック名】」です。
cdk deploy CdkTestStack
デプロイが完了しましたら、コンソールの最後に以下のような感じでロードバランサーのURLが表示されるので実際にアクセスしてみましょう。
Outputs: CdkTestStack.CdkTestFargateServiceLoadBalancerDNSF3C686C2 = CdkTe-CdkTe-1KDL9CV8X6FXD-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com CdkTestStack.CdkTestFargateServiceServiceURLD7D78101 = http://CdkTe-CdkTe-1KDL9CV8X6FXD-xxxxxxxxxx.ap-northeast-1.elb.amazonaws.com
こんな感じの画面が出るはずです。
今回、以下のリソースが作成されているはずですので、実際にAWSのコンソール画面から確認してみると良いでしょう。
VPC Public Subnet Private Subnet NAT Gateway Route Table Security Group ELB ECS Cluster ECS Service ECS Task Definition
削除は以下の感じで。
cdk destroy CdkTestStack
まとめ
今回はecs_patternsを使用してaws上でアプリを動作させました。 次回はcode piplineを作成しましょう。