AWS Cloud9
ユーザーガイド

AWS Cloud9 の AWS CDK サンプル

このサンプルでは、AWS Cloud9 開発環境で AWS クラウド開発キット (AWS CDK) を操作する方法を示します。AWS CDK は、AWS インフラストラクチャコンポーネントをコードとしてモデル化するために開発者が使用できる、ソフトウェアツールやライブラリのセットです。

AWS CDK に含まれている AWS Construct ライブラリを使用すると、AWS の多くのタスクをすばやく解決できます。たとえば、Fleet コンストラクトを使用すると、コードをホストのフリートに完全かつ安全にデプロイできます。独自のコンストラクトを作成してアーキテクチャのさまざまな要素をモデル化し、これらを他のユーザーと共有したり、コミュニティに公開したりできます。詳細については、「AWS Cloud Development Kit 開発者ガイド」を参照してください。

このサンプルを作成すると、AWS アカウントに課金される場合があります。これには、Amazon EC2、Amazon SNS、Amazon SQS などのサービスで発生する可能性がある料金も含まれます。詳細については、Amazon EC2 料金表Amazon SNS 料金表Amazon SQS 料金表を参照してください。

前提条件

このサンプルを使用する前に、以下の前提条件を満たしていることを確認します。

  • 既存の AWS Cloud9 EC2 開発環境 がある。 このサンプルでは、Amazon Linux または Ubuntu Server を実行する Amazon EC2 インスタンスに接続された EC2 環境 が既にあることを前提としています。別のタイプまたはオペレーティングシステムの 環境 がある場合、このサンプルの手順を調整して関連ツールをセットアップする必要がある場合があります。詳細については、「AWS Cloud9 で 環境 を作成する」を参照してください。

  • 既存の環境に既に開いている AWS Cloud9 IDE がある。 環境 を開くと、AWS Cloud9 によってその 環境 の IDE がウェブブラウザで開かれます。詳細については、「AWS Cloud9 で環境を開く」を参照してください。

ステップ 1: 必要なツールをインストールする

このステップでは、TypeScript プログラミング言語で記述されたサンプルを AWS CDK で実行するために必要なすべてのツールを環境にインストールします。

  1. Node Version Manager (nvm)。後で Node.js をインストールするために使用します。

  2. Node.js。サンプルに必要であり、Node Package Manager または npm が含まれています。これを使用して、後で TypeScript と AWS CDK をインストールします。

  3. TypeScript。このサンプルに必要です。(AWS CDK は、他のいくつかのプログラミング言語もサポートしています。)

  4. AWS CDK

ステップ 1.1: Node Version Manager (nvm) をインストールする

  1. AWS Cloud9 IDE のターミナルセッションで、最新のセキュリティ更新プログラムとバグ修正がインストールされていることを確認します。これを行うには、 yum update (Amazon Linux)または apt update (Ubuntu Server) コマンドを実行します。(新しいターミナルセッションを開始するには、メニューバーで、[Window (ウィンドウ)]、[New Terminal (新しいターミナル)] の順に選択します。)

    複数 Amazon Linux:

    sudo yum -y update

    Ubuntu Server の場合:

    sudo apt update
  2. nvm がインストール済みであるかどうかを確認します。これを行うには、--version オプションを使用して nvm コマンドを実行します。

    nvm --version

    成功すると、出力に nvm バージョン番号が表示されます。この場合、「ステップ 1.2: Node.js をインストールする」までスキップできます。

  3. nvm をダウンロードしてインストールします。これを行うには、次のコマンドを実行します。

    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
  4. nvm の使用を開始します。ターミナルセッションを閉じて再度開くか、nvm をロードするコマンドが含まれている ~/.bashrc ファイルを入手します。

    . ~/.bashrc

ステップ 1.2: Node.js をインストールする

  1. Node.js がインストール済みであるかどうかを確認します。インストール済みである場合は、インストール済みのバージョンが 8.12.0 以上であることを確認します。このサンプルは Node.js 8.12.0 を使用してテストされています。 確認するには、IDE でターミナルセッションが開いている状態で、--version オプションを使用して node コマンドを実行します。

    node --version

    Node.js がインストール済みである場合は、出力にバージョン番号が表示されます。バージョン番号が v8.12.0 である場合は、「ステップ 1.3: TypeScript をインストールする」に進みます。

  2. Node.js 8.12.0 をインストールするには、nvm コマンドを実行します。次のように install アクションとバージョン番号を指定します。

    nvm install v8.12.0
  3. Node.js 8.12.0 の使用を開始します。これを行うには、nvm コマンドを実行します。次のように alias アクション、エイリアスを作成するバージョン番号、このエイリアスで使用するバージョンを指定します。

    nvm alias default 8.12.0

    注記

    上のコマンドでは、Node.js 8.12.0 をデフォルトバージョンとして設定します。別の方法として nvm コマンドに alias アクションではなく、use アクションを指定することもできます (例: nvm use 8.12.0)。ただし、use アクションを使用すると、このバージョンの Node.js の実行先は現在実行中のターミナルセッションに限られます。

  4. Node.js 8.12.0 を使用していることを確認するには、node --version コマンドを再度実行します。正しいバージョンがインストールされている場合は、出力にバージョン v8.12.0 と表示されます。

ステップ 1.3: TypeScript をインストールする

  1. TypeScript がインストール済みであるかどうかを確認します。これを行うには、IDE でターミナルセッションが開いている状態で、--version オプションを使用してコマンドライン TypeScript コンパイラーを実行します。

    tsc --version

    TypeScript がインストール済みである場合は、出力に TypeScript のバージョン番号が表示されます。TypeScript がインストール済みである場合は、手順 1.4: AWS CDK をインストールする に進みます。

  2. TypeScript をインストールします。これを行うには、npm コマンドに install アクション、-g オプション、および TypeScript パッケージの名前を指定して実行します。これにより、TypeScript がグローバルパッケージとして 環境 にインストールされます。

    npm install -g typescript
  3. TypeScript がインストールされていることを確認します。これを行うには、--version オプションを使用してコマンドライン TypeScript コンパイラーを実行します。

    tsc --version

    TypeScript がインストール済みである場合は、出力に TypeScript のバージョン番号が表示されます。

手順 1.4: AWS CDK をインストールする

  1. AWS CDK がインストール済みであるかどうかを確認します。これを行うには、IDE でターミナルセッションが開いている状態で、--version オプションを使用して cdk コマンドを実行します。

    cdk --version

    AWS CDK がインストール済みである場合は、出力に AWS CDK のバージョン番号とビルド番号が表示されます。ステップ 2: コードを追加する に進んでください。

  2. AWS CDK をインストールするには、npm コマンドを実行し、その際 install アクション、インストールする AWS CDK パッケージの名前、環境にグローバルにパッケージをインストールするための -g オプションを使用します。

    npm install -g aws-cdk
  3. AWS CDK がインストールされ、正しく参照されていることを確認します。これを行うには、--version オプションを使用して cdk コマンドを実行します。

    cdk --version

    成功すると、AWS CDK のバージョン番号とビルド番号が表示されます。

ステップ 2: コードを追加する

このステップでは、AWS CDK でプログラムにより AWS CloudFormation スタックをデプロイするために必要なすべてのソースコードが含まれたサンプルの TypeScript プロジェクトを作成します。このスタックでは、Amazon SNS トピックと Amazon SQS キューを AWS アカウントに作成し、キューをトピックにサブスクライブします。

  1. IDE でターミナルセッションが開いている状態で、プロジェクトのソースコードを保存するディレクトリ (例: ~/environment/hello-cdk ディレクトリ) を 環境 に作成します。次に、このディレクトリに切り替えます。

    rm -rf ~/environment/hello-cdk # Remove this directory if it already exists. mkdir ~/environment/hello-cdk # Create the directory. cd ~/environment/hello-cdk # Switch to the directory.
  2. このディレクトリを、AWS CDK の TypeScript 言語プロジェクトとして設定します。これを行うには、cdk コマンドに init アクション、sample-app テンプレート、--language オプション、およびプログラミング言語の名前を指定して実行します。

    cdk init sample-app --language typescript

    これにより、ディレクトリ内に以下のファイルとサブディレクトリが作成されます。

    • 隠しサブディレクトリ .git と隠しファイル .gitignore。これにより、プロジェクトは Git などのソース管理ツールと互換性を持ちます。

    • lib サブディレクトリ。hello-cdk-stack.ts ファイルが含まれます。このファイルには、AWS CDK スタック用のコードが含まれます。このコードは、この手順の次のステップで説明します。

    • bin サブディレクトリ。hello-cdk.ts ファイルが含まれます。このファイルには、AWS CDK アプリケーション用のエントリポイントが含まれます。

    • node_modules サブディレクトリ。必要に応じてアプリケーションとスタックで使用できるサポート用のコードパッケージが含まれます。

    • 隠しファイル .npmignore。コードのビルド時に npm で使用しない種類のサブディレクトリやファイルのリストが含まれます。

    • cdk.json ファイル。このファイルの情報を使用すると cdk コマンドを実行しやすくなります。

    • package-lock.json ファイル。このファイルの情報を使用して、npm はビルドや実行に伴うエラーを減らすことができます。

    • package.json ファイル。このファイルの情報を使用すると、npm コマンドの実行が容易になり、ビルドと実行に伴うエラーも減る可能性があります。

    • README.md ファイル。npm と AWS CDK で実行できる便利なコマンドのリストがあります。

    • tsconfig.json ファイル。このファイルの情報を使用すると、tsc コマンドの実行が容易になり、ビルドと実行に伴うエラーも減る可能性があります。

  3. [Environment (環境)] ウィンドウで、lib/hello-cdk-stack.ts ファイルを開き、このファイル内で次のコードを参照します。

    import sns = require('@aws-cdk/aws-sns'); import sqs = require('@aws-cdk/aws-sqs'); import cdk = require('@aws-cdk/cdk'); export class HelloCdkStack extends cdk.Stack { constructor(parent: cdk.App, name: string, props?: cdk.StackProps) { super(parent, name, props); const queue = new sqs.Queue(this, 'HelloCdkQueue', { visibilityTimeoutSec: 300 }); const topic = new sns.Topic(this, 'HelloCdkTopic'); topic.subscribeQueue(queue); } }
    • StackAppStackPropsQueue、および Topic の各クラスは、AWS CloudFormation スタックとそのプロパティ、実行可能プログラム、Amazon SQS キュー、および Amazon SNS トピックをそれぞれ表します。

    • HelloCdkStack クラスは、このアプリケーションの AWS CloudFormation スタックを表します。このスタックには、このアプリケーションの新しい Amazon SQS キューおよび Amazon SNS トピックが含まれます。

  4. [Environment (環境)] ウィンドウで、bin/hello-cdk.ts ファイルを開き、このファイル内で次のコードを参照します。

    #!/usr/bin/env node import cdk = require('@aws-cdk/cdk'); import { HelloCdkStack } from '../lib/hello-cdk-stack'; const app = new cdk.App(); new HelloCdkStack(app, 'HelloCdkStack'); app.run();

    このコードは、lib/hello-cdk-stack.tsHelloCdkStack クラスをロードし、インスタンス化して、実行します。

  5. npm を使用して TypeScript コンパイラーを実行し、コーディングエラーをチェックします。次に、AWS CDK を有効にしてプロジェクトの bin/hello-cdk.js ファイルを実行します。これを行うには、プロジェクトのルートディレクトリから、npm コマンドを実行します。次のように run アクションを使用し、package.json ファイルの build コマンド値を指定します。

    npm run build

    上のコマンドは、TypeScript コンパイラーを実行します。このコンパイラーは、bin/hello-cdk.d.ts ファイルと lib/hello-cdk-stack.d.ts ファイルのサポートを追加します。また、このコンパイラーは、hello-cdk.js ファイルおよび hello-cdk-stack.js ファイルを、hello-cdk.ts ファイルおよび hello-cdk-stack.ts ファイルとしてトランスパイルします。

ステップ 3: コードを実行する

このステップでは、bin/hello-cdk.js ファイル内のコードに基づいて AWS CloudFormation スタックテンプレートを AWS CDK で作成します。次に、AWS CDK でスタックをデプロイします。これにより、Amazon SNS トピックと Amazon SQS キューを作成し、キューをトピックにサブスクライブします。次に、トピックからキューにメッセージを送信して、トピックとキューが正常にデプロイされていることを確認します。

  1. AWS CDK で AWS CloudFormation スタックテンプレートを作成します。これを行うには、IDE でターミナルセッションが開いている状態で、プロジェクトのルートディレクトリから、 cdk コマンドに synth アクションとスタック名を指定して実行します。

    cdk synth HelloCdkStack

    成功すると、出力に AWS CloudFormation スタックテンプレートの Resources セクションが表示されます。

  2. AWS CDK アプリケーションを、特定の AWS アカウントおよび AWS リージョンを組み合わせた環境に初めてデプロイする場合は、ブートストラップスタックをインストールする必要があります。このスタックには、AWS CDK でさまざまなオペレーションを実行するために必要な各種リソースが含まれています。例えば、AWS CDK では、このスタックに含まれている Amazon S3 バケットを使用して、デプロイプロセス中にテンプレートとアセットを保存します。ブートストラップスタックをインストールするには、bootstrap アクションを使用して cdk コマンドを実行します。

    cdk bootstrap
  3. AWS CDK で AWS CloudFormation スタックテンプレートを実行してスタックをデプロイします。これを行うには、プロジェクトのルートディレクトリから、cdk コマンドに deploy アクションとスタック名を指定して実行します。

    cdk deploy HelloCdkStack

    成功すると、エラーなしでデプロイされた HelloCdkStack スタックが出力に表示されます。

    注記

    出力に表示されたメッセージで、スタックで環境が定義されていない、AWS 認証情報が標準の場所から取得できない、リージョンが設定されていないなどと報告された場合は、AWS 認証情報が IDE に正しく設定されていることを確認し、cdk deploy コマンドを再度実行します。詳細については、AWS Cloud9 の環境から AWS のサービスを呼び出す を参照してください。

  4. Amazon SNS トピックと Amazon SQS キューが正常にデプロイされたことを確認するには、トピックにメッセージを送信し、キューでメッセージが受信されたことを確認します。これを行うには、AWS Command Line Interface (AWS CLI) や aws-shell などのツールを使用できます。これらのツールの詳細については、AWS Cloud9 の AWS Command Line Interface および aws-shell のサンプル を参照してください。

    たとえば、トピックにメッセージを送信するには、IDE でターミナルセッションが開いている状態で、AWS CLI を使用して Amazon SNS publish コマンドを実行します。次のように、メッセージの件名と本文、トピックの AWS リージョン、トピックの Amazon リソースネーム (ARN) を指定します。

    aws sns publish --subject "Hello from the AWS CDK" --message "This is a message from the AWS CDK." --topic-arn arn:aws:sns:us-east-2:123456789012:HelloCdkStack-HelloCdkTopic1A234567-8BCD9EFGHIJ0K

    上のコマンドで、arn:aws:sns:us-east-2:123456789012:HelloCdkStack-HelloCdkTopic1A234567-8BCD9EFGHIJ0K は、AWS CloudFormation がトピックに割り当てる ARN に置き換えてください。この ID を取得するには、Amazon SNSlist-topics コマンドを実行できます。

    aws sns list-topics --output table --query 'Topics[*].TopicArn'

    成功すると、publish コマンドの出力に、発行されたメッセージの MessageId 値が表示されます。

    キューでメッセージが受信されたことを確認するには、Amazon SQSreceive-message コマンドにキューの URL を指定して実行します。

    aws sqs receive-message --queue-url https://queue.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueue1A234567-8BCD9EFGHIJ0K

    上のコマンドで、https://queue.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueue1A234567-8BCD9EFGHIJ0K は、AWS CloudFormation がキューに割り当てる ARN に置き換えてください。この URL を取得するには、Amazon SQSlist-queues コマンドを実行できます。

    aws sqs list-queues --output table --query 'QueueUrls[*]'

    成功すると、receive-message コマンドの出力に、受信されたメッセージの情報が表示されます。

手順 4: クリーンアップ

このサンプルを使い終わった後で AWS アカウントに引き続き課金されないように、AWS CloudFormation スタックを削除する必要があります。これにより、Amazon SNS トピックと Amazon SQS キューが削除されます。環境 も削除する必要があります。

ステップ 4.1: スタックを削除する

IDE でターミナルセッションが開いている状態で、プロジェクトのルートディレクトリから、cdk コマンドに destroy アクションとスタック名を指定して実行します。

cdk destroy HelloCdkStack

スタックの削除を確認するメッセージが表示されたら、「y」と入力し、Enter キーを押します。

成功すると、エラーなしで HelloCdkStack スタックが削除されたことが出力に表示されます。

ステップ 4.2: 環境 を削除する

環境 を削除する方法については、AWS Cloud9 で環境を削除する を参照してください。