ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情� �を見ることができます。
はじめに
This guide explains how to use GitHub Actions to build a containerized application, push it to Amazon Elastic Container Registry (ECR), and deploy it to Amazon Elastic Container Service (ECS) when there is a push to the main
branch.
On every new push to main
in your GitHub repository, the GitHub Actions workflow builds and pushes a new container image to Amazon ECR, and then deploys a new task definition to 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ポリシー及びアクセスキーの認証情� �を処理するメソッドについては、以下で使われている各アクションのドキュメンテーションを参照してく� さい。
-
Optionally, configure a deployment environment. Environments are used to describe a general deployment target like
production
,staging
, ordevelopment
. When a GitHub Actions workflow deploys to an environment, the environment is displayed on the main page of the repository. You can use environments to require approval for a job to proceed, restrict which branches can trigger a workflow, or limit access to secrets. For more information about creating environments, see "Using environments for deployment."
Creating the workflow
Once you've completed the prerequisites, you can proceed with creating the workflow.
以下の例のワークフローは、コンテナイメージを作成してAmazon ECRにプッシュする方法を示します。 そして、タスク定義を新しいイメージIDで更新し、タスク定義をAmazon ECSにデプロイします。
ワークフローのenv
キー内のすべての変数について、自分の値を渡すようにしてく� さい。
If you configured a deployment environment, change the value of environment
to be the name of your environment. If you did not configure an environment, delete the environment
key.
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
name: Deploy to Amazon ECS
on:
push:
branches:
- main
env:
AWS_REGION: MY_AWS_REGION # set this to your preferred AWS region, e.g. us-west-1
ECR_REPOSITORY: MY_ECR_REPOSITORY # set this to your Amazon ECR repository name
ECS_SERVICE: MY_ECS_SERVICE # set this to your Amazon ECS service name
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 # set this to the name of the container in the
# containerDefinitions section of your task definition
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@13d241b293754004c80624b5567555c4a39ffbe3
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@aaf69d68aa3fb14c1d5a6be9ac61fe15b48453a2
- 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: |
# Build a docker container and
# push it to ECR so that it can
# be deployed to ECS.
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"
- name: Fill in the new image ID in the Amazon ECS task definition
id: task-def
uses: aws-actions/amazon-ecs-render-task-definition@97587c9d45a4930bf0e3da8dd2feb2a463cf4a3a
with:
task-definition: ${{ env.ECS_TASK_DEFINITION }}
container-name: ${{ env.CONTAINER_NAME }}
image: ${{ steps.build-image.outputs.image }}
- name: Deploy Amazon ECS task definition
uses: aws-actions/amazon-ecs-deploy-task-definition@de0132cf8cdedb79975c6d42b77eb7ea193cf28e
with:
task-definition: ${{ steps.task-def.outputs.task-definition }}
service: ${{ env.ECS_SERVICE }}
cluster: ${{ env.ECS_CLUSTER }}
wait-for-service-stability: true
追� リソース
For the original starter workflow, see aws.yml
in the GitHub Actions starter-workflows
repository.
この例で使われているサービスに関する詳しい情� �については、以下のドキュメンテーションを参照してく� さい。
- Amazon AWSドキュメンテーションの「IAM でのセキュリティのベストプラクティス」
- 公式のAWS「AWS認証情� �の設定」アクション。
- 公式のAWS Amazon ECR "ログイン"アクション。
- 公式のAWS Amazon ECS "タスク定義の出力"アクション。
- 公式のAWS Amazon ECS "タスク定義のデプロイ"アクション。