VS CodeからCloudShellに接続!「AWS CloudShell plugin for VS Code」を試してみた

2021.01.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

re:Invent 2020 で発表されたマネジメントコンソールから利用できるシェル「AWS CloudShell」ですが、これをVS Codeから利用できる「AWS CloudShell plugin for VS Code」という拡張機能があります。

以前から気になっていたのですが、やっと試すことができたので設定方法などをまとめたいと思います。

前提条件

以下については既に対応済みであることを前提として記載しています。

  • AWS CLIをインストール済み
  • Session Manager plugin をインストール済み
  • IAMユーザを作成しており、IAMユーザのアクセスキーが発行済み

AWS CLIのインストールと、Session Manager pluginのインストールについては以下の記事でも記載していますので、よろしければご参照ください。

AWS側の準備

まずは、AWS側の準備を行います。

実施に試したところ、以下の2つが必要でした。

  • IAMロール
    • CloudShellのアクセス権限を持ったIAMロール
  • IAMユーザ
    • 上記IAMロールにAssume RoleできるIAMユーザ

今回は「IAMユーザ」は既に作成済みである想定なので、このIAMユーザのARNを利用して該当IAMロールを作成するようなCloudFormationテンプレートを作成してみました。

AWSTemplateFormatVersion: "2010-09-09"
Description:
  Setup IAM Role for VS Code AWS CloudShell

Metadata:
  "AWS::CloudFormation::Interface":
    ParameterGroups:
      - Label:
          default: "VS Code AWS CloudShell Configuration"
        Parameters:
          - IAMUserARN
          - AssumeRoleName

    ParameterLabels:
      IAMUserARN:
        default: "IAM User ARN"
      AssumeRoleName:
        default: "AssumeRole Name"

Parameters:
  IAMUserARN:
    Type: String
    Default: ""
  AssumeRoleName:
    Type: String
    Default: "CloudShell-AssumeRole"

Resources:
  AssumeRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Ref AssumeRoleName
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          -
            Effect: Allow
            Action: sts:AssumeRole
            Principal:
              AWS: !Ref IAMUserARN
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AWSCloudShellFullAccess

Outputs:
  CloudShellIamRoleArn:
    Description: IAM role for CloudShell
    Value: !GetAtt AssumeRole.Arn

こちらを利用して、IAMUserARNパラメータにIAMユーザのARNを指定すればサクッと作成できるかと思います。権限としてIAMロールにはAWSCloudShellFullAccessを付与しています。

作成後には、CloudFormationのOutputs(出力)にCloudShellIamRoleArnというキーで作成したIAMロールのARNが表示されているので控えておきます。(後で設定時に利用します)

拡張機能のインストール

次に、VS Codeに拡張機能をインストールします。 拡張機能識別子は iann0036.aws-cloudshell ですので、VS Codeで拡張機能タブを開いて iann0036.aws-cloudshell を検索してインストールします。

拡張機能の設定

インストールが無事に済んだら、今度は設定を行います。

VS Codeのユーザー設定を開いてcloudshellで検索すると4つの設定項目が表示されるかと思います。

これをそれぞれ設定しておきます。

Assume Role

先程作成して控えておいたIAMロールのARNをここに指定します。

Enable Upload

このオプションを有効にすると、VS Codeのエクスプローラーでファイルを右クリックしたときに、コンテキストメニューに「Upload file to AWS CloudShell」と表示され、ファイルがアップロードできるようになります。 (なのですが、2021/01/22現在では実際に試したところ、アップロードしたファイルが見当たりませんでした。もし分かったら後で追記したいと思います。)

Profile

本エントリの「前提条件」としているIAMユーザのアクセスキーを設定しているAWS CLIのプロファイル名です。

Region

CloudShellを起動するリージョンです。今回はap-northeast-1で試しています。

接続してみる

では、設定が完了したら早速接続してみましょう。

画面左側の「AWS CloudShell」用のアイコンをクリックし、上部のクラウドマーク(Start Session)をクリックします。

すると、一覧にシェルのリストが表示され、ステータスがconnectingとなります。

しばらく待つとステータスがconnectedとなり、Cloud Shellのターミナルが自動で開きます。

whoamiコマンドで、ちゃんとcloudshell-userなのが確認できますね!

なお、今のところエクスプローラについては「SSH接続」や「WSL接続」のように連動しないので、その点は注意が必要です。

まとめ

以上、「AWS CloudShell plugin for VS Code」を試してみました。「管理コンソールを開かずに、普段使い慣れているVS CodeからCloudShellに接続したい!」という場合には良さそうな拡張機能かなと思いました。

どなたかのお役に立てば幸いです。それでは!