見出し画像

Cloud9からAWS CDKのサンプルを実行してみた

以下の手順を参考に、Cloud9上でCDKを実行する。
SNSトピックとSQSトピックを作る手順になっている

検証環境

・Cloud9 (Systems Manager経由アクセスで構築)
・Amazon Managed Temporary Credential(AMTC)をON(デフォルトON)

Cloud9からcdk deployなどを実行する際に、アクセス権不足のエラーが出ると予想していたのですが、エラーが発生せず普通にdeployできました。
(以前、Cloud9からchalice deployした時はエラーになったのだけど・・・)

Cloud9の環境

Cloud9を起動し、Cloud9のターミナルで以下のコマンドを実行
nodeやcdkが最初からインストールされています。

注意事項
 Cloud9はライブラリの自動バージョンUPは行いません。
 自分で適宜バージョンUPする必要があります。

$ node --versionv
16.17.0

$ cdk --version
2.39.1 (build f188fac)

CDKプロジェクトの作成

1.作業ディレクトリを作成

Cloud9のターミナルから実行します

//作業用のディレクトリを作成
$ mkdir ~/environment/hello-cdk
$ cd ~/environment/hello-cdk

2.CDKプロジェクトの作成(cdk init)

プロジェクト名;sample-app
プログラミング言語:typescript
※CDKはマルチ言語対応しており、python,java,c#などを選択可能
※Go言語は現在Developerプレビュー版

// CDKプロジェクトの作成
$ cdk init sample-app --language typescript
:
✅ All done!
****************************************************
*** Newer version of CDK is available [2.40.0]   ***
*** Upgrade recommended (npm install -g aws-cdk) ***
****************************************************

ここで、AWS CDKのアップデートを推奨される。
メッセージに従いcdkをアップデートする

// メッセージの通り実行するも、--forceオプションを入れるように言われる
$ npm install -g aws-cdk
npm ERR! code EEXIST
npm ERR! path /home/ec2-user/.nvm/versions/node/v16.17.0/bin/cdk
npm ERR! EEXIST: file already exists
npm ERR! File exists: /home/ec2-user/.nvm/versions/node/v16.17.0/bin/cdk
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/ec2-user/.npm/_logs/2022-09-03T02_50_18_800Z-debug-0.log
// 気を取り直して、--forceオプションを入れて実行
$ npm install -g aws-cdk --force
npm WARN using --force Recommended protections disabled.

added 1 package, and audited 2 packages in 1s

found 0 vulnerabilities

// cdkのバージョンを確認
$ cdk --version
2.40.0 (build 56ba2ab)

3.ビルド(npm rum build)

$ npm run build

4.コードの実行

// CloudFormationテンプレートの生成
$ cdk synth HelloCdkStack

5.デプロイ先の設定(初回のみ実行)

CDKが利用するためのS3バケットが作成されます

// 初回のみ実行
$ cdk bootstrap

デプロイ(cdk deploy)

$ cdk deploy HelloCdkStackSynthesis time: 15.07s

HelloCdkStack: building assets...
:
HelloCdkStack: assets built
:
IAM Statement Changes
┌───┬─────────────────────────────────┬────────┬─────────────────┬─────────────────────────────────┬───────────────────────────────────┐
│   │ ResourceEffectActionPrincipalCondition                         │
├───┼─────────────────────────────────┼────────┼─────────────────┼─────────────────────────────────┼───────────────────────────────────┤
│ + │ ${HelloCdkQueue.Arn}            │ Allow  │ sqs:SendMessageService:sns.amazonaws.com       │ "ArnEquals": {                    │
│   │                                 │        │                 │                                 │   "aws:SourceArn": "${HelloCdkTop │
│   │                                 │        │                 │                                 │ ic}"                              │
│   │                                 │        │                 │                                 │ }                                 │
└───┴─────────────────────────────────┴────────┴─────────────────┴─────────────────────────────────┴───────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)

Do you wish to deploy these changes (y/n)? y

変更内容を確認し、yを入力します

HelloCdkStack: creating CloudFormation changeset...

✅  HelloCdkStack

✨  Deployment time: 93.22s

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:123456789012:stack/HelloCdkStack/....省略

✨  Total time: 108.3s

デプロイが完了すると、上記のようなメッセージが表示されます。

配備リソースの確認

1.Stackの確認

2.SNSトピックの確認

ARNを控えておく(後で動作確認で利用する)

3.SQSキューの確認

URLを控えておく(後で動作確認で利用する)

動作確認

SNSトピックとSQSキューの動作確認を行います。
トピックにメッセージを送信し、キューで受信できることを確認します

1.メッセージの送信

aws snsコマンドを使ってメッセージを送信する
aws sns publish --subject "題名" --message "メッセージ本文" --topic-arn <topicのARN>

// トピックにメッセージを送信(成功すると、メッセージIDが返却される)
$ aws sns publish --subject "Hello from the AWS CDK" --message "This is a message from the AWS CDK." --topic-arn arn:aws:sns:ap-northeast-1:123456789012:HelloCdkStack-HelloCdkTopic1F583424-35t8ODFvoFiS
{
    "MessageId": "81b6e88d-6667-521c-a212-b301860ea3ce"
}

2.メッセージの受信

aws sqsコマンドを使いメッセージを受信する
aws sqs receive-message --queue-url <QueueのURL>

// メッセージを受信(一度受信するとメッセージはなくなるため、2回目は空になる)
$ aws sqs receive-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueueB56C77B9-OuYJcq9lFOtq
{
    "Messages": [
        {
            : 省略
        }
    ]
}

クリーンナップ(後始末)

cdk destoryコマンドを使うと、作成した全てのリソースを削除することができます。

$ cdk destroy HelloCdkStack
Are you sure you want to delete: HelloCdkStack (y/n)? 

 ✅  HelloCdkStack: destroyed


Appendix

CloudFormationスタックの確認

$ cdk list
HelloCdkStack

CloudFormationテンプレートの確認

cdk synth <スタック名>

$ cdk synth HelloCdkStack
Resources:
  HelloCdkQueueB56C77B9:
    Type: AWS::SQS::Queue
    Properties:
      VisibilityTimeout: 300
    UpdateReplacePolicy: Delete
    DeletionPolicy: Delete
    Metadata:
      aws:cdk:path: HelloCdkStack/HelloCdkQueue/Resource
:
: <省略>
:
Rules:
  CheckBootstrapVersion:
    Assertions:
      - Assert:
          Fn::Not:
            - Fn::Contains:
                - - "1"
                  - "2"
                  - "3"
                  - "4"
                  - "5"
                - Ref: BootstrapVersion
        AssertDescription: CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI.

トピックリストの確認

$ aws sns list-topics --output table --query 'Topics[*].TopicArn'
----------------------------------------------------------------------------------------------
|                                         ListTopics                                         |
+--------------------------------------------------------------------------------------------+
|  arn:aws:sns:ap-northeast-1:123456789012:HelloCdkStack-HelloCdkTopic1F583424-35t8ODFvoFiS  |
+--------------------------------------------------------------------------------------------+

キューリストの確認

$ aws sqs list-queues --output table --query 'QueueUrls[*]'
--------------------------------------------------------------------------------------------------------------
|                                                 ListQueues                                                 |
+------------------------------------------------------------------------------------------------------------+
|  https://ap-northeast-1.queue.amazonaws.com/123456789012/HelloCdkStack-HelloCdkQueueB56C77B9-OuYJcq9lFOtq  |
+------------------------------------------------------------------------------------------------------------+

この記事が気に入ったらサポートをしてみませんか?