Slide 1

Slide 1 text

VS Code Meetup #33 AWS Lambda functions with C# 用の Dev Container Template を作ってみた件

Slide 2

Slide 2 text

自己紹介 まっぴぃ | Yuji Masaoka X: @mappie_kochi Zenn: ymasaoka Blog: とある IT エンジニアの日常

Slide 3

Slide 3 text

Dev Containers とは

Slide 4

Slide 4 text

What is the Dev Containers? ▪ VS Code の拡張機能の 1 つ ▪ Docker コンテナ機能を利用 ▪ ホスト環境とは分離された統一された開発環境を構築・管理 ▪ あたかもローカルで動いているように操作 ▪ Windows / macOS / Linux などの OS を気にせずに利用

Slide 5

Slide 5 text

VS Code Extension ▪ 以下のどちらかの拡張機能をインストール(要 Docker 環境) ▪ Remote Development - Visual Studio Marketplace ▪ Dev Containers - Visual Studio Marketplace

Slide 6

Slide 6 text

やったこと紹介 Lambda 関数開発用の Dev Container Template を作ってみた

Slide 7

Slide 7 text

Develop Lambda function with Dev Container ▪ Dev Container で Lambda も開発したい!という思いがきっかけ(by AWS 初心者) ▪ GitHub - ymasaoka/devcontainer-templates

Slide 8

Slide 8 text

Community Templates ▪ https://containers.dev/templates ▪ AWS 関連、Lambda 用のテンプレートが なかった →作ってしまえばいい

Slide 9

Slide 9 text

devcontainers.json { "name": "AWS Lambda (.NET)", "dockerComposeFile": "compose.yml", "service": "lambda", "workspaceFolder": "/workspace", "postCreateCommand": "dotnet tool install --global Amazon.Lambda.Tools && dotnet tool install --global Amazon.Lambda.TestTool- 8.0 && dotnet new install Amazon.Lambda.Templates && dotnet restore", "features": { "ghcr.io/devcontainers/features/aws-cli:1": { "version": "latest" }, "ghcr.io/devcontainers/features/docker-in-docker:2": { "moby": true, "installDockerBuildx": true, "installDockerComposeSwitch": true, "version": "latest", "dockerDashComposeVersion": "latest" } }, "customizations": { "vscode": { "extensions": [ "amazonwebservices.aws-toolkit-vscode", "ms-azuretools.vscode-docker", "ms-dotnettools.csharp", "ms-dotnettools.vscodeintellicode-csharp", "ms-dotnettools.csdevkit" ] } } }

Slide 10

Slide 10 text

compose.yml ▪ image の部分は、コミュニティテンプレートとして公開する用に変数が入れている version: '3' services: lambda: image: mcr.microsoft.com/devcontainers/dotnet:dev-${templateOption:imageVariant} volumes: - ..:/workspace:cached - ~/.aws:/home/vscode/.aws command: sleep infinity working_dir: /workspace user: vscode

Slide 11

Slide 11 text

devcontainer-template.json { "id": "aws-lambda-dotnet", "version": "0.0.1", "name": "AWS Lambda (.NET)", "description": "Develop C# and .NET based AWS Lambda. Includes all needed SDKs, extensions, and dependencies.", "documentationURL": "https://github.com/ymasaoka/devcontainers-templates/tree/main/src/aws-lambda-dotnet", "publisher": "ymasaoka", "licenseURL": "https://github.com/ymasaoka/devcontainers-templates/blob/main/LICENSE", "options": { "imageVariant": { "type": "string", "description": ".NET Version:", "proposals": [ "8.0-bookworm", "6.0-bookworm", "6.0-bullseye" ], "default": "8.0-bookworm" } }, "platforms": [ "AWS Lambda", ".NET", ".NET Core", "C#" ] }

Slide 12

Slide 12 text

PR (Pull Requests) ▪ コミュニティテンプレート用のリポジトリに PR を送信すれば、最初から選べるようになる https://github.com/devcontainers/devcontainers.github.io ▪ 現在 PR 中(だけど、ここ 3 カ月ぐらいメンテナーの動きがない

Slide 13

Slide 13 text

What I learned by trying (1) ▪ 同僚などへの開発環境構築の説明が格段に楽になる(これ Clone してあとはよしなに..) ▪ AWS CLI に対する理解が深まった(けどまだまだ未熟) ▪ Docker コンテナレジストリに対する理解が深まった ▪ SDK などを提供している会社は、開発環境テンプレート公開に活用できそう ▪ いろいろな開発パターンに対応したテンプレートも作ってみたい

Slide 14

Slide 14 text

What I learned by trying (2) ▪ C# Dev Kit 拡張機能は 会社で使うときはライセンスがいる (Visual Studio と同じ形態) ※GitHub Codespaces は大丈夫 ▪ Dev Container Template を 利用する際は、拡張機能にも注意