はじめに
いつの間にかインフラにまで手を伸ばし、さらにインフラをコードで管理するようになっていた管理人です。
AWSなんてまともに使ってもいない。インフラ設計すらやったことない、経験0からCDKの沼に飛び込んだ記録を書いてみます。
今回の一連の内容は、以下の環境にて行います。
- macOS(v12.4)
- AWSアカウント
- 管理者(ルートユーザー)
- NPM
一連の記事で作成したプロジェクトは以下にコミットされており、ブランチと記事番号が連動しています。
AWS CLIとは
AWS CLIとは、AWSのリソース作成・削除などをWebGUIではなく、コマンドラインから操作し、管理するためのツールです。
CLIは動作するプラットフォームや言語の制限を受けにくく、様々なOSで利用することができます。
CLIを使うメリットは、これまでGUIで行っていた管理を自動化したり、リソース作成などの処理を簡単に再現できることです。
AWS CLIのセットアップ
AWS CLIを利用するために、ツールをインストールします。
インストール方法は以下の公式サイトが準備されているため、この記事では割愛します。
CLIを利用するためにはCLI専用のIAMユーザーを作成して利用することが推奨されています。
IAMユーザーの作成
ルートユーザーでAWSコンソールにログインし、IAMサービスを開きます。アクセス管理からユーザータブを選択肢、ユーザーを追加します。
ユーザー名は「cdk_user」とします。cdk_userはログインを不要とし、CDKからのデプロイ等で利用するため、認証タイプは「アクセスキー・プログラムによるアクセス」を選択しておきます。
cdk_userには「AdministratorAccess」のアクセス権限を付与します。 開発・検証環境ではAdministratorAccessのアクセス権限を付与し、開始時の作業効率を上げています。
その後のタグ設定については、各自必要に応じて行ってください。最終的な設定は以下のようになっているかと思います。
ユーザーの設定が終わったら、ユーザーを作成します。
credentialsの設定
cdkのコマンドを利用するためには、今作成したCDK専用ユーザーのアクセスキー・シークレットアクセスキーを設定する必要があります。
ここでは aws-cli
の configure
を用いて設定を行います。aws configure
で設定したcredential情報が、デフォルトで各種AWSのツールから参照されるようになります。
そのため、複数のawsアカウントを設定したい場合には、profile
オプションを利用して、credential情報に名前をもたせる必要があります。
今回は、デフォルトの設定として扱うため profile
オプションは指定しません。
以下のコマンドを実行すると、credential情報を入力する表示となりますので、それぞれ入力していきます。
$ aws configure AWS Access Key ID [None]: <アクセスキー> AWS Secret Access Key [None]: <シークレットアクセスキー> Default region name [None]: ap-northeast-1 Default output format [None]: json
デフォルトでデプロイ対象となるリージョンを ap-northeast-1
としていますが、必要に応じて変更してください。
設定が完了すると、~/.aws
に2つのファイルが生成されているはずです。
CDKとは
- CDKとは Cloud Development Kit の頭文字を取ったもの
- AWSのリソースを特定の言語で作成するためのもの
CDKを記述できる言語は以下の通りで、メジャーな言語からマイナーな言語までカバーされています。
- C#(.NET)
- F#
- Go
- Java
- Python
- Shell
- TypeScript
サンプルはAWS公式のGithubにあるので、参考にしてみてください。
CDKのインストール
まずは、CDKプロジェクトを管理するためのフォルダを作成します。(記事のGithubに合わせて、ディレクトリ名は aws-cdk-articles
とします)
$ mkdir aws-cdk-articles $ cd aws-cdk-articles
以下のコマンドでCDKをインストールします。
$ npm install aws-cdk
よくいろいろな記事で、-g
というオプションをつけているものがありますが、-g
はグローバルな領域に aws-cdk
をインストールするという意味になります。
今後、複数のCDKプロジェクトを管理するようになると、グローバル領域にあると色々厄介なので今回はプロジェクト単位で管理できるように、-g
をなくしてインストールします。
プロジェクト単位でインストールされたnpmライブラリは npx
をprefixにコマンドを実行する必要があります。
# グローバルで実行する場合 $ cdk --version # ローカルで実行する場合 $ npx cdk --version
さて、インストールされたCDKのバージョンをチェックします。
インストールしたときによってバージョンが異なりますので、適宜読み替えてください。
❯ npx cdk --version 2.27.0 (build 8e89048)
CDKプロジェクトの作成
CDKプロジェクトの作成は空ディレクトリで行う必要があるため、新規ディレクトリを作成して移動します。
$ mkdir cdk-project $ cd cdk-project $ npx cdk init app --language typescript Applying project template app for typescript # Welcome to your CDK TypeScript project This is a blank project for CDK development with TypeScript. The `cdk.json` file tells the CDK Toolkit how to execute your app. ## Useful commands * `npm run build` compile typescript to js * `npm run watch` watch for changes and compile * `npm run test` perform the jest unit tests * `cdk deploy` deploy this stack to your default AWS account/region * `cdk diff` compare deployed stack with current state * `cdk synth` emits the synthesized CloudFormation template Executing npm install... ✅ All done!
cdkで作成できるプロジェクトタイプは、以下の種類が存在していますが、今回はCDKアプリケーションを作成するため app
を指定しています。
Available templates: * app: Template for a CDK Application └─ cdk init app --language=typescript * lib: Template for a CDK Construct Library └─ cdk init lib --language=typescript * sample-app: Example CDK Application with some constructs └─ cdk init sample-app --language=typescript
実行後、以下のようなディレクトリ構成となっていればOKです。
aws-cdk-articles on 01-cdk_install via v16.5.0 on ☁️ (ap-northeast-1) ❯ ll Permissions Size User Group Date Modified Name drwxr-xr-x - h.nomura staff 25 Jun 16:43 . drwxr-xr-x - h.nomura staff 25 Jun 16:53 ├── .git drwxr-xr-x - h.nomura staff 22 Jun 21:44 ├── cdk-project .rw-r--r-- 93 h.nomura staff 22 Jun 21:43 │ ├── .gitignore .rw-r--r-- 65 h.nomura staff 22 Jun 21:43 │ ├── .npmignore drwxr-xr-x - h.nomura staff 22 Jun 21:43 │ ├── bin .rw-r--r-- 982 h.nomura staff 22 Jun 21:43 │ ├── cdk.json .rw-r--r-- 157 h.nomura staff 22 Jun 21:43 │ ├── jest.config.js drwxr-xr-x - h.nomura staff 22 Jun 21:43 │ ├── lib drwxr-xr-x - h.nomura staff 22 Jun 21:44 │ ├── node_modules .rw-r--r-- 299k h.nomura staff 22 Jun 21:44 │ ├── package-lock.json .rw-r--r-- 573 h.nomura staff 22 Jun 21:43 │ ├── package.json .rw-r--r-- 536 h.nomura staff 22 Jun 21:43 │ ├── README.md drwxr-xr-x - h.nomura staff 22 Jun 21:43 │ ├── test .rw-r--r-- 650 h.nomura staff 22 Jun 21:43 │ └── tsconfig.json drwxr-xr-x - h.nomura staff 22 Jun 21:33 ├── node_modules .rw-r--r-- 1.6k h.nomura staff 22 Jun 21:33 ├── package-lock.json .rw-r--r-- 52 h.nomura staff 22 Jun 21:33 ├── package.json .rw-r--r-- 20 h.nomura staff 22 Jun 21:18 └── README.md
これでCDKの導入は完了です。
次の章では、実際にCDKで簡単なリソースをデプロイしてみたいと思います。