Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDKでインフラとコードを 一緒にデプロイしてみよう

30fa613ce1aa0d255ff7d431c3da983f?s=47 regent0ro
February 09, 2022

CDKでインフラとコードを 一緒にデプロイしてみよう

CDKで簡単なLambdaをデプロイした紹介です。

30fa613ce1aa0d255ff7d431c3da983f?s=128

regent0ro

February 09, 2022
Tweet

Other Decks in Technology

Transcript

  1. CDKでインフラとコードを 一緒にデプロイしてみよう CDKでLambdaをデプロイしてみた JAWS-UG 初心者支部#44 AWS Builders Online Series recap2

  2. 自己紹介 • 某企業の5年目AWSインフラエンジニア • AWS歴:4年(IaCやCI/CD周りを触っています) • 好きなAWSサービス:AWS CDK • JAWSのLT初参加・初心者です!

    姜 禮林 かん   いぇりむ @cot_piyo https://regent0ro.blogspot.com/
  3. CDKでLambdaをデプロイしてみた

  4. AWS CDKとは • AWS Cloud Development Kit(AWS クラウド開発キット) • 慣れたプログラミング言語でAWSリソースを定義できるフレームワーク

    ◦ プログラミング言語の知識と表現力を使用できる → If文やfor文が使える! ◦ エディターの補完が効く! • AWSのベストプラクティスがデフォルト値であるため、コード記述量が少なくなる • CDKコードはCloudFormationのテンプレートに変換されて、AWS環境にデプロイされる
  5. CDKで Lambdaをデプロイしてみた

  6. AWS Lambdaとは • サーバーレスでプログラムを実行できるサービス • インフラのプロビジョニング、管理が不要 ◦ 高い可用性(メンテナンス時間やダウンタイムなし) • リクエスト数に応じて自動スケールする

    • リクエスト数&実行時間で課金
  7. CDKでLambdaをデプロイしてみた

  8. 4Stepでデプロイ 1. CDKプロジェクトを生成する 2. LambdaをStackに定義する 3. Lambdaのコードを書く 4. Let's デプロイ!

    CDKバージョン:2.10.0 利用言語:Python
  9. 1.CDKプロジェクトを生成する $ mkdir CDKLambda && cd CDKLambda // CDKプロジェクトを生成 $

    cdk init --language python //仮想環境に入る $ . .venv/Scripts/activate //仮想環境に必要なモジュールをインストール $ pip install -r requirements.txt $ deactivate 仮想環境から抜けるときは Bashで実行
  10. 2.LambdaをStackに定義する from aws_cdk import ( Stack, aws_lambda as cdk_lambda )

    from constructs import Construct class CdkLambdaStack(Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) cdk_lambda.Function(self, "simple_lambda", runtime=cdk_lambda.Runtime.PYTHON_3_9, //Lambdaのランタイム //コードがある場所。S3バケットの指定やインラインで書くことも可能 code=cdk_lambda.Code.from_asset("resources"), handler="simple_lambda.lambda_handler" //ハンドラーを指定 ) cdk_lambda_stack.py
  11. 3.Lambdaのコードを書く import json def lambda_handler(event, context): print("Welcome beginner!!") return {

    'statusCode': 200, 'body': json.dumps('Hello from Lambda!') } resources\simple_lambda.py
  12. 4.Let's デプロイ! // 作成されるスタックを確認 $ cdk ls // AWS CDKのコードからCloudformationのテンプレートを生成(cdk.outフォルダーの中に生成)

    $ cdk synth // AWS環境でAWS CDKを利用するための初期構築を実施(AWS CDKを環境で初めて利用する時に必要) // ここで生成されたS3バケットにCloudformationテンプレートやLambdaのコードがアップロードされる $ cdk bootstrap $ cdk deploy 仮想環境(venv)に入っている状態で実行します
  13. マネジメントコンソールで確認してみる Cloudformation

  14. コードで定義してないが、Lambdaに必要なIAMロールが自動生成されている CDKの改善に利用される

  15. Lambda

  16. CDKでLambdaをデプロイできました!

  17. AWS CDKでLambdaのコードをデプロイする時のいいところ • 本番環境により近い状態を表すことができる ◦ AWS環境のすべではここにある! • インフラとアプリケーションチームのそれぞれの変更がより可視化できる • インフラと同一のデプロイ方法で管理できる

    • インフラとアプリケーションコードを同じ言語で書ける https://aws.amazon.com/jp/blogs/news/lambda-managed-by-cdk/ 参考
  18. まとめ • AWS CDKを利用して、Lambdaのインフラ定義とコードをデプロイしました • AWS CDKでLambdaのコードを書くと、以下のメリットがある ◦ 本番環境により近い状態を表すことができる ◦

    インフラとアプリケーションチームのそれぞれの変更がより可視化できる ◦ インフラと同一のデプロイ方法で管理できる ◦ インフラとアプリケーションコードを同じ言語で書ける • AWS CDKはいいよ!いいよ!
  19. おまけ より便利に利用できるLambda関連ライブラリもあります • aws-lambda-nodejs • aws-lambda-go(Experimental) • aws-lambda-python(Experimental) • aws-lambda-event-source

    • aws-lambda-destinations 関連するAWS Builders Online Seriesのセッション Track 2 「コードを使ったAWS運用のはじめかた」 AWS CDKのレファレンス:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html
  20. ご清聴ありがとうございました!