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

TypeScriptだけでAWSを開発する

Cb88f765dd38cd942c39aacb5abbea06?s=47 ufoo68
April 14, 2020

 TypeScriptだけでAWSを開発する

Cb88f765dd38cd942c39aacb5abbea06?s=128

ufoo68

April 14, 2020
Tweet

More Decks by ufoo68

Other Decks in Programming

Transcript

  1. TypeScriptだけで AWSを開発する AWS CDKを使おう

  2. 自己紹介 • 名前 ◦ ufoo68 • やってること ◦ AWSを使った開発 ◦

    スポーツIoTLTの主催 • 最近とった資格 ◦ ソリューションアーキテクトアソシエイト ◦ Alexaスキルビルダー
  3. TypeScriptだけでAWS開発をするとは

  4. 文字通り、 AWSコンソールを一切触らずに、 CloudFormationを書かずに、 AWSのすべてのインフラを構築すること

  5. コンソールを使う問題点 一度構築したAWSのインフラ環境の再現手順を記録したい場合、以下の手段が思いつ くが、 1. コンソールで行った操作手順を記録する 2. AWS CLIで同様の環境構築をするためのシェルスクリプトを書く ぶっちゃけ、1.も2.の方法もダルいしやりたくはないよね。。。(^_^;)

  6. CloudFormationを使う "myDynamoDBTable" : { "Type" : "AWS::DynamoDB::Table", "Properties" : {

    "AttributeDefinitions": [ { "AttributeName" : {"Ref" : "HashKeyElementName"}, "AttributeType" : {"Ref" : "HashKeyElementType"} } ], "KeySchema": [ { "AttributeName": {"Ref" : "HashKeyElementName"}, "KeyType": "HASH" } ], "ProvisionedThroughput" : { "ReadCapacityUnits" : {"Ref" : "ReadCapacityUnits"}, "WriteCapacityUnits" : {"Ref" : "WriteCapacityUnits"} } } } こんな感じで、json(or yaml)でAWSのインフラや設定を定義できる AWSサービス
  7. CloudFormationの問題点 • テンプレートファイルの記法を覚える必要がある ◦ それなりに独特のルールがあるので一種の言語に近い • 冗長な構文が増える ◦ 共通化したいなら自分でシェルスクリプト書くしかない •

    何よりも型を教えてくれない! ◦ 公式ドキュメントとにらめっこするしかない
  8. そこで、AWS CDKの紹介です AWS CDKとは、プログラミング言語を使ってAWSのクラウド環境を構築するためのオー プンソースのフレームワークである。 AWS CDKではソースコードからCloudFormationを作成してリソースのクラウドへのデ プロイを行う

  9. 対応言語 以下の言語が選択できる • TypeScript • Python • .NET • Java

  10. CDKのいいところ • 各リソースの型が定義してある ◦ 公式ドキュメントを見ずに構文が予測できる ◦ 構文エラーをデプロイする前に検出することができる • 使い慣れた文法で書ける ◦

    メジャーな言語が揃っている • 共通化ができる ◦ constructという機能でライブラリ化ができる ◦ 実装ミスを防ぐ ◦ クソ長い行数のCloudFormationに苦しむことがない
  11. 実用例

  12. つくるもの 1. Lambdaを呼び出せるAPI Gatewayを定義する 2. 共通化する

  13. 型を定義しながらAWSが開発できる export interface LambdaApiProps { environment?: { [key: string]: string

    } lambdaPath: string } export class LambdaApi extends cdk.Construct { public readonly handler: lambda.Function public readonly api: apigateway.LambdaRestApi constructor(scope: cdk.Construct, id: string, { environment, lambdaPath }: LambdaApiProps) { super(scope, id) this.handler = new lambda.Function(this, `${id}Handler`, { runtime: lambda.Runtime.NODEJS_12_X, code: lambda.Code.asset(lambdaPath), handler: 'index.handler', environment }) this.api = new apigateway.LambdaRestApi(this, `${id}Endpoint`, { handler: this.handler }) } }
  14. ちなみに cdk-lambda-apiパッケージで公開しました(以下のように使えます) new LambdaApi(this, 'LambdaApi', { lambdaPath: 'lambda' })

  15. さいごに • CDKを使えば、TypeScriptだけでAWSが開発できる • CloudFormationではできなかった型のチェックも可能 • なんなら自ら型を定義できる • 重複するインフラの共通化・npm公開もできる •

    型のある安心安全なAWS開発を!