1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境構築からデプロイまでの初心者のAWS CDK

Last updated at Posted at 2024-10-24

AWS CDKの勉強を始めてみた

仕事でAWS CDKを使うので勉強をはじめました。
CCNAの勉強でAnsibleなどのインフラ構築ツールみたいなものの存在は知っており、AWS CDKについてもなんとなく資格勉強の時に「Pythonでインフラ構築できるやつ」という認識だったのでどんなものかは知っておりました。

今回は実際に環境構築してCDKでインフラ構築を行ってみたいと思います。
まずは環境構築ですが、node関係が必要なので下記記事を参考にPCにnodeやnpmを使える環境を構築していきます。

CDKインストール

npm install -g aws-cdk
cdk --version

npmを実行したときに、PATHが設定されていないなど警告される場合

fnm env --use-on-cd | Out-String | Invoke-Expression

を実行します。
上記を毎回実行するのが面倒であれば、

@echo off
fnm env --use-on-cd | Out-String | Invoke-Expression

テキストファイルに上記を記載し、「startup.bat」
として保存しておきます。右クリックでショートカットを作成し、
Win+Rで「shell:startup」と入力して、出てきたフォルダに先ほどのショートカットを放り込みます。
これでPCを立ち上げるたびに上のコマンドを入力する必要がなくなります。

問題なければ構築完了です。

アクセスキー等の取得

AWS CLI の準備とアクセスキーを取得していきます。

上記サイトで解説しているので参考にインストール&設定が完了しました。

IAMでリソースへのアクセスを許可する設定が必要なので対応します。
Screenshot 2024-10-24 142026.png

IAMでポリシーを追加します。
AdministratorAccess または AWSCloudFormationFullAccessを検索して追加します。

再度

cdk bootstrap aws://ACCOUNT-NUMBER/REGION

を実行します。

プロジェクトの作成

下記コマンドでプロジェクトを作成します。

cdk init --language typescript

AWS環境を設定します。
下記コマンドでアカウントの確認を行えます。

aws sts get-caller-identity --query "Account" --output text

下記でリージョンの確認をします。

aws configure get region

上記チュートリアルに従って下記を編集します。

bin/プロジェクト名.ts

#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { CdkDemoStack } from '../lib/cdk-demo-stack';

const app = new cdk.App();
new CdkDemoStack(app, 'CdkDemoStack', {
  env: { account: 'アカウントナンバー', region: 'リージョン' },
});

CdkDemoStackはプロジェクト名が入ります。

準備が整いました

下記コードでデプロイする準備が完了します。

cdk bootstrap

Screenshot 2024-10-24 144501.png

構文にエラーがないか確かめる。

npm run build

アプリ内のCDKスタックを一覧表示します。

cdk list

CDKスタックについてはこちら

まだ完全に理解していないが、リソースみたいなものと理解している。

チュートリアル通り、まずLambdaを定義します。

lib/cdk-demo-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 CdkDemoStack 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!'),
          };
        };
      `),
    });
  }
}

下記にどのようにLambda関数をURLで実行するか定義していきます。
lib/cdk-demo-stack.ts

    // Define the Lambda function resource の塊の下に下記を記載
    
     // 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,
      })

CloudFormationテンプレートを合成するコマンドを実行します。
AWS CDKは最終的にCloudFormationを実行することになるので下記コマンドでテンプレートを作成します。

cdk synth

yaml形式のテンプレートが表示されます。

デプロイを行う

下記コードでデプロイ完了です。

cdk deploy

デプロイが完了するとエンドポイントURLが出力されるので控えておきます。

下記コマンドでURLをたたいてみます。

curl [URL]

ステータスコード200,HelloWorldが返されており実行成功です。

Screenshot 2024-10-24 153251.png

スタックを変更してみる

Lambdaを実行して返すメッセージを変更します。

 return {
            statusCode: 200,
            body: JSON.stringify('Hello CDK!'),
          };

下記コマンドを実行してCloudFormationテンプレートを作り直します。

cdk diff

実行すると差分を表示してくれました。
Screenshot 2024-10-25 090758.png

デプロイしなおします。

cdk deploy

実行して確かめます。

curl [URL]

返すメッセージがちゃんと変更されました。
Screenshot 2024-10-25 091148.png

認証がないLambdaなのでセキュリティのために削除しておきます。

cdk destroy

お金かかると怖いのできれいに削除しておきましょう。
Screenshot 2024-10-25 091511.png

はじめてのCDKを終えてみて

意外と複雑でなくて使いやすいかもしれない。
細かい設定やVPCのリソースの立ち上げについてはめんどくさいらしいので、もうすこし勉強してみたいと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?