AWS CDKAWS Cloud9 のサンプル - AWS Cloud9

AWS CDKAWS Cloud9 のサンプル

このサンプルでは、AWS Cloud9 開発環境で AWS Cloud Development Kit (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. -AWSCDK

ステップ 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これを行うには、インストールスクリプトを実行します。この例では、v0.33.0 がインストールされていますが、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 がインストール済みであるかどうかを確認します。インストール済みである場合は、インストール済みのバージョンが 10.3.0 以上であることを確認します。このサンプルは Node.js 10.3.0 を使用してテストされています。IDE でターミナルセッションがまだ開いている状態でチェックするには、 --version オプションと共に node コマンドを実行します。

    node --version

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

  2. nvm コマンドを install アクションと共に実行して、Node.js 10.3.0 をインストールします。

    注記

    nvm install stable を実行して、Node.js の長期サポート (LTS) バージョンをインストールすることもできます。AWS Cloud9 のサポートでは、Node.js の LTS バージョンが追跡されます。

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

    nvm alias default 10.3.0
    注記

    上のコマンドでは、Node.js 10.3.0 をデフォルトバージョンとして設定します。または、 alias アクション (たとえば、 nvm use 10.3.0 )の代わりに use アクションと共に nvm コマンドとを使用できます。ただし、use アクションを使用すると、このバージョンの Node.js の実行先は現在実行中のターミナルセッションに限られます。

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

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

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

    tsc --version

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

  2. TypeScript をインストールします。これを行うには、install アクション、-g オプション、および TypeScript パッケージの名前を指定して npm コマンドを実行します。これにより、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 言語プロジェクトとして設定します。これを行うには、init アクション、sample-app テンプレート、--language オプション、およびプログラミング言語の名前を指定して cdk コマンドを実行します。

    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();

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

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

    npm run build

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

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

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

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

    cdk synth HelloCdkStack

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

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

    cdk bootstrap
    注記

    オプションを指定せずに cdk bootstrap を実行すると、デフォルトの AWS アカウントと AWS リージョンが使用されます。プロファイルとアカウント/リージョンの組み合わせを指定して、特定の環境をブートストラップすることもできます。例:

    cdk bootstrap --profile test 123456789012/us-east-1
  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 SNS list-topics コマンドを実行できます。

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

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

    キューでメッセージが受信されたことをチェックするには、Amazon SQS receive-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 SQS list-queues コマンドを実行できます。

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

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

ステップ 4: クリーンアップする

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

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

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

cdk destroy HelloCdkStack

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

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

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

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