初めてのAWS CDK|開発環境構築〜初デプロイまでやってみた
こんにちは、mayaです。
今日は初めてのIaCチャレンジということで、AWS CDKを使ってローカル環境の構築から実装・デプロイまでやってみようと思います。
今回、参考にした記事はこちらです↓
この記事でわかること
- AWS CDKの初歩的なローカル開発環境構築方法
- AWS CDKを使ったLamda関数の作成方法
- 作成したコードのデプロイ方法
筆者のステータス
- Webアプリケーションエンジニア(フロント/バック)
- 業務でのインフラ構築経験なし
- AWSの主要サービスVPC/EC2/RDSを使って、簡易なWP環境を構築したことがあるくらい
STEP1 事前準備
AWS CDKを使ってコード作成・デプロイを行うために、まずは下記3つを準備する必要があります!
- Node.js
- AWS CLI ※コマンド操作でクラウドに接続するために使用
- AWS認証情報 ※あなたのAWSアカウントに接続するために使用
- AWS Toolkit ※VSCODEの拡張機能
Node.jsについては環境がすでにできているものとして進めます。
AWS CLIはこちらの公式ドキュメントを見れば30秒くらいでインストールできます。
以下のコマンドが実行して結果が返ってくれば、「AWS認証情報の用意」以外の準備はOKです。
aws --version
node -v
npx cdk --version
少し難しかったのがAWS認証情報の用意についてで、自分はここで詰まりました。
ここからは少し時間をとって、AWS CLIで認証情報の設定を行った方法を紹介します。
IAM Identity Center(SSO)が推奨されてるらしい
AWS CLIで認証を行い自分のアカウントに接続する方法はいくつかあるようです。
現在推奨されているのが「IAM Identity Center」を利用して短期間だけ有効なセッションを作成する方法らしく、今回参考にした記事でもこの用法を使ってました。
参考:AWS CLI を使用した IAM アイデンティティセンター認証の設定
流れとしてはこんな感じ
- AWS Identity Centerで適当にアカウント作成
- ローカルのターミナル等で
aws configure sso
コマンドを実行 -
sesion name
やstart URL
などの必要情報入力 - ブラウザが開くので、1.で作成したアカウントにログイン
- セッション確立
$ aws configure sso
SSO session name (Recommended): my-sso
SSO start URL [None]: https://my-sso-portal.awsapps.com/start
SSO region [None]: us-east-1
SSO registration scopes [None]: sso:account:access
うまくいかなかった(泣)
参考記事通りに進めたら、うまくいかなかったです😭
この後の作業で、AWS CDKの開発環境を作るためにnpx cdk bootstrap
というコマンドを実行するんですが、その際に下記のエラーが出てしまって進めませんでした。
Unable to resolve AWS account to use. It must be either configured when you define your CDK Stack, or through the environment
とりあえず非推奨の方法で認証クリア
原因がよくわからなかったので、とりあえず非推奨の方法で進めることにしました。
- AWS IAMでユーザーのシークレットキーを作成
- 1.で作成した情報を環境変数として設定
export AWS_ACCESS_KEY_ID=xxxxxxx
export AWS_DEFAULT_REGION=xxxxxxx
export AWS_SECRET_ACCESS_KEY=xxxxxxx
これで行けました。
シークレットキーは長期的認証情報にあたるので、AWS Identity Center(SSO)と比較するとあまりセキュアとは言えないので、段々使われなくなってきてるみたいですね。
AWS Identity Center、この後勉強しようと思います。
AWS CDKプロジェクトを作成する
開発環境の構築が完了したので、早速AWS CDKプロジェクトを作成していきます。
適当な作業ディレクトリを作って移動したら、下記のコマンドを順番に実行してください
npx cdk init app --language=typescript
npx cdk bootstrap
今回はCDKのコードを書くためにTypeScriptを使います。
上記のコマンドを実行することで、プロジェクトファイルを保存するS3やIAMなど、CDKのデプロイに必要なリソースがプロビジョニングされます。
Lamda関数を記述していく
プロジェクトができたので、Lamdaのリソースを定義していきましょう。
lib/hello-cdk-stack.ts
ファイルに以下のコードをコピペしてください。
コードの詳しい解説はしないですが、呼び出されると「Hello World!」と出力するだけの関数を定義しています。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
// Import the Lambda module
import * as lambda from 'aws-cdk-lib/aws-lambda';
export class HelloCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define the Lambda function resource
const myFunction = new lambda.Function(this, "HelloWorldFunction", {
runtime: lambda.Runtime.NODEJS_20_X, // Provide any supported Node.js runtime
handler: "index.handler",
code: lambda.Code.fromInline(`
exports.handler = async function(event) {
return {
statusCode: 200,
body: JSON.stringify('Hello World!'),
};
};
`),
});
// 追記 ここから
// Define the Lambda function URL resource
const myFunctionUrl = myFunction.addFunctionUrl({
authType: lambda.FunctionUrlAuthType.NONE,
});
// Define a CloudFormation output for your URL
new cdk.CfnOutput(this, "myFunctionUrlOutput", {
value: myFunctionUrl.url,
})
// 追記 ここまで
}
}
デプロイする
デプロイはめちゃくちゃ簡単で、下記を実行するだけです。
npx cdk deploy
成功すると、ログの最後の方に「Outputs:...」と出力されてると思います。
これがLamda関数を起動するためのURLになります。
Outputs:
HelloCdkStack.myFunctionUrlOutput = https://dfadfdafdafadfadfadfafad.lambda-url.ap-northeast-1.on.aws/
curlでURLを叩くと、「Hello World!」と出力されるはずです。
curl https://dfadfdafdafadfadfadfafad.lambda-url.ap-northeast-1.on.aws/
リソースを削除する
今回作成したリソースは、下記のコマンドで削除できます。簡単ですね🎶
npx cdk destroy
以上、AWS CDKで開発環境構築〜デプロイを行う方法でした!
読んでいただきありがとうございました。
Discussion