Note: GitHub Actions was available for GitHub Enterprise Server 2.22 as a limited beta. The beta has ended. GitHub Actions is now generally available in GitHub Enterprise Server 3.0 or later. For more information, see the GitHub Enterprise Server 3.0 release notes.
- For more information about upgrading to GitHub Enterprise Server 3.0 or later, see "Upgrading GitHub Enterprise Server."
- For more information about configuring GitHub Actions after you upgrade, see the documentation for GitHub Enterprise Server 3.0.
Note: GitHub-hosted runners are not currently supported on GitHub Enterprise Server. You can see more information about planned future support on the GitHub public roadmap.
はじめに
このガイドは、GitHub Actionsを使ってコンテナ化されたアプリケーションをビルドし、それをAmazon Elastic Container Registry (ECR)にプッシュし、Amazon Elastic Container Service (ECS)にデプロイする方法を説明します。
GitHubリポジトリへの新しいリリースごとに、GitHub Actionsワークフローは新しいコンテナイメージをビルドし、Amazon ECRにプッシュし、そして新しいタスクの定義をAmazon ECSにデプロイします。
必要な環境
GitHub Actionsワークフローを作成する前に、まず以下のAmazon ECR及びECSのセットアップのステップを完了しておかなければなりません。
-
イメージを保存するAmazon ECRリポジトリの作成
たとえばAWS CLIを使って以下を行います。
Shell aws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGION
以下のワークフロー中では、
ECR_REPOSITORY
変数に同じAmazon ECRリポジトリ名(ここではMY_ECR_REPOSITORY
)を使っていることを確認してください。以下のワークフローで
AWS_REGION
変数(ここでは MY_AWS_REGION`)に同じ AWSリージョンの値を使用していることを確認してください。 -
Amazon ECSのタスク定義、クラスター、サービスの作成
詳細については、Getting started wizard on the Amazon ECS consoleもしくはAmazon ECSドキュメンテーションのFargate を使用した Amazon ECS の開始方法を参照してください。
Amazon ECSサービスとクラスターに設定した名前を記録しておき、以下のワークフロー中で
ECS_SERVICE
及びECS_CLUSTER
の変数に使ってください。 -
Amazon ECSのタスク定義をJSONファイルとしてGitHubリポジトリに保存してください。
ファイルのフォーマットは、以下で生成される出力と同じでなければなりません。
Shell aws ecs register-task-definition --generate-cli-skeleton
以下のワークフローでは、ECS_TASK_DEFINITION
変数をJSONファイルのパスに設定してください。
以下のワークフロー中のCONTAINER_NAME
変数を、タスク定義中のcontainerDefinitions
セクションのコンテナ名に設定してください。
-
Amazon IAMアクセスキーの値を保存するための
AWS_ACCESS_KEY_ID
及びAWS_SECRET_ACCESS_KEY
という名前のGitHub Actionsシークレットの作成GitHub Actionsのシークレットの作成に関する詳しい情報については、「[暗号化されたシークレット](/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository)」を参照してください。
IAMユーザに推奨されるIAMポリシー及びアクセスキーの認証情報を処理するメソッドについては、以下で使われている各アクションのドキュメンテーションを参照してください。
ワークフローの作成
必要な環境を整えたら、ワークフローの作成に進むことができます。
以下の例のワークフローは、コンテナイメージを作成してAmazon ECRにプッシュする方法を示します。 そして、タスク定義を新しいイメージIDで更新し、タスク定義をAmazon ECSにデプロイします。
ワークフローのenv
キー内のすべての変数について、自分の値を渡すようにしてください。
name: Deploy to Amazon ECS
on:
release:
types: [ created ]
env:
AWS_REGION: MY_AWS_REGION # 使用するAWSリージョン 例 us-west-1 に設定してください
ECR_REPOSITORY: MY_ECR_REPOSITORY # 使用するAmazon ECRリポジトリ名に設定してください
ECS_SERVICE: MY_ECS_SERVICE # 使用するAmazon ECSサービス名に設定してください
ECS_CLUSTER: MY_ECS_CLUSTER # set this to your Amazon ECS cluster name
ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
# file, e.g. .aws/task-definition.json
CONTAINER_NAME: MY_CONTAINER_NAME # タスク定義のcontainerDefinitions中の
# コンテナ名に設定してください
defaults:
run:
shell: bash
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: $AWS_REGION
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: |
# dockerコンテナをビルドし
# ECRへプッシュして、
# ECSにデプロイできるようにする。
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_ENV
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: $ECS_TASK_DEFINITION
container-name: $CONTAINER_NAME
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: $ECS_SERVICE
cluster: $ECS_CLUSTER
wait-for-service-stability: true
追加リソース
この例で使われているサービスに関する詳しい情報については、以下のドキュメンテーションを参照してください。
- Amazon AWSドキュメンテーションの「IAM でのセキュリティのベストプラクティス」
- 公式のAWS「AWS認証情報の設定」アクション。
- 公式のAWS Amazon ECR "ログイン"アクション。
- 公式のAWS Amazon ECS "タスク定義の出力"アクション。
- 公式のAWS Amazon ECS "タスク定義のデプロイ"アクション。