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 HelloCdkStack
✨ Synthesis time: 15.07s
HelloCdkStack: building assets...
:
HelloCdkStack: assets built
:
IAM Statement Changes
┌───┬─────────────────────────────────┬────────┬─────────────────┬─────────────────────────────────┬───────────────────────────────────┐
│ │ Resource │ Effect │ Action │ Principal │ Condition │
├───┼─────────────────────────────────┼────────┼─────────────────┼─────────────────────────────────┼───────────────────────────────────┤
│ + │ ${HelloCdkQueue.Arn} │ Allow │ sqs:SendMessage │ Service: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 |
+------------------------------------------------------------------------------------------------------------+
この記事が気に入ったらサポートをしてみませんか?