はじめに
CDKを始めるにあたり、AWSドキュメントを参考に環境設定を試してみました
ドキュメントだけでは詰まったり方法に迷うところがあったので
手順の画面キャプチャと発生したエラーやその対応内容などを記事にしました
【CDKに関するAWSドキュメント】
この記事のゴール
AWS CDK環境を構築してローカル環境のVisualStudioからAWS環境にCloudFormationのスタックを反映する
AWS CDK のはじめかた
1.ローカルPC側の環境準備 ①インストーラーからツールのインストール
①VisualStudioCodeのインストール
私が試した環境ではVisualStudioCode(VSCode)を利用してローカル環境でCDKを利用しました
VSCodeのインストーラーは以下のページよりダウンロードしてください
②npmインストール
CDK関連のツールをインストールする際にnpmコマンドを使うため、npmもインストールしてください
インストーラーは以下のページよりNode.jsをダウンロードしてください
インストーラーからインストールが完了したら、Windows環境ではパスの設定をしてください
私の環境では「Path」に
C:\Program Files\nodejs
を追加しました
2.ローカルPC側の環境準備 ②VSCodeの環境整備
①AWS CLIのインストール
以下のURLよりインストーラーをダウンロードしてAWS CLIのインストールを実行してください
これによりターミナルから「aws~」のコマンドが実行可能になります
インストールが完了したら、VSCodeを再起動して以下のコマンドを実行し、バージョンが表示されることを確認してください
aws -- version
②CDK CLI のインストール
VSCodeのヘッダメニューから「View」→「Terminal」を選択してターミナルを開きます
ターミナルで以下のコマンドを実行してAWS CLIをインストールします
npm install -g aws-cdk
CDKのバージョンによって、この先のBootstrap実行時にエラーが出ることがあります
エラーが発生する場合は以下のコマンドでバージョン指定をおこなっってインストールしなおしてください
npm install -g aws-cdk@2.163.1
npm list -g
インストールされたらWindowsの環境変数にパスを設定してください
パスの確認は以下のコマンドで行えます
このコマンドにより確認できる
C:\Users\【ユーザー名】\AppData\Roaming\npm
をパス登録してください
パスが通っていれば、バージョン確認のコマンドでバージョンが確認できます
cdk --version
【発生しやすいエラー】
①powershell(.ps1)の実行を無効に設定されている
→「Get-ExecutionPolicy」コマンドを実行した際に「Restricted」となっているとCDKのコマンドが実行できなくなっています
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
を実行して設定を変更してください
2.AWS側の準備(IAM Identity Center)
①ユーザ作成
ローカルPC側のCDKからデプロイコマンドを使ってAWS環境にスタック作成をする際に必要になる認証情報の設定を行います
AWSコンソール画面から「IAM Identity Center」からユーザー追加を行います
※画面の指示に従い、ユーザ情報を入力して追加を行ってください
②ユーザグループの作成
各種操作の許可を与えるためのユーザーグループを設定します
グループには先ほど作成したユーザを含めるようにします
③許可セットの作成
必要な許可セットは以下のサービスに関するものを設定してください
・AmazonEC2ContainerRegistry~
・AmazonS3~
・AmazonSSM~
・AWSCloudFormation~
・AWSConfigUserAccess
・IAM~
・AWSLambda~
④許可セットの紐づけ
AWSアカウントから作成したユーザやユーザグループに対して許可セットの設定を行います
3.CDKアプリケーションの作成:初期設定
①CDK プロジェクトの作成
以下のコマンドでプロジェクトの初期構成を作成します
※私はPythonが使い慣れているので言語はPythonを指定しています
cdk init app --language python
Pythonの場合は以下のコマンドを実行して実行環境に必要な設定を行います
.venv/Scripts/activate
python -m pip install -r requirements.txt
②AWS環境の設定
SSO情報を入力してAWS環境との接続セッションを確立します
aws configure sso
上記コマンドを実行すると「SSO start URL」「SSO Region」などの入力を求められます
これらの値はAWSの「アクセスポータル」画面から確認することができますので、それらの値を入力してください
↓こんな画面から参照できる
③CDK スタックの環境を設定する方法
プロジェクトの「app.py」というファイルにアカウントIDとリージョン名を設定します
#!/usr/bin/env python3
import os
import aws_cdk as cdk
from cdk_pj.cdk_pj_stack import CdkPjStack
app = cdk.App()
CdkPjStack(app, "CdkPjStack",
# If you don't specify 'env', this stack will be environment-agnostic.
# Account/Region-dependent features and context lookups will not work,
# but a single synthesized template can be deployed anywhere.
# Uncomment the next line to specialize this stack for the AWS Account
# and Region that are implied by the current CLI configuration.
#env=cdk.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')),
# Uncomment the next line if you know exactly what Account and Region you
# want to deploy the stack to. */
env=cdk.Environment(account='【アカウントID】', region='【リージョン名】'),
# For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html
)
app.synth()
④AWS 環境のブートストラップ
以下のコマンドを実行することで、CDK デプロイのために環境が準備されます。
cdk bootstrap --profile 【プロファイル名】
【発生しやすいエラー】
①CDKのバージョンによってはエラーが発生する
→npm install -g aws-cdk@2.163.1 で別バージョンをインストールして試してください
②Encountered a permissions error performing・・・などの権限関連エラーが出る
→AWS関連の設定に記載したポリシー設定を追加/修正してください
AWS側を確認すると、CloudFormationのコンソール画面でCDKで作成したスタックが確認できる
4.CDKアプリケーションの作成:リソースの作成とデプロイ
①Lambda関数の作成
AWSに反映するリソースの例として今回はLambda関数を作成します
プロジェクトのフォルダ内にあるスタック定義のファイル(今回はcdk_pj_stack.py)を編集します
編集内容はAWSドキュメントのステップ6の内容と同じく、「Hello World!」を返すように修正します
②CloudFormationのテンプレートを作成
以下のコマンドを実行し、CloudFormationのテンプレートを作成します
cdk synth
成功すると生成されたCloudformationテンプレートの内容がログとして出力されます
③デプロイ
以下のコマンドを実行し、AWS環境にCloudFormationのテンプレートを反映してスタックを作成します
cdk deploy --profile 【プロファイル名】
セッションのタイムアウトにより、SSOの再接続が必要な場合があります
エラーメッセージで「Please log in using "aws sso login"」というメッセージが表示された場合は
以下のコマンドからSSO接続を再度行ってください
aws configure sso
5.結果確認
①スタック一覧で確認
②Lambda関数ができたことを確認
さいごに
AWSドキュメントのチュートリアルを進めることで、経験がないAWSサービスの理解を深めることができます
ただし、実際に動かしてみると意外と予想外のエラーでつまづくこともあるので
もし余裕があればドキュメントを読むだけではなく実際に手を動かしてみてください