Closed11

github codespacesメモ

not75743not75743

他のリポジトリへのアクセス権限を設定

devcontainers.jsonでこんな感じ
環境は再作成する必要がありそう

        "codespaces": {
            "repositories": {
              "<org>/<repo>": {
                "permissions": {
                  "contents": "write"
                }
              }
            }
        }
not75743not75743

gh cliでcodespace周りの操作

codespaceを操作する権限が必要

$ gh auth status
  - Token scopes: 'codespace', 'gist', 'read:org', 'repo'

操作

対話形式で選択できるものが多くて親切

# codespace作成(対話形式)
$ gh codespace create

# codespace作成(オプション)
$ gh codespace create \
    --display-name dev \
    --repo <org>/<repo> \
    --branch main \
    --machine basicLinux32gb

# 一覧
$ gh codespace list

# codespaceの詳細を出力
$ gh codespace view

# 停止(対話形式)
$ gh codespace stop

# 削除(対話形式)
$ gh codespace delete

# vscodeでcodespacesへ接続(対話形式)
$ gh codespace code
not75743not75743

private repositoryのコンテナイメージを利用する

codespaceで動作させるイメージはECRから引っ張ってきます。
https://docs.github.com/ja/codespaces/reference/allowing-your-codespace-to-access-a-private-registry#accessing-aws-elastic-container-registry

今回は前者のアクセスキー方式を利用します。
予めIAMユーザを作成し、↓のようにシークレットを作成すればOK

*_CONTAINER_REGISTRY_SERVER = <ECR_URL>
*_CONTAINER_REGISTRY_USER = <AWS_ACCESS_KEY_ID>
*_CONTAINER_REGISTRY_PASSWORD = <AWS_SECRET_KEY>

not75743not75743

codespace用のイメージをGHAでビルドする

dockerfileに修正が加わったら起動
あとはECRの<repo>:codespace-latestイメージをURI指定すればよい

build-codespace-image.yaml
name: build codespace image

on:
  push:
    branches:
      - main
    paths:
      - 'dockerfile'
  workflow_dispatch:

jobs:
  push:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: actions/checkout@v4
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - uses: aws-actions/configure-aws-credentials@v4
        env:
          AWS_REGION: ap-northeast-1
        with:
          role-to-assume: ${{ secrets.AWS_IAM_ROLE_ARN }}
          aws-region: ${{ env.AWS_REGION }}
      - name: Login to Amazon ECR Private
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2
      - name: docker build and push ECR
        uses: docker/build-push-action@v5
        env:
          ECR_REPO: <repo名>
        with:
          platforms: linux/amd64
          file: ./dockerfile
          push: true
          tags: ${{ steps.login-ecr.outputs.registry }}/${{ env.ECR_REPO }}:codespace-latest
          provenance: false

ビルドしたイメージでawscliが使えなかったメモ

どこかで記事にしたい

awscliが使えなかったメモ

エラー内容

root@9077a3c6b7c6:/workspace# aws --version
aws-cli/2.17.13 Python/3.11.9 Linux/6.5.0-1022-azure exe/x86_64.debian.12
root@9077a3c6b7c6:/workspace# aws s3 ls

<botocore.awsrequest.AWSRequest object at 0x72aa40352490>
root@9077a3c6b7c6:/workspace# aws sts get-caller-identity

<botocore.awsrequest.AWSRequest object at 0x7f3b90793bd0>

①ビルド時のenvにAWS_DEFAULT_REGION追加(うまくいかず)

      - name: docker build and push ECR
        uses: docker/build-push-action@v5
        env:
          ECR_REPO: <repo>
          AWS_DEFAULT_REGION: ap-northeast-1

②ビルド時のenvにAWS_DEFAULT_REGION追加(うまくいかず)

      - name: docker build and push ECR
        uses: docker/build-push-action@v5
        env:
          ECR_REPO: <repo>
          AWS_EC2_METADATA_DISABLED: true

③1.2を両方やる(うまくいかず)

      - name: docker build and push ECR
        uses: docker/build-push-action@v5
        env:
          ECR_REPO: <repo>
          AWS_DEFAULT_REGION: ap-northeast-1
          AWS_EC2_METADATA_DISABLED: true

④Dockerfile側に追加(うまくいった)

## install awscli
ENV AWS_DEFAULT_REGION="ap-northeast-1" \
    AWS_EC2_METADATA_DISABLED=true

RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
    unzip awscliv2.zip && \
    ./aws/install
root@518b3b33456b:/workspace# aws --version
aws-cli/2.17.13 Python/3.11.9 Linux/6.5.0-1022-azure exe/x86_64.debian.12
root@518b3b33456b:/workspace# aws sts get-caller-identity

Unable to locate credentials. You can configure credentials by running "aws configure".
root@518b3b33456b:/workspace# aws s3 ls

Unable to locate credentials. You can configure credentials by running "aws configure".
not75743not75743

AWSの認証情報

Codespaces secretsへ環境変数を追加することで対応

AWS_DEFAULT_REGION=XXXXXXXX
AWS_SECRET_ACCESS_KEY=XXXXXXXX
AWS_ACCESS_KEY_ID=XXXXXXXX
not75743not75743

organizationでcodespacesを使う

有効化

こちらの手順に従う。
わたしのorganization環境では有効化されていませんでした
https://docs.github.com/ja/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization#github-codespaces-の有効化または無効化

有効化しないとこんなログが出てcodespaceが作れない

error checking codespace ownership: you cannot create codespaces with that repository

PATに権限追加

これで動いたけど精査できていない

エラーログはこんなの

error getting devcontainer.json paths: HTTP 403: Resource not accessible by personal access token

ownershipを個人にする

orgではなくユーザに紐付けました。これもあまり精査できていない

エラーログはこんなの

error creating codespace: HTTP 402: Usage not allowed: <org> cannot be billed for new codespaces 
not75743not75743

ポート設定

ターミナルのポートから設定すればよし

not75743not75743

追加メモ

  • docker-compose.yamlで新規コンテナを追加した場合はfull buildが必要
このスクラップは4ヶ月前にクローズされました