ã¯ããã«
cloud9廿¢ã«ä¼´ããããæè¿ã¯AWSä¸ã§ã®éçºç°å¢æ§ç¯ã«é¢é£ãã話é¡ãã«ããã«çãä¸ãããè¦ãã¦ãã¾ãã
cloudshell, sagemaker studio code editorãªã©ãªã©ãåè£ã¨ãã¦ä¸ãã£ã¦ãã¦ãã¾ããã CDKéçºãªã©éåãªãã«ãå¦çãªã©ãè¡ããããªéçºã§ã¯ãå¼·åãªã¤ã³ã¹ã¿ã³ã¹æ§è½ãæ±ããããäºãããã¨æãã¾ãã
ãããªç¶æ³åãã«ãEC2ã¤ã³ã¹ã¿ã³ã¹ã«VSCode Serverãå°å ¥ããã©ã¦ã¶ããã»ãã¥ã¢ã«ã¢ã¯ã»ã¹ã確ç«ã§ãããããªç°å¢æ§ç¯ã模索ããã®ã§ã å 容ãã¾ã¨ãã¦ããã¾ãã
ã»ããã¢ããæ¹æ³
ãããã¤
æã£åãæ©ã使ã§ãããããCDK Construct(cdk-code-server)ã¨ãã¦å ¬éãã¦ãã¾ãã
ãããããAWS CDKãç¨ãã¦ãããã¤ãã¦ã¿ã¾ãããã
CDKèªä½ã®ã»ããã¢ããã¯å ¬å¼ããã¥ã¡ã³ããåç §ãã ãããSTEP5ã¾ã§å®è¡ããã°OKã§ãã
CDKã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ã§ããããcdk-code-serverãã¤ã³ã¹ãã¼ã«ããããã§ãStackå®ç¾©ã以ä¸ã®ããã«æ¸ãæãã¾ãã
npm install cdk-code-server
import * as cdk from 'aws-cdk-lib'; import { CodeServer } from 'cdk-code-server'; import { Construct } from 'constructs'; export class CodeServerStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // CodeServerã¯ã©ã¹ãã¤ã³ã¹ã¿ã³ã¹å new CodeServer(this, 'CodeServer'); } }
ãããã¤ãã¦ã¿ã¾ãããã
$ npx cdk deploy ⨠Synthesis time: 5.39s CodeServerStack: start: Building 6b82c08c411ad583faa859a28107837b81c3dc67035e3a7bebd7f45fc243e8f0:current_account-current_region ... // IAMã®å¤æ´ä¸è¦§ IAM Statement Changes // yãå ¥åãã¦ç¶è¡ Do you wish to deploy these changes (y/n)? y CodeServerStack: deploying... [1/1] CodeServerStack: creating CloudFormation changeset... â CodeServerStack ⨠Deployment time: 646.04s ⨠Total time: 651.44s
10åç¨åº¦ã§ãããã¤ãå®äºãã¾ãã
VSCodeã¢ã¯ã»ã¹
EC2ã¸æ¥ç¶
ã¾ãã¯AWS Consoleã®EC2管çã³ã³ã½ã¼ã«ã«ã¢ã¯ã»ã¹ããEIC Endpointçµç±ã§EC2ã¤ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ãã¾ãã
- ã¤ã³ã¹ã¿ã³ã¹IDã鏿 > Connect > EC2 Instance Connect > Connect using EC2 Instance Connect Endpoint > Connect
以ä¸ã®ç»é¢ã表示ãããã°OKã§ãã
VSCode serverã®ã»ããã¢ãã
ã³ã³ã½ã¼ã«ä¸ã§ä»¥ä¸ã®ã³ãã³ããå®è¡ããèªè¨¼ã³ã¼ããã³ãã¼ãã¾ãã
[ec2-user@ip-10-0-0-23 ~]$ code tunnel service install [2024-06-10 02:10:42] info Using GitHub for authentication, run `code tunnel user login --provider <provider>` option to change this. To grant access to the server, please log into https://github.com/login/device and use code 3811-9932
次ã«ããã©ã¦ã¶ã§https://github.com/login/deviceã«ã¢ã¯ã»ã¹ããã³ã¼ããå ¥åãã¾ãã
ä¸ã®ä¾ã§ã¯ãã3811-9932ããå ¥åãããContinueã>ãAuthorize-Visual-Studio-Codeããå®è¡ãã¾ãã
ç¶ãã¦EC2ã¤ã³ã¹ã¿ã³ã¹ã«æ»ããå度code tunnel
ãå®è¡ãã表示ãããURL https://vscode.dev/tunnel/ip-{privateIp}{region} ããã©ã¦ã¶ã§éãã¾ãã
[ec2-user@ip-10-0-0-23 ~]$ code tunnel * * Visual Studio Code Server * * By using the software, you agree to * the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and * the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement). * [2024-06-10 02:11:44] info Creating tunnel with the name: ip-10-0-0-23ap-north [2024-06-10 02:11:44] info Open this link in your browser https://vscode.dev/tunnel/ip-10-0-0-23ap-north Connected to an existing tunnel process running on this machine. Open this link in your browser https://vscode.dev/tunnel/ip-10-0-0-23ap-north
VSCodeãéãã"What type of account did you used to start this tunnel? "ã¨ããããã³ããã表示ããã¾ãã®ã§ãGitHub
ã鏿ãã¾ãã
ããã§ã¾ãGitHubã®èªè¨¼ç»é¢ã表示ãããå ´åãAuthorizeãæ¼ä¸ãã¦ãã ããã
ã¿ã¼ããã«ãéãã°æºåå®äºã§ã!!
æ§æ
Public Subnetä¸ã®EC2ã¤ã³ã¹ã¿ã³ã¹ã«VSCode Serverãã¤ã³ã¹ãã¼ã«ããEC2 Instance Connect(EIC) Endpointçµç±ã§ç®¡çéä¿¡ãã§ããããã«ãã¦ãã¾ãã
ãã¤ã³ã
EC2ã¤ã³ã¹ã¿ã³ã¹ã¯ãããªãã¯ãµããããä¸ã«è¨ç½®ããã¦ãã¾ãããã»ãã¥ãªãã£ã°ã«ã¼ãã®ã¤ã³ãã¦ã³ãã«ã¼ã«ã¨ãã¦ã¯EIC Endpointããã®SSHãã許å¯ããã¦ãã¾ããã
ãããã£ã¦ãInternetããã¤ã³ã¹ã¿ã³ã¹ã¸ã®ç´æ¥éä¿¡ã¯ä¸å¯ã§ãããé常ã«ã»ãã¥ã¢ãªéçºç°å¢ã¨ãªã£ã¦ãã¾ãã
EIC Endpointã«ãã管çéä¿¡
EC2 Instance Connect Endpoint (EIC Endpoint)ã¯EC2ã¤ã³ã¹ã¿ã³ã¹ã¸ã®ç®¡çéä¿¡ã簡便ã«è¡ãããã®ãµã¼ãã¹ã§ãã
1VPCããã1ã¤ã¾ã§è¨ç½®ãããã¨ãã§ãã以ä¸ã®æ¡ä»¶ãæºãããã¨ã§InternetããEC2ã¤ã³ã¹ã¿ã³ã¹ã¸ã®SSH or RDPãè¡ããããã«ãªãã¾ãã
- EIC EndpointããEC2 Instanceã¸ã®ã»ãã¥ãªãã£ã°ã«ã¼ãéæ¾ (tcp/22 or tcp/3389)
- ã¢ã¯ã»ã¹ããã¦ã¼ã¶ã¸ã®IAM権éä»ä¸
- Linuxã¤ã³ã¹ã¿ã³ã¹å´ã«EC2 Instance Connectã®ã¤ã³ã¹ãã¼ã«(AL2023ãªã©ã§ã¯ããã©ã«ãã§ã¤ã³ã¹ãã¼ã«æ¸ã¿)
EIC ã¨ã³ããã¤ã³ãã«ã¤ãã¦ã¯å¥è¨äºã«ã¦å©ç¨ä¾ã解説ãã¦ãã¾ãã GUIãã¼ã«ã«ããDBã¸ã®ç®¡çéä¿¡ã確ç«ããä¾ãç´¹ä»ãã¦ãã¾ãã®ã§ãåããã¦ã覧ãã ããã
VSCode Serverã¸ã®ã¢ã¯ã»ã¹
VSCode Serverã«ã¯EIC Endpointãä»ããã¢ã¯ã»ã¹ãã¾ãã
VScode Serverã¸ã®ã¢ã¯ã»ã¹ã¯https://vscode.devãä»ãã¦è¡ããã¦ãããEC2ã¤ã³ã¹ã¿ã³ã¹ã¨vscode.devã®éã®ãã³ãã«ã¯EC2ã¤ã³ã¹ã¿ã³ã¹å´ããéä¿¡ãè¡ããã¦ãã¾ãããããã£ã¦ãEC2ã¤ã³ã¹ã¿ã³ã¹å´ã§ã¢ã¦ããã¦ã³ãã«ã¼ã«ãéæ¾ãã¦ããã°ããã®æ¥ç¶ã確ç«ãããã¨ãã§ãã¾ãã
ã¤ã¾ããVSCode Serverã¸éä¿¡ããããã«å¥éã¤ã³ãã¦ã³ãã«ã¼ã«ãéæ¾ããå¿ è¦ã¯ããã¾ããã
ã¯ã©ã¤ã¢ã³ããVSCodeã§ã¯ãªãã¨ããéãã¯ããã¾ããã以ä¸ã®å³ãã¤ã¡ã¼ã¸ã¨ãã¦è¿ãã¯ãã§ãã
åèï¼ AWS Systems Manager と VS Code Remote SSH を組み合わせて快適なリモート開発環境を作る方法 | DevelopersIO
ã¢ã¯ã»ã¹æ¨©é管çã¯AWSã®æãé¢ãããã¹ã¦GitHubã«å§ä»»ããå½¢ã¨ãªãã¾ãããåäºåã«ã»ãã¥ã¢ãªãã®ã ã¨æãã¾ãã
(ãã¡ãããGitHubå´ã®ãã°ã¤ã³è¨å®ã§MFAã¯æå¹åãã¦ããã¾ããã)
ã¾ãããã®VSCode Server - vscode.devéã®ãã³ãã«å½¢æã¯serviceåããããã¨ãå¯è½ã§ããè©³ç´°ãªæé ã¯ã³ã³ã¹ãã©ã¯ãã®READMEããåç §ãã ããã
NodeJSãgitãªã©ã®ã¤ã³ã¹ãã¼ã«
EC2ã¤ã³ã¹ã¿ã³ã¹ã«ã¯VSCodeã«å ãã¦ãããã©ã«ãã§NodeJSãgitãå°å ¥ããã¦ãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹èµ·åæã«ãããã®ã¤ã³ã¹ãã¼ã«ã³ãã³ã群ãuserdataã使ã£ã¦èªåå®è¡ãããããã«ãã¦ãã¾ãã
ãã¡ããå¥éCDKã³ã³ã¹ãã©ã¯ãã¨ãã¦å ¬éãã¦ãã¾ãã®ã§ãèå³ã®ããæ¹ã¯åèã«ãã¦ã¿ã¦ãã ããã
IAM権é
VSCode Serverä¸ã§ã®å ¨ã¦ã®AWS APIãå©ãå¦çã¯ãEC2 ã¤ã³ã¹ã¿ã³ã¹ã«ç´ã¥ããããIAMãã¼ã«ã®æ¨©éã«ã¦è¡ããã¾ãã
cdk-code-serverã§ã¯ããã©ã«ãã§ç®¡çè æ¨©éãã¤ã³ã¹ã¿ã³ã¹ã«ä»ä¸ãã¦ãã¾ããæ¨©éãçµãããå ´åã¯ãIAMããªã·ã¼ã¹ãã¼ãã¡ã³ãã弿°ã¨ãã¦æ¸¡ãã°OKã§ãã
https://constructs.dev/packages/cdk-code-server/v/0.0.7?lang=typescript#usage
è¨å®ä¸è¦§
CDKä¸ã§è¨å®ã§ããé ç®ã¯ä»¥ä¸ã®ã¨ããã§ãã ã¤ã³ã¹ã¿ã³ã¹ã¿ã¤ãããããã大ãããªç¹ã¨ãARMã¢ã¼ããã¯ãã£ãããã©ã«ãã§æ¡ç¨ãã¦ããç¹ã«ã注æãã ããï¼
new CodeServer(this, 'CodeServer', { vpc, // EC2ã¤ã³ã¹ã¿ã³ã¹ã¿ã¤ã // Default is c7g.2xlarge instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM), // CPUã¢ã¼ããã¯ã㣠// Default is ec2.AmazonLinuxCpuType.ARM_64 cpuType: ec2.AmazonLinuxCpuType.X86_64, // ã¤ã³ã¹ã¿ã³ã¹ãã¼ã«ç¨IAMããªã·ã¼ // Default is a policy that has an administrator access policy, // EBSã®ããªã¥ã¼ã ãµã¤ãº // Default is 30 GB volumeSize: 100, });
FAQ
Q: EC2ã¯ãã©ã¤ãã¼ããµããããã«è¨ç½®ããªãã®ï¼
A: ã»ãã¥ãªãã£ã°ã«ã¼ãã§ååã¢ã¯ã»ã¹ã¯çµãã¦ããããããããªãã¯ã§ãåé¡ãªãã¨èãã¦ãã¾ãããã©ã¤ãã¼ãã«è¨ç½®ããã¨ãEC2ã¤ã³ã¹ã¿ã³ã¹ããInternetã¸ã®éä¿¡çµè·¯ç¢ºä¿ã®ããã«NAT Gatewayãè¨ç½®ããå¿ è¦ããããã³ã¹ãçã«ã大ããªãã¡ãªããã¨ãªãã¾ãã
Q: 管çéä¿¡ã¯SSM session managerã§ãè¯ããªãã§ããï¼
A: è¯ãã§ãããããªãã¯ãµãããããªã®ã§ãsession managerç¨ã®VPC Endpoint使ãªã©ãä¸è¦ã§ãããï¼ EIC Endpointãæ¡ç¨ããçç±ã¯ãèªåã§ä½ã£ãopen-constructs/aws-cdk-libraryã®L2ã³ã³ã¹ãã©ã¯ãã使ãããã£ãã ãã§ãã
Q: vscode.devãä»ãããEIC Endpointã使ã£ã¦VSCode Serverã¸ã¢ã¯ã»ã¹ãã§ããããããªãã§ããï¼
A: ãã®éãã§ããEIC Endpointãçµç±ãããã³ãã«ä½æãè¡ããã¨ãã§ããã®ã§ããããæ´»ç¨ããã°loclhostã¨EC2éã§ãã³ãã«ç¢ºç«ãå¯è½ã§ãããã ããEIC Endpointã§ã¯å®å ãã¼ãã22 or 3389ã«éããããããVSCode Serverãlistenãããã¼ãã3389ã«å¤æ´ããå¿ è¦ãããã¾ãã
æå¾ã«
ãã®ç°å¢ã¯CDK conference 2024ã§éå¬ãããCDK Contribute Workshopåãã«ä½æãã¾ããã
ã¾ãããã¡ããåèã«èªèº«ã®æ¸ç±åãã®éçºç°å¢ãcloud9ããç§»è¡ããããããããã£ãããã¿ããã§ãã(ã¨ã£ã¦ãå¬ããã§ã)
Cloud9æ°è¦å©ç¨çµäºã«ãããæ¸ç±ã»Udemyãªã©ã§èªåãå ¬éãã¦ãããã³ãºãªã³ãã§ããªãã±ã¼ã¹ãããã¾ããã
— ãã¾ / 大å¶å樹 (@oshima_123) 2024å¹´8æ5æ¥
代æ¿ã¨ãã¦ãEC2ã¤ã³ã¹ã¿ã³ã¹ã§Visual Studio Code Serverã使ãæé ãã¾ã¨ãã¾ããï¼
ï¼CDK Conference Japan 2024ã®ã¯ã¼ã¯ã·ã§ãããåèã«ããã¦ããã ãã¾ããï¼https://t.co/MDrzifkQzP
çæ§ãæ¯éãæ´»ç¨ããã ããã¨å¬ããã§ãã