4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VS CodeのDev Container環境にAWS認証情報を環境変数で渡す

Last updated at Posted at 2025-04-02

はじめに

VS CodeのDev Containerを使って開発をしようと環境を準備していたところ、AWSの認証情報が渡されない事象に出くわしたので備忘として書いておきます。

検証環境

  • Windows 10
  • PowerShell 5.1
  • aws-vault v7.2.0
  • docker 24.0.6

最初に結論

aws-vaultで認証後、同じターミナルでVS Codeで開きたいパスに移動して、code .コマンドでVSCodeを起動すればAWS認証情報が引き継がれます。

事象

Terraform開発環境構築のため、偉大なる先人方の記事を参考にしつつdevcontainer.jsonファイルを実装しました。

一部改変していますが大体こんな感じです。

{
  "name": "DevContainer",
  "build": {
    "dockerfile": "./Dockerfile"
  },
  "runArgs": [
    "--init"
  ],
  "mounts": [
    "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind"
  ],
  "remoteEnv": {
    "AWS_ACCESS_KEY_ID": "${localEnv:AWS_ACCESS_KEY_ID}",
    "AWS_SECRET_ACCESS_KEY": "${localEnv:AWS_SECRET_ACCESS_KEY}",
    "AWS_SESSION_TOKEN": "${localEnv:AWS_SESSION_TOKEN}",
    "AWS_DEFAULT_REGION": "${localEnv:AWS_DEFAULT_REGION}"
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-azuretools.vscode-docker",
        "hashicorp.terraform",
        "github.copilot",
        "github.copilot-chat"
      ]
    }
  }
}

Dockerfileはこちらです。
諸事情で色々入れてますが、最低限必要なのはTerraformイメージとAWSCLIぐらいだと思います。

FROM hashicorp/terraform:1.7.2

# install awscli and docker
RUN apk add --no-cache aws-cli
RUN apk add --no-cache dos2unix
RUN apk add --no-cache jq
RUN apk add --no-cache bash
RUN apk add --no-cache docker-cli

# Docker Compose V2をインストール
RUN mkdir -p /usr/local/lib/docker/cli-plugins
RUN wget -q https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -O /usr/local/lib/docker/cli-plugins/docker-compose
RUN chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

VS Codeを手動起動します。
試しにaws configure listを実行していますが、ここではデフォルトのAWS認証情報が表示されています。
image.png

aws-vault exec [プロファイル名] -- powershellコマンドを実行してAWS認証を行います。
image.png

検証環境ではPowerShellを利用しているので、以下のワンライナーでPowerShellの環境変数名からDev Containerへ渡す環境変数名に設定し直します。

$AWS_ACCESS_KEY_ID = $env:AWS_ACCESS_KEY_ID; $AWS_SECRET_ACCESS_KEY = $env:AWS_SECRET_ACCESS_KEY; $AWS_SESSION_TOKEN = $env:AWS_SESSION_TOKEN; $AWS_DEFAULT_REGION = $env:AWS_DEFAULT_REGION

image.png

Ctrl+Shift+PでDev Containerを起動します。
image.png

VS Code上のターミナルでaws configure listコマンドを実行すると何故か環境変数が引き継がれていませんでした。
image.png

起動したVS Code上のターミナルで認証・設定すればDev Containerにも渡されると思い込んでましたが、Dev Containerに渡すためにはVS Code側で保持するように環境変数を設定する必要があるようです。
(ターミナルで設定してもVS Code自体には保持されない)

特に VSCode のターミナルから操作する場合です。VSCode に限らず、ターミナルは基本的に起動時の環境変数しか保持していないからです。
Docker で環境変数をホストからコンテナに渡す方法(ホスト OS 側からゲスト OS に渡す方法各種)

解決方法

私はローカルのPowerShellでaws-vaultコマンドで認証後、VS Codeで開きたいパスに移動して、codeコマンドを実行してVS Codeを起動することで対応しました。
※キャプチャでは実行場所を間違えて2回codeコマンドを実行しています

  • PowerShell
    image.png

  • Dev Container
    image.png

おわりに

一番てっとり早いのはホスト側の.awsディレクトリをマウントする方法ですが、今回はaws-vaultを使って認証したかったので環境変数での渡し方を検証してみました。
調べても意外にピンポイントで該当する記事が見つかったので、自分のためにも書いてみました。

この記事がどなたかの参考になれば幸いです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?