2
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?

More than 1 year has passed since last update.

CDK初心者がlambda定期実行のインフラコード作成からデプロイまでやるための手順

Posted at

aws cdkでEventBridge,lambdaのインフラコードを書きたい。
ので、手探りで手順をまとめてみました。

・aws cdkとは

手始めにcdkを理解しようと思いまして、改めて下記ページを読み、ざっくりまとめました。
https://aws.amazon.com/jp/cdk/

いわゆるインフラコードを自分の慣れた言語を使用して定義するためのフレームワーク。
CDkではEventBridgeを使ってリソースをプロビジョニングできる。

利点
・クラウドへの簡単デプロイ
・カスタマイズ、共有可能(コードなので)

想定しているもの。
EventBridgeのスケジューラでlambdaを定期実行する。

・目次

・cdk のプロジェクトを作成
・EventBridge、Lambdaの書き方
・デプロイについて
・デプロイ後のlambdaが動いてるかの確認。

・cdk のプロジェクトを作成

まずはcdkのコマンドが使えるように、グローバルのオプションをつけてインストールする。

npm install -g aws-cdk

この時自分は最初は怒られました。

npm WARN notsup Unsupported engine for aws-cdk@2.12.0: wanted: {"node":">= 14.15.0"} (current: {"node":"12.16.1","npm":"6.13.4"})

この場合、
バージョン1系であればインストールできるので、バージョンを指定してインストールするか -> バージョンを指定する場合は、npm install -g aws-cdk@1.xx.xなどmoduleの後ろに@でバージョンを指定します。
nodeのバージョンを上げてからCDKをインストールするか。

自分はnodeのバージョンを上げました。
今度は問題なくインストールできました。

added 212 packages, and audited 213 packages in 4s
found 0 vulnerabilities

次に、肝心のプロジェクト作成ですが、下記コマンドになります。
プロジェクト管理する適当なディレクトリで

cdk init app --language typescript

自分はtypescriptがよかったのでこのような書き方になります。
問題なくプロジェクトが作成されていることが確認できました。

image.png

補足:typescriptをインストールしていない方はこのタイミングでinstallしときましょう。
npm install -g typescript

・EventBridge、Lambdaの書き方

基本的にはこのlib配下のxxx-stack.tsにあれこれ手を加えていくことになります。
下は手を加えたあとになります。

加えた内容
・aws-events,aws-event-target

import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as events from "aws-cdk-lib/aws-events";
import * as target from 'aws-cdk-lib/aws-events-targets';
import * as lambda from 'aws-cdk-lib/aws-lambda';

export class EventLambdaStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    // lambdaの作成
    const lambdaFunction = new lambda.Function(this, 'lambdaの名前', {
      runtime: lambda.Runtime.NODEJS_12_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset('./lambda'),
    });

    // eventのtargetとして上記のlambdaを定義
    const eventTarget = new target.LambdaFunction(lambdaFunction);

    // eventのルールを指定
    const eventRule = new events.Rule(this, 'eventの名前', {
      schedule : events.Schedule.cron(
        {
          minute:'0',
          hour:'9',
          weekDay:'MON-FRI',
          month:'*',
          year:'*',
        }
      ),
    });

    // eventのルールにターゲットを指定
    eventRule.addTarget(eventTarget);
  }
}


※スタックの概念について(ちょっと横道)
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacks.html
「スタックは、単一のユニットとして管理できる AWS リソースのコレクションです。」
と、説明があります。
つまり、単一のECSやEC2、DBなどのリソースを指すのではなく、システムとしてのリソース群。
ようは、管理しやすいように自分で何を含めるかは考えてね、ってことだと理解しました。

※スケジュールの指定方法について
macなどでもcronなどが使えるがそれと同様の指定の方法。指定方法は下記の公式リンクを参照
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html
最初、上記のようにweekdayを指定しつつ、day:'?'も指定していましたが、weekdayとdayはどちらかしか指定できないとおこられました 。

私の場合には、月曜日から金曜日の18:00(JST)で実行してほしいので上記の値になります。指定の時間はUTCになります。
このほかにも、5分おきに実行、火曜日だけ実行など、さまざまな指定の方法があります。

・デプロイについて

上記のようにコードの準備は完了しました。
以下の手順でデプロイしてみましょう。

cdk list

これを実行すると、今回デプロイするstackの中のリソースの一覧が表示されます。

cdk deploy

次は実際にデプロイするためのコマンドですが、その前に以下の2点をご確認ください。

・.awsのcredentialに認証情報が記載されているか。
-> aws上にリソースを作成するので、当然認証のステップがあります。その際には、上記であげたローカルのファイルの認証情報を元に認証を行います。詳しくは下記をご覧ください。
https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html

・cdkを実行するための環境がaws上に構築されているか。
-> cdkを実行するには、cloudformationなどを取り扱う環境が必要になります。その環境を構築するのにcdk bootstrapというコマンドを実行します。
環境がなければ作成してくれます。
詳細はこちらの「環境の初期構築」をご覧ください。
https://catalog.us-east-1.prod.workshops.aws/workshops/99731164-1d19-4d2e-9319-727a130e2d57/ja-JP/20-typescript/20-create-project/500-deploy#

上記二点が確認できて、cdk deployコマンドを実行します。
完了すると下記のように表示されます。
image.png

・作成されたリソースの確認。

実際にawsコンソールで確認してみましょう。
上記でいうとlambdaを確認すれば対象の関数があり、それのトリガーとしてeventBridgeが作成されています。
もし、見当たらない場合には、コンソールの右上に表示されているリージョンが正しいかどうかを確認しまししょう。

以上。

2
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
2
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?