🐡

初めてのAWS CDK|開発環境構築〜初デプロイまでやってみた

2025/02/16に公開

こんにちは、mayaです。
今日は初めてのIaCチャレンジということで、AWS CDKを使ってローカル環境の構築から実装・デプロイまでやってみようと思います。

今回、参考にした記事はこちらです↓
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/hello_world.html

この記事でわかること

  • 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 アイデンティティセンター認証の設定

流れとしてはこんな感じ

  1. AWS Identity Centerで適当にアカウント作成
  2. ローカルのターミナル等でaws configure ssoコマンドを実行
  3. sesion namestart URLなどの必要情報入力
  4. ブラウザが開くので、1.で作成したアカウントにログイン
  5. セッション確立
aws configure ssoを実行した時の様子
$ 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

とりあえず非推奨の方法で認証クリア

原因がよくわからなかったので、とりあえず非推奨の方法で進めることにしました。

  1. AWS IAMでユーザーのシークレットキーを作成
  2. 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!」と出力するだけの関数を定義しています。

lib/hello-cdk-stack.ts
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