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

AWS CloudShellを活用して簡単に!AWS CDKによるAWSリソース構築(IaC)...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

AWS CloudShellを活用して簡単に!AWS CDKによるAWSリソース構築(IaC)を体験しよう

AWS CDK
IaC
AWS CloudShell
Handson

More Decks by キャリアチェンジAWSエンジニア

Other Decks in Technology

Transcript

  1. 2 IaC (Infrastructure as Code)とは?CDKとは? インフラを手動で管理・デプロイするのではなく、 「コード」で定義・管理する手法 以下のプログラミング言語 を使用可能 ・TypeScript

    ・JavaScript ・Python ・Java ・C# ・Go AWS CDK (AWS Cloud Development Kit) ・AWS・Azure・GCPなど 1000以上のクラウドプロバイ ダで使用可能 ・言語はHCL(HashiCorp Configuration Language) ・可読性高い(人間にとって 読みやすい) ・JSONに近い Terraform 等 AWS CloudFormation (Cfn) ・AWSリソースをコードで 定義・管理できるIaC ・データ記述言語はYAML またはJSON
  2. 5 ❶AWS CDKとは 前資料「開発事例補足1」参照  インフラを手動で管理・デプロイするのではなく「コード」で定義・管理す る手法=IaC (Infrastructure as Code)のやり方の1つ

     TypeScript等6種のプログラミング言語で記述可能 (今回はTypescriptを使用します) AWS CDK (AWS Cloud Development Kit)
  3. 6 ❶AWS CDKとは  マイクロソフトによって開発され、2012年に外部公開  JavaScriptをパワーアップさせたプログラミング言語  静的型付け言語(値やオブジェクトの型安全性をコンパイル時に検証する) 

    ファイル拡張子は基本的に.ts  TypeScript の変数は、let <変数名>: <型> = value; または const <変数名>: <型> = value; という形式で宣言  AWS CDK は6言語サポートしているが、TypeScript が最も早く・優先的に 更新される傾向がある  ドキュメントやサンプルコードが圧倒的に多い →AWS CDKのプログラミング言語がTypescriptがおすすめ 補足:プログラミング言語 Typescript とは
  4. 8 ❷AWS CDKでの作業内容 以下をインストール AWS CLI Node.js AWS CDK Toolkit

    ts-node CLIで cdk init sample-app --language typescriptを実行し サンプルファイルを編集 ローカル環境用意 CLIでcdk init →tsファイルを編集 ・CDK アプリケーションを合成 ・環境にブートストラップスタックをイ ンストール ・CDK アプリケーションをデプロイ cdk synth cdk bootstap cdk deploy 1 2 3
  5. 10 ❸ AWS ClouldShellを使うメリット AWSユーザーがブラウザ上で簡単にコマンドライン作業を行えるサービス AWS ClouldShellとは 「1」 ローカル環境用意、が不要! ▪詳細仕様

    ・OS: Amazon Linux 2023 ・ストレージ: 追加料金なしで、リージョン毎に最大 1 GB (もちろんClouldShellから作成したAWSリソースには通常通り課金されるので、試行後作 成したAWSリソースは削除必要) ・AWS CLIをCloudShellから起動できる ・広範な開発ツールがプリインストール済み:node.js、npm (・VPC内でも起動可能(1リージョン同時に最大2個まで)) ・AWS CloudShellの環境は「IAMユーザー単位 + IAMロール単位 + スイッチロール元のIAM ユーザー単位」で分離されている=他のユーザと同じ画面が見える訳ではない(private to you)
  6. 1)マネジメントコンソールにログインする 作業を行いたいリージョンを、右上から選択 マネジメントコンソールの最上部 、またはClouldShell検索して押下 → ClouldShellが指定したリージョンで立ち上がる 12 ❹ ClouldShellでCDK体験 詳細手順

    2)起動後のディレクトリは/home/cloudshell-user (pwdで確認可能) ここがClouldShellユーザーのホームディレクトリ ClouldShell 使い始め 3)AWS CDK ワークショップ>TypeScript ワークショップ、の手順を実施し ていく(次ページ以降をご覧ください) https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/ja- JP/2000-typescript-workshop
  7. 13 ClouldShell 注意点 ▪注意点 ・20~30分の非アクティブ状態が続くとセッションがタイムアウト ・キーボードまたはポインタを使用して 20~30 分間操作しないとシェルセッションは終了 ・実行中のプロセスは、操作数としてカウントされない →タイムアウト後は、再接続(少し時間かかる)すると、タイムアウト前と同じ作業が可能

    (CloudShellの仕組み:一時的な計算環境を使い、接続時にホームディレクトリに 保存されたデータを復元する) ・データは、最後のセッションの終了から 120 日間アクションしないと削除されるの で注意! ・月間使用量制限がある (制限目安:複数名で毎日終日作業していると月末に使用不可。200時間との情報も。) →使用制限で使えなくなったら、試行であれば、他のリージョンで使用すればよい (制限引上申請も可能だが課金される) ❹ ClouldShellでCDK体験 詳細手順
  8. 1)プロジェクトディレクトリの作成 システム上に空のディレクトリを作成します。(ディレクトリ名はcdk-workshop) 14 CDK TypeScript ワークショップ mkdir cdk-workshop && cd

    cdk-workshop 2)cdk init cdk init を使用して「TypeScript CDK プロジェクトを作成」します。 <解説> ・コマンド内容:指定したテンプレートから現在のディレクトリに、新しいAWS CDKプロジェクトを作成 ・テンプレートは以下3種が利用可能 app : CDK アプリケーションの基本テンプレート(空の AWS CDK アプリを作成) lib : CDK コンストラクトライブラリのテンプレート sample-app : CDK アプリケーションのサンプルで、いくつかのコンストラクトが組み込まれている cdk init sample-app --language typescript cdk init <template> --language <language> ❹ ClouldShellでCDK体験 詳細手順 青色ページ:作業手順
  9. 17 CDK TypeScript ワークショップ 3)2)の実行で作成された、プロジェクトディレクトリを確認する ・コマンド 等でディレクトリを確認 lib/cdk-workshop-stack.ts :CDK アプリケーションのメインスタックが

    定義されている場所です。 ここで最も時間を費やすことになります。 bin/cdk-workshop.ts :CDK アプリケーションのエントリーポイントで す。lib/cdk-workshop-stack.ts で定義されたスタックを読み込みます。 package.json :npm モジュールマニフェストです。アプリケーション 名、バージョン、依存関係、「watch」や「build」などのビルドスクリプ トが含まれます (package-lock.json は npm によって管理されます)。 cdk.json :アプリケーションの実行方法を AWS CDK Toolkit に指示しま す。この場合、 "npx ts-node --prefer-ts-exts bin/cdk-workshop.ts" にな ります。 tsconfig.json:プロジェクトの TypeScript 設定 です。 .gitignore、npmignore:ソース管理やこのモジュールをパッケージマネー ジャに公開する際に、git と npm が除外する/含めるファイルを指示しま す。 node_modules:npm によって管理され、プロジェクトのすべての依存関 係が含まれます ll ❹ ClouldShellでCDK体験 詳細手順 1⃣ 2⃣ 3⃣
  10. 18 参考:cdk-workshopディレクトリで、ファイルが実行される順番 ❹ ClouldShellでCDK体験 詳細手順 cdk.json:CDKコマンドが使う設定ファイル { "app": "npx ts-node

    --prefer-ts-exts bin/cdk-workshop.ts", "watch": { "include": [ "**" ], "exclude": [ "README.md", "cdk*.json", "**/*.d.ts", "**/*.js", "tsconfig.json", "package*.json", "yarn.lock", "node_modules", "test" ] }, 続く bin/cdk-workshop.tsがCDKアプリ ケーションのエントリーポイント bin/cdk-workshop.ts #!/usr/bin/env node import * as cdk from 'aws-cdk-lib/core'; import { CdkWorkshopStack } from '../lib/cdk- workshop-stack'; const app = new cdk.App(); new CdkWorkshopStack(app, 'CdkWorkshopStack'); lib/cdk-workshop-stack.ts import { Duration, Stack, StackProps } from 'aws-cdk-lib/core'; import * as sns from 'aws-cdk-lib/aws-sns'; import * as subs from 'aws-cdk-lib/aws-sns-subscriptions'; import * as sqs from 'aws-cdk-lib/aws-sqs'; import { Construct } from 'constructs'; export class CdkWorkshopStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); 続く lib/cdk-workshop-stack.ts で定義されたスタックを読 み込む
  11. 20 CDK TypeScript ワークショップ 5)bin/cdk-workshop.ts の内容確認、編集 2:ファイルをダウンロードし、エディタで開く ・Web版のコードエディタ「Visual Studio Code

    for the Web」へアクセス https://vscode.dev/?vscode-lang=ja 先程ダウンロードしたファイルを 保存しているフォルダを選択 ❹ ClouldShellでCDK体験 詳細手順
  12. 21 lib/ bin/cdk-workshop.tsをVisual Studio Code for the Webでを開いたところ bin/ ・最初にこのファイルから実行される

    ・lib/cdk-workshop-stack.ts で定義されたスタックを読み込む ❹ ClouldShellでCDK体験 詳細手順 スタックについては 21ページで解説
  13. 23 CDK TypeScript ワークショップ 7)lib/cdk-workshop-stack.ts の内容確認、編集 2:ファイルをダウンロードし、エディタで開く ・Web版のコードエディタ「Visual Studio Code

    for the Web」へアクセス https://vscode.dev/?vscode-lang=ja 先程ダウンロードしたファイルを 保存しているフォルダを選択 ❹ ClouldShellでCDK体験 詳細手順
  14. 24 lib/cdk-workshop-stack.tsを Visual Studio Code for the Webで開いたところ ・CDK アプリケーションの

    メインスタックを定義。 スタックとは、関連する 1 つ以上の AWS リソースを定 義したもの lib/ bin/ 作業のメイン は、このファ イルの編集! ❹ ClouldShellでCDK体験 詳細手順 ・CdkWorkshopスタックを export →bin/cdk-workshop.ts 上 で import することで利用 スタックについては 21,22ページで解説 SQS キュー SNS トピック SQS サブスクリプション を作成
  15. 25 ❹ ClouldShellでCDK体験 詳細手順 AWS リソースa AWS リソースb スタックとは、 関連する

    1 つ以上の AWS リソースを定義 したもの ちょっと 深堀り スタックとは① 画像引用元 https://aws.amazon.com/jp/builders-flash/202309/awsgeek-aws-cdk/
  16. 26 ❹ ClouldShellでCDK体験 詳細手順 スタックとは② ・AWS CloudFormationにおけ る、単一のユニットとして管理でき る AWSリソースのコレクション(集

    合体)。 ・スタックを作成、更新、削除する ことで、リソースのコレクションを 作成、更新、削除できる。 ・cdk deployを実行すると、 CloudFormationにスタックが作成 され、 それにはリソースとそれらの設定を 指定する CloudFormation テンプ レートのデプロイが含まれる。 CDKは、CloudFormationの仕 組みを使ってデプロイする。 そのためCloudFormationの仕組 みである「スタック」単位に CDKファイルを記述する必要が ある! ちょっと 深堀り 画像引用元 https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/home.html
  17. 27 今回のワークショップで構築するAWSリソース構成図 トピックに発行されたメッ セージを受信するために キューをサブスクライブする (topic.addSubscription) Simple Queue Service (SQS)

    Queue Simple Notification Service (SNS) Topic SQS キュー (new sqs.Queue) SNS トピック (new sns.Topic) 設定内容: 可視性タイムアウト まで300秒(5分) ❹ ClouldShellでCDK体験 詳細手順
  18. 8)CDKアプリケーションを合成する 〔作業内容〕 cdk.json ファイルと同じディレクトリ(=cdk-workshop)で、以下実行 28 cdk synth ❹ ClouldShellでCDK体験 詳細手順

    〔説明〕 CDKアプリケーションは、コードを使用 したインフラストラクチャの定義に過ぎま せん。 CDKアプリケーションが実行されると、 アプリケーションで定義された各スタック に対して AWS CloudFormation テンプ レートが生成 (CDK の用語では 「synthesize」、「合成」)されます。 CDKアプリケーションを合成するには、 cdk synth コマンドを使用します。 cdk synth cdk deploy 画像引用元 https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/home.html
  19. 参考:cdk synthコマンド実行後の出力内容1 29 ❹ ClouldShellでCDK体験 詳細手順 SNSトピックがSQSキューにメッセージを送信できるようにする IAM ポリシー SQSキューとSNSトピックの間のサブスクリプション

    SNSトピック SQSキュー 見なくてよい(AWS側で改善に使われる情報) CloudFormationの テンプレート形式が 出力されていること を確認 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXX: XXXXXXXX XXXXXXXX: XXXXXXXX: XXXXXXXX XXXXXXXX XXXXXX XXXXXXXX:
  20. 9)環境のブートストラップ ・説明:AWS CDK アプリケーションを初めて環境(アカウント/リージョン)に デプロイする場合は「ブートストラップスタック」をAWS CloudFormation に デプロイする必要があります。 スタックの名前は「CDKToolkit」で、このスタックには AWS

    CDK Toolkit の 操作に使用されるリソースが含まれています。 例えば、このスタックにはデプロイプロセス中にテンプレートとアセットを格 納するために使用される S3 バケットが含まれています。 ・作業:以下コマンドを実行 (実行前にP34 CloudFormation確認オススメ) 31 cdk bootstrap ❹ ClouldShellでCDK体験 詳細手順 次ページで、マネジメント コンソール上でお見せします
  21. 37 ❹ ClouldShellでCDK体験 詳細手順 ちょっと 深堀り スタック「CDKToolkit」 詳細 作成されたリソース11個 SSMパラメータ1個、ECRリポジトリ1個、S3バケット1個、

    S3バケットポリシー1個、Role5個、Policy2個 CdkBootstrapVersion:/cdk-bootstrap/hnb659fds/version ContainerAssetsRepository(ECR):主にDockerイメージの保存に使用 StagingBucket:AWS Lambda関数コードやアセットなどのCDKプロジェクトファイルを保存するために使用 StagingBucketPolicy CloudFormationExecutionRole DeploymentActionRole FilePublishingRole ImagePublishingRole LookupRole FilePublishingRoleDefaultPolicy ImagePublishingRoleDefaultPolicy
  22. 10)CDK アプリケーションをデプロイ ・説明:CDK アプリケーションが AWS CloudFormation を通じてデプロイさ れる(P22スライド参照) ・作業:以下コマンドを実行する ・セキュリティ関連の変更を、本当に実施するか確認→yを押下

    ・マネジメントコンソールからCloudFormationを開く ・Stackができていることを確認 ・CdkWorkshopStack を選択し、リソースタブ内にSQSができているか確 認→物理IDのリンクを押下し、作成されたAWSリソースを確認する 38 cdk deploy ❹ ClouldShellでCDK体験 詳細手順
  23. 54 参考:ClouldShellでCDK体験 発生費用について → ほぼ発生なし 使うツール 課金のされ方・今回課金 Cloudshell 無料で利用可能、ただし月間使用量制限あり。CloudShellを通じて使用する他のAWSリソースやデータ転送に は、通常のAWS料金が適用される。

    今回は、CloudShellを通じて使用する他のAWSリソースにつき「作成されるリソース」以下で検討。 CloudFormation CloudFormation自体の利用料金は発生しないが、作成したAWSリソースに対して料金が発生。 AWSとAlexaに関するリソース以外のサードパーティーサービスをテンプレートに含める場合には料金が発生。 今回はAWSリソース作成のため課金されない。 作成されるリソース 課金のされ方・今回課金 cdk boostrapコマンド実行 CDKを開始するために必要なAWSリソースが作成される。 SSM パラメータストア 標準パラメータは無料。高度なパラメータを使用する場合、1万回のAPI呼び出しごとに$0.05。 今回は標準パラメータに設定をしたので、課金されない。 ECRリポジトリ 保存するデータとインターネットに転送するデータの量に対して課金される。 今回はデータを保存していないので課金されない。 S3バケット ストレージ利用量、リクエスト回数、データ転送に課金される。 今回はcdk deploy時にファイルが自動生成され保存されたので、わずかに課金される。 S3バケットポリシー S3バケットポリシーには課金されない。 今回は課金されない。 IAM Role IAMユーザー・グループ・ロールの作成と管理は、無料で利用できる。 今回は課金されない。 IAM Policy IAM ポリシーによるアクセス権限の制御は、無料で利用できる。 今回は課金されない。 cdk deployコマンド実行 CDK tsファイルに定義したAWSリソースが作成される。 SQSキュー 毎月最初の100万リクエストは無料。 今回は月100万リクエストを超えないため課金されない。 SNSサブスクリプション サブスクリプションに登録されているエンドポイントにメッセージを送信する際に課金。 今回はメッセージを送信していないため課金されない。 SNSトピック トピックとして定義され使用した分に課金。(1カ月に作成された API リクエストの数、および、複数のエンドポ イントに対する配信の回数に基づく) 今回はトピックを定義したが使用(配信)していないので課金されない。