【GitHub Actions】 S3에 캐싱하는 액션을 만들었습니다

6034 단어 S3GitHubActionsAWS
"나는 actions/cache를 그만둬! 000000~!"

소개



S3에 캐시하는 작업을 만들었습니다.



GitHub Actions 공식 캐시 기능인 actions/cache
  • Pull Request에서 이끼가 발생했을 때 Re-run jobs하면 actions/cache 액션이 제대로 작동하지 않습니다
  • actions/cache 액션은 때때로 캐시를 얻지 못할 수 있습니다

  • 같은 문제가있는 것 같습니다.

    자세한 내용은 이 블로그 기사를 참조하세요.
  • GitHub Actions 지식 소개 - Masteries

  • 게다가 캐시의 용량은 리포지토리 마다 5GB라는 것입니다만, 분명히 용량 오버하고 있지 않을 것인데, 캐시 미스가 발생하고 있는 일이 있는 것 같은 생각이 듭니다.

    그래서 이번에 S3에 독자적으로 캐시시키는 액션을 만들었습니다.

    지금, 쾌적하게 움직이고 있으므로, 이번 그 내용을 소개하겠습니다.

    사용법



    예로서 다음과 같이 기술하면 npm ci 에 의해 작성된 node_modules 를 S3에 캐쉬 해, 다음 번 이후는 S3로부터 복원합니다.
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - uses: shonansurvivors/[email protected]
            env:
              AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
              AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
              AWS_DEFAULT_REGION: ap-northeast-1
            with:
              s3-bucket: your-s3-bucket-name # 必須
              cache-key: npm-v1-${{ hashFiles('laravel/package-lock.json') }} # 必須 ('.zip' は記述不要)
              paths: node_modules # 必須(キャッシュするディレクトリやファイル。複数ある場合はスペース区切りで記述) 
              command: npm ci # 必須(インストールやビルドのコマンドを記述)
              zip-option: -ryq # 任意 (デフォルト: -ryq)
              unzip-option: -n # 任意 (デフォルト: -n)
              working-directory: laravel # 任意 (デフォルト: ./)
    

    사전 준비로서는
  • S3 버킷 만들기
  • S3 버킷을 읽고 쓸 수있는 정책을 가진 IAM 사용자 만들기
  • GitHub 리포지토리의 설정 화면에서 IAM 사용자의 액세스 키 ID와 비밀 액세스 키를 secrets로 설정합니다.

    필요합니다. 캐시이므로 S3 버킷에는 라이프사이클 정책을 붙여 일정 일수로 객체가 삭제되도록 하면 좋을까 생각합니다.

    다음은 IAM 정책의 예입니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket",
                ],
                "Resource": [
                    "arn:aws:s3:::your-s3-bucket-name",
                    "arn:aws:s3:::your-s3-bucket-name/*"
                ]
            }
        ]
    }
    

    액션 유형에는 Docker 액션과 JavaScript 액션이 있지만 actions-s3-cache는 후자의 JavaScript 액션입니다.

    따라서 GitHub에서 제공하는 VM 환경에서 직접 실행됩니다.

    기타 공식 actions/cache와의 차이


  • Re-run jobs했을 때도 정상적으로 움직인다
  • 후속 단계가 오류로 인해 작업이 실패하더라도 캐시합니다 (공식은 캐시하지 않음)
  • 복수의 디렉토리와 파일의 편성을 정리해 캐쉬 가능 (공식으로 캐쉬 할 수 있는 것은 1 개의 디렉토리만. 파일명 지정은 불가)

  • 실제로 사용해보십시오.



    정확하게 측정하지는 않지만, 속도적으로는 공식 actions/cache 와 손색 없는 생각이 듭니다.

    무엇보다 캐쉬가 거기에 있을 것인데 히트하지 않는, 라는 상황에도 다소 하지 않는 것은 쾌적했습니다.

    좋으면 꼭 사용해보십시오.

    「S3 잇윽!!」

    좋은 웹페이지 즐겨찾기