記事
チュートリアル
インタラクティブ ガイド
GitHub で ImageLabeller をデプロイする
Warren Marusiak
シニア テクニカル エバンジェリスト
当社のチームは Jira Software とさまざまな接続ツールを使用してアプリケーションを開発、デプロイ、管理する方法を説明するために、機械学習を使用して画像にラベルを添付する AWS 上に構築されたシンプルなデモ アプリケーションである ImageLabeller を作成しました。
このページでは、GitHub で ImageLabeller をデプロイする方法について説明します。はじめに、ImageLabeller アーキテクチャ ページと AWS SageMaker のセットアップ ページをお読みの上、背景を確認することをお勧めします。
前提条件
GitHub 組織がまだ作成されていない場合は、この GitHub ガイドのステップに従って最初から組織を作成してください。
ImageLabeller のコードで公開されている GitHub リポジトリ
Jira Github 統合のデモ ビデオ
Jira と GitHub を統合する
Jira から [ボード]、[アプリ]、[GitHub] の順にクリックします。
[Get it now (今すぐ入手する)] をクリックします。
[アプリ]、[アプリの管理] の順にクリックして [GitHub] を展開します。
[Get started] をクリックします。
[始める] をクリックします。
GitHub に Jira プラグインをインストールする
[Jira をインストール] をクリックして、Jira プラグインを GitHub にインストールします。このステップは、Jira プラグインが GitHub にまだインストールされていない場合に必要です。
Jira は GitHub からのデータの同期を開始します。
同期が完了すると [同期ステータス] が [完了] に変わります。
パーソナル アクセス トークンをセットアップ
こちらのガイドに従って、パーソナル アクセス トークンを設定します。PAT は、統合テストのステップ中に SystemTest リポジトリのクローンを作成するために使用されます。PAT リポジトリとワークフローのアクセス権を付与します。
AWS S3 インフラストラクチャ リポジトリを作成する
通常、標準開発者ループでは開発者は Jira からタスクを取り出して、それを進行中の作業に移動して開発作業を行います。Jira 課題 ID は、開発作業を Jira 課題に結びつけるキーです。これは、2 つのシステム間の中核となる統合コンポーネントです。
Jira に移動して、AWS S3 インフラストラクチャ リポジトリを GitHub に追加するための新しい課題を作成します。課題 ID を書き留めます。この例では「IM-9」です。
GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。
AWS アクセス キー リポジトリ変数を追加する
[設定]、[シークレット] の順にクリックします。[新しいリポジトリ シークレット] をクリックして、AWS アクセス キー ID と AWS シークレット アクセス キーを追加します。AWS アクセス キーに関連付けられた IAM ユーザーに、AdministratorAccess を付与します。個別の AWS アクセス ポリシーを選択することで、よりきめ細かなアクセス コントロールを使用できますが、詳細は自由に設定できます。
ターミナルで s3_infra リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。
git add --all
git commit -m "IM-9 add s3_infra repository to github"
git remote add origin git@github.com:PmmQuickStartGuides01/s3_infra.git
git branch -m mainline
git push -u origin mainline
AWS にデプロイするための GitHub アクション
ターミナルの s3_infra リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成し、.github/workflows ディレクトリの順に作成します。
git checkout -b IM-9
mkdir -p .github/workflows && cd .github/workflows
新しい .github/workflows ディレクトリで次の yaml を使用して、deploy-test-staging.yml を作成します。これによって、メインライン以外のブランチに対するプッシュ中に実行されるテスト環境とステージング環境のデプロイ ワークフローが定義されます。
name: deploy-s3-infra-test-staging
on:
push:
branches:
- '*'
- '!mainline'
jobs:
deploy-us-west-1:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-east-2"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
次に、次の yaml で deploy-prod.yml を作成します。これによって、プル リクエストが変更をメインラインにマージする際に実行される本番環境のデプロイ ワークフローが定義されます。
name: deploy-s3-infra-prod
on:
pull_request:
branches:
- mainline
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-2"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "ca-central-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-ca-central-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-east-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
GitHub アクションの理解
トリガー
これらのファイルの先頭でワークフローをトリガーするイベントを宣言します。deploy-test-staging.yml では、メインラインを除くすべてのブランチにイベントがプッシュされます。
name: deploy-s3-infra-test-staging
on:
push:
branches:
- '*'
- '!mainline'
多くのイベントでワークフローをトリガーできます。詳細については、こちらのドキュメントをご参照ください。
ジョブ
ワークフローには、イベントをトリガーした際に実行される多くのジョブがあります。各ジョブには、ジョブの実行時に実行される一連のステップがあります。この例では、リポジトリ コードをチェックアウトする、AWS 認証情報を設定する、AWS CloudFormation を使用して AWS にデプロイする各ステップがあります。
jobs:
deploy-us-west-1:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
ニーズで順序を強制する
ニーズを使用して、ジョブの順序を指定できます。初期設定では、GitHub はすべてのステップを並列に実行します。ニーズを使用して、あるステップを別のステップに依存させます。
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-ca-central-1
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-east-1"
- name: Deploy to AWS CloudFormation
uses: aws-actions/aws-cloudformation-github-deploy@v1
with:
name: OpenDevOpsS3Infra
template: template.yml
no-fail-on-empty-changeset: "1"
フィーチャー ブランチにプッシュ
コマンド ラインから次のコマンドを実行して、コードを s3_infra リポジトリの IM-9 ブランチにプッシュします。
git add --all
git commit -m "IM-9 add GitHub actions to s3_infra"
git push -u origin IM-9
[アクション] をクリックして、実行中のワークフローを表示します。
プル リクエストの作成
[プル リクエスト]、[プル リクエストを作成] の順にクリックします。
ソース ブランチとしてフィーチャー ブランチを選択して [プル リクエストを作成] をクリックします。
コードの変更を確認して [プル リクエストをマージ] をクリックし、変更を受け入れます。
[アクション] をクリックして、本番環境のデプロイが開始されたことを確認します。ブランチがメインラインであるため、GitHub は deploy-prod.yml のジョブを実行します。
SubmitImage AWS Lambda 用のリポジトリを作成する
Jira に移動して、SubmitImage AWS Lambda リポジトリを GitHub に追加するための新しい課題を作成します。Jira 課題 ID を書き留めます。この例では「IM-8」です。
GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。
[設定]、[シークレット] の順にクリックします。パーソナル アクセス トークンを ACCESS_KEY、AWS アクセス キー ID を AWS_ACCESS_KEY_ID、AWS シークレット アクセス キーを AWS_SECRET_ACCESS_KEY、AWS アカウント ID を AWS_ACCOUNT_ID として追加します。
ターミナルで SubmitImage リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。
git add --all
git commit -m "IM-8 add SubmitImage to github"
git remote add origin git@github.com:PmmQuickStartGuides01/submitImage.git
git branch -m mainline
git push -u origin mainline
AWS にデプロイするための GitHub アクション
ターミナルの SubmitImage リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成し、.github/workflowsディレクトリの順に作成します。
git checkout -b IM-8
mkdir -p .github/workflows && cd .github/workflows
新しい .github/workflows ディレクトリで次の yaml を使用して、deploy-test-staging.yml を作成します。これによって、メインライン以外のブランチに対するプッシュ中に実行されるテスト環境とステージング環境のデプロイ ワークフローが定義されます。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
name: deploy-submit-image-test-staging
on:
push:
branches:
- '*'
- '!mainline'
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
run-unit-tests:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Checkout code
uses: actions/checkout@v2
- name: Test
run: |
cd ${{ github.workspace }}/submitImage
ls
go test ./opendevopslambda...
deploy-us-west-1:
runs-on: ubuntu-latest
needs: run-unit-tests
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-1:
# runs-on: ubuntu-latest
# needs: deploy-us-west-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-west-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-1
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-east-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-2:
# runs-on: ubuntu-latest
# needs: deploy-us-east-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-east-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-2
次に、次の yaml で deploy-prod.yml を作成します。これによって、プル リクエストが変更をメインラインにマージする際に実行される本番環境のデプロイ ワークフローが定義されます。
name: deploy-submit-image-prod
on:
pull_request:
branches:
- mainline
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-2:
# runs-on: ubuntu-latest
# needs: deploy-us-west-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-west-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-2
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-east-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-1:
# runs-on: ubuntu-latest
# needs: deploy-us-east-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-east-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-1
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-east-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "ca-central-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-ca-central-1:
# runs-on: ubuntu-latest
# needs: deploy-ca-central-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "ca-central-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=ca-central-1
統合テストの実行は、現時点でコメント アウトされています。システム テストは、アプリ全体がデプロイされた場合にのみ合格します。リポジトリの統合テスト ステップのコメントを解除して、ImageLabeller のすべてのコンポーネントがデプロイされたら、もう一度プッシュしてデプロイ パイプラインを実行します。needs セクションを更新して、手順を順番に実行します。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
needs: deploy-us-east-1
GitHub アクションの理解
このジョブでは、AWS SAM を使用して SubmitImage AWS Lambda を us-west-2 にデプロイします。
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsSubmitImage" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
このジョブでは、SystemTests リポジトリのクローンを作成して、us-west-2 で統合テストを実行します。
integration-test-us-west-2:
runs-on: ubuntu-latest
needs: deploy-us-west-2
steps:
- name: Pull systemTests repo
uses: actions/checkout@master
with:
repository: PmmQuickStartGuides01/systemTests
token: ${{ secrets.ACCESS_KEY }}
- name: Configure AWS credentials
id: creds
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: "us-west-2"
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- name: Run integration tests
run: go test -v ./... -aws_region=us-west-2
このステップでは、パーソナル アクセス トークンを使用して SystemTests リポジトリのクローンを作成します。
- name: Pull systemTests repo
uses: actions/checkout@master
with:
repository: PmmQuickStartGuides01/systemTests
token: ${{ secrets.ACCESS_KEY }}
フィーチャー ブランチにプッシュ
コマンド ラインから次のコマンドを実行して、SubmitImage リポジトリの IM-8 ブランチに変更をプッシュします。Jira 課題 ID とブランチ名をコミット メッセージに含めて、プロジェクトで何が起こっているかを Jira GitHub 統合で追跡できるようにします。
git add --all
git commit -m "IM-8 add github actions to SubmitImage"
git push -u origin IM-8
[アクション] をクリックして、実行中のワークフローを表示します。
ユニット テスト ジョブが合格して、Test us-west-1 へのデプロイが開始されたことを確認します。
前に定義したシステム テストは、integration-test-us-west-1 ジョブと integration-test-us-east-2 ジョブの一部として実行されます。
プルリクエストを作成する
プル リクエストを作成するには [プル リクエスト]、[新規プル リクエスト] の順にクリックします。
フィーチャー ブランチからマージを選択します。
[プルリクエストの作成] をクリックします。
プル リクエストをマージして、フィーチャー ブランチを削除します。[アクション] をクリックして、本番環境のデプロイを監視します。
InvokeLabeller AWS Lambda のリポジトリを作成する
Jira に移動して、InvokeLabeller AWS Lambda リポジトリを GitHub に追加するための Jira 課題を作成します。Jira 課題 ID を書き留めます。この例では「IM-11」です。
GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。
[設定]、[シークレット] の順にクリックします。パーソナル アクセス トークンを ACCESS_KEY、AWS アクセス キー ID を AWS_ACCESS_KEY_ID、AWS シークレット アクセス キーを AWS_SECRET_ACCESS_KEY、AWS アカウント ID を AWS_ACCOUNT_ID として追加します。
ターミナルで InvokeLabeller リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。
git add --all
git commit -m "IM-11 add InvokeLabeller to github"
git remote add origin git@github.com:PmmQuickStartGuides01/InvokeLabeller.git
git branch -m mainline
git push -u origin mainline
AWS にデプロイするための GitHub アクション
ターミナルの InvokeLabeller リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成し、.github/workflowsディレクトリの順に作成します。
git checkout -b IM-11
mkdir -p .github/workflows && cd .github/workflows
新しい .github/workflows ディレクトリで次の yaml を使用して、deploy-test-staging.yml を作成します。これによって、メインライン以外のブランチに対するプッシュ中に実行されるテスト環境とステージング環境のデプロイ ワークフローが定義されます。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
name: deploy-invoke-labeller-test-staging
on:
push:
branches:
- '*'
- '!mainline'
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
run-unit-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Test
run: |
pip3 install pytest
pip3 install moto
pip3 install -r tst/requirements.txt --user
python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
deploy-us-west-1:
runs-on: ubuntu-latest
needs: run-unit-tests
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-1:
# runs-on: ubuntu-latest
# needs: deploy-us-west-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-west-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-1
deploy-us-east-2:
runs-on: ubuntu-latest
needs: deploy-us-west-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-east-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-2:
# runs-on: ubuntu-latest
# needs: deploy-us-east-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-east-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-2
次に、次の yaml で deploy-prod.yml を作成します。これによって、プル リクエストが変更をメインラインにマージする際に実行される本番環境のデプロイ ワークフローが定義されます。
name: deploy-invoke-labeller-prod
on:
pull_request:
branches:
- mainline
env:
aws_account_id: ${{secrets.AWS_ACCOUNT_ID}}
jobs:
deploy-us-west-2:
runs-on: ubuntu-latest
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-west-2"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-west-2:
# runs-on: ubuntu-latest
# needs: deploy-us-west-2
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-west-2"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-west-2
deploy-us-east-1:
runs-on: ubuntu-latest
needs: deploy-us-west-2
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "us-east-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-us-east-1:
# runs-on: ubuntu-latest
# needs: deploy-us-east-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "us-east-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=us-east-1
deploy-ca-central-1:
runs-on: ubuntu-latest
needs: deploy-us-east-1
outputs:
env-name: ${{ steps.env-name.outputs.environment }}
steps:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: 1.16.x
- uses: actions/checkout@v2
- name: Configure AWS credentials
id: creds
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: "ca-central-1"
- name: SAM Validate
run: |
sam --version
sam validate
- name: SAM Build
run: |
sam build
- name: SAM Deploy
continue-on-error: true
run: |
sam deploy --template-file .aws-sam/build/template.yaml \
--stack-name "OpenDevOpsImageLabeller" \
--s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \
--capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM
# integration-test-ca-central-1:
# runs-on: ubuntu-latest
# needs: deploy-ca-central-1
# steps:
# - name: Pull systemTests repo
# uses: actions/checkout@master
# with:
# repository: PmmQuickStartGuides01/systemTests
# token: ${{ secrets.ACCESS_KEY }}
# - name: Configure AWS credentials
# id: creds
# 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: "ca-central-1"
# - name: Install Go
# uses: actions/setup-go@v2
# with:
# go-version: 1.16.x
# - name: Run integration tests
# run: go test -v ./... -aws_region=ca-central-1
統合テストの実行は、現時点でコメント アウトされています。システム テストは、アプリ全体がデプロイされた場合にのみ合格します。リポジトリの統合テスト ステップのコメントを解除して、ImageLabeller のすべてのコンポーネントがデプロイされたら、もう一度プッシュしてデプロイ パイプラインを実行します。needs セクションを更新して、手順を順番に実行します。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
needs: deploy-us-east-1
AWS SageMaker エンドポイントで src/app.py をアップデートする
InvokeLabeller の src/app.py ファイルを開いて、query_endpoint を探します。endpoint_name とクライアントの region_name を、AWS SageMaker ノートブックと一致するように変更します。
def query_endpoint(img):
endpoint_name = 'jumpstart-dft-image-labeller-endpoint'
client = boto3.client(service_name='runtime.sagemaker', region_name='us-west-1')
response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/x-image', Body=img)
model_predictions = json.loads(response['Body'].read())['predictions'][0]
return model_predictions
フィーチャー ブランチにプッシュ
コマンド ラインから次のコマンドを実行して、InvokeLabeller リポジトリの IM-11 ブランチに変更をプッシュします。Jira 課題 ID とブランチ名をコミット メッセージに含めて、プロジェクトで何が起こっているかを Jira GitHub 統合で追跡できるようにします。
git add --all
git commit -m "IM-11 add github actions to InvokeLabeller"
git push -u origin IM-11
[アクション] をクリックして、実行中のワークフローを表示します。前に定義したシステム テストは、integration-test-us-west-1 ジョブと integration-test-us-east-2 ジョブの一部として実行されます。
プルリクエストを作成する
プル リクエストを作成するには [プル リクエスト]、[新規プル リクエスト] の順にクリックします。フィーチャー ブランチからマージを選択します。
[アクション] をクリックして、本番環境のデプロイを監視します。
SystemTests のリポジトリを作成する
Jira に移動して、SystemTests リポジトリを GitHub に追加するための Jira 課題を作成します。Jira 課題 ID を書き留めます。この例では「IM-7」です。
GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。
ターミナルで SystemTests リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。
git add --all
git commit -m "IM-7 add SystemTests repository to GitHub"
git remote add origin git@github.com:PmmQuickStartGuides01/systemTests.git
git branch -M mainline
git push -u origin mainline
SystemTests リポジトリには GitHub アクションは不要です。他のパイプラインを実行するためのテストを提供するため、独自のパイプラインはありません。ImageLabeller アプリケーションのすべてのコンポーネントをデプロイした後は、CI/CD ワークフロー ファイルの統合テスト ステップのコメント解除、コミット、プッシュが実行できます。テストは、アプリケーションのすべてのコンポーネントが正常に動作している場合にのみ合格します。
SystemTests のリモート URL を書き留めておきましょう。SubmitImage、GetImageLabel、InvokeLabeller CI/CD パイプラインは、テスト ステップ中に SystemTests リポジトリのクローンを作成します。後続のリポジトリの gitlab-ci.yml を正しい URL で更新する必要があります。
おめでとうございます、これで完了です! ImageLabeller をデプロイできました。次のステップでは、Opsgenie で ImageLabeller の監視をセットアップします。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。