こんにちは、soraです。
今回は、Cloud9上にCDK(Go)の実行環境を作ったことについて書いていきます。
ちなみに、CDK(TypeScript)についてはAWS workshop studioにて無料公開されているワークショップをご参照ください。 CDKやTypeScriptの初心者でも、それぞれを基礎から学べます。
・AWSのWorkShop
TypeScriptの基礎から始めるAWS CDK開発 入門
・WorkShopを実際にやってみた方の記事
プログラミング経験があまりない人にもおすすめなAWS CDKのワークショップ「TypeScriptの基礎から始めるAWS CDK開発 入門」の紹介
AWS Cloud9とは
AWS Cloud9は、AWS上に統合開発環境を簡単に作ることができ、ブラウザ上でコードの記述や実行ができるサービスです。
実態としては、EC2サーバを起動してその上に統合開発環境を作ってくれます。
特にローカル環境を汚したくない方やWindowsPCを使っていてローカルで開発環境を作るのを手間に感じる方は、利用すると便利なサービスだと思います。
AWS CDKとは
CDK(Cloud Development Kit)とは、TypeScriptやPython、Goなどのプログラミング言語を使用して、CloudFormationテンプレートを作成できるツールキットです。
やってみた
それでは、実際にCloud9上に環境を作っていきます。
Cloud9の構築
Cloud9のページから[Create environment]を押して、セットアップ画面で入力・設定変更をします。
EC2インスタンスは、t3.smallを選択します。
[Create]を押して、少し待つとセットアップが完了します。
セットアップが完了したら、Cloud9 IDEの列の[OPEN]から環境に入れます。
CDK(Go)の環境準備
Cloud9の場合、npmもaws-cliもデフォルトでインストールされています。
$ npm -v
8.19.3
$ aws --version
aws-cli/1.19.112 Python/2.7.18 Linux/4.14.301-224.520.amzn2.x86_64 botocore/1.20.112
新しいディレクトリを作成して移動します。
$ mkdir test-go && cd test-go
必要なgoファイルやmodファイルを生成します。
$ cdk init --language=go
コマンド実行して、ディレクトリ内に生成されたファイルは以下です。
※treeコマンドはデフォルトではインストールされていないため、使用する場合はインストールが必要です。
$ tree
.
├── cdk.json
├── go.mod
├── README.md
├── test-go.go
└── test-go_test.go
ビルドに必要なモジュールを追加して、go.sumファイルに情報を記載します。
$ go mod tidy
sumファイルが生成されていることが確認できます。
$ tree
.
├── cdk.json
├── go.mod
├── go.sum
├── README.md
├── test-go.go
└── test-go_test.go
CDKが利用するリソース群をCloudFormationスタックとしてデプロイします。
CDKを使う場合に、環境(アカウント/リージョン)ごとに1回行う必要があります。
$ cdk bootstrap
これで実行環境は完成です。
テスト
せっかくなので実際にCDKを使ってみます。
今回は空のS3バケットを作成してみます。
以下が使用するコードです。
デフォルトで記載されているコメントは削除し、追記した箇所にはコメントを追加しています。
test-go.go
package main
import (
"github.com/aws/aws-cdk-go/awscdk/v2"
//S3に必要なパッケージをインポート
"github.com/aws/aws-cdk-go/awscdk/v2/awss3"
"github.com/aws/constructs-go/constructs/v10"
//CDKで言語のマッピングをするためのパッケージをインポート
"github.com/aws/jsii-runtime-go"
)
type TestGoStackProps struct {
awscdk.StackProps
}
func NewTestGoStack(scope constructs.Construct, id string, props *TestGoStackProps) awscdk.Stack {
var sprops awscdk.StackProps
if props != nil {
sprops = props.StackProps
}
stack := awscdk.NewStack(scope, &id, &sprops)
//S3バケットを作成
awss3.NewBucket(stack, jsii.String("GoTestBucket"), &awss3.BucketProps{})
return stack
}
func main() {
defer jsii.Close()
app := awscdk.NewApp(nil)
NewTestGoStack(app, "TestGoStack", &TestGoStackProps{
awscdk.StackProps{
Env: env(),
},
})
app.Synth(nil)
}
func env() *awscdk.Environment {
return nil
}
先ほどのコードからCloudFormationテンプレートを生成して内容を確認します。
$ cdk synth
deployしたときのリソースの差分を確認します。
長いため一部省略していますが、Resourcesの部分でS3バケットが生成されることが確認できます。
$ cdk diff
Stack TestGoStack
……
Conditions
……
Resources
[+] AWS::S3::Bucket GoTestBucket GoTestBucket
Other Changes
……
CloudFormationテンプレートへの変換・スタックの作成を実施します。
$ cdk deploy
コマンド実行後に、CloudFormationテンプレート(TestGoStack)やS3が生成されていることが確認できます。
CDKToolKitはcdk bootstrapで生成されたもの、aws-cloud9はcloud9構築時に生成されたものです。
クリーンアップ
最後に、CloudFormationスタックの削除を実行します。
$ cdk destroy
以下のようにスタックが削除されていることがわかります。
ただし今回の場合では、テンプレートから作成したS3バケットは消えておりません。
これはRemovalPolicyがデフォルトでRetainとなっているためです。
こちらの詳細については、以下記事をご確認ください。
[AWS CDK(Cloud Development Kit)] スタック削除時にS3バケットも削除されるように設定する
最後に
今回は、Cloud9上にCDK(Go)の実行環境を作って実行するまでの流れを紹介しました。
TerraformやCDKなどのIaCは、AWSで構築を行う際に基本的に使われるため、興味がある方はぜひやってみてはいかがでしょうか。