

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# GitHub Actions を使用して AWS CloudFormation テンプレートに基づいて AWS Service Catalog 製品をプロビジョニングする
<a name="provision-aws-service-catalog-products-using-github-actions"></a>

*Amazon Web Services、Ashish Bhatt、Ruchika Modi*

## 概要
<a name="provision-aws-service-catalog-products-using-github-actions-summary"></a>

このパターンは、[AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)製品とポートフォリオを使用して標準化され、チーム AWS のサービス 間で準拠したプロビジョニングを行う効率的なアプローチを組織に提供します。 は、Service Catalog 製品とポートフォリオの重要なコンポーネントを組み合わせて、ベースネットワークインフラストラクチャをプロビジョニングする[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)のに役立ちます AWS クラウド。このパターンは、[GitHub Actions](https://github.com/features/actions) を使用して Infrastructure as Code (IaC) を自動開発ワークフローに統合することで、DevOps プラクティスも促進します。

AWS Service Catalog を使用すると、組織は で承認された IT サービスを作成および管理でき AWS、標準化、一元管理、セルフサービスプロビジョニング、コスト管理などのメリットが得られます。GitHub Actions を通じて Service Catalog ポートフォリオと製品のデプロイを自動化することで、組織は以下を実行できます。
+ 一貫性のある反復可能なデプロイ。
+ IaC のバージョン管理。
+ クラウドリソース管理の既存の開発ワークフローとの統合。

この組み合わせにより、手動エラーを減らし、全体的な効率を向上させながら、クラウド運用を合理化し、コンプライアンスを強制し、承認されたサービスの配信を高速化できます。

## 前提条件と制限事項
<a name="provision-aws-service-catalog-products-using-github-actions-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント 
+ [GitHub リポジトリ](https://docs.github.com/en/get-started/quickstart/create-a-repo)へのアクセス権
+  AWS CloudFormation と の基本的な理解 AWS Service Catalog
+ CloudFormation テンプレートをホストするための Amazon Simple Storage Service (Amazon S3) バケット
+ GitHub と 間の接続に使用される という名前`github-actions`の AWS Identity and Access Management (IAM) ロール AWS

**制限事項**
+ このパターンの再利用可能なコードは、GitHub Actions でのみテストされています。
+ 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「[AWS のサービス (リージョン別)](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)」を参照してください。特定のエンドポイントについては、「[サービスエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)」を参照して、サービスのリンクを選択してください。

**製品バージョン**

このパターンのソリューションは、次の [GitHub Marketplace](https://github.com/marketplace) アクションとそれぞれのバージョンを使用して作成されました。
+ `actions/checkout@v4`
+ `aws-actions/configure-aws-credentials@v2`
+ `aws-actions/aws-cloudformation-github-deploy@v1.2.0`

## アーキテクチャ
<a name="provision-aws-service-catalog-products-using-github-actions-architecture"></a>

このソリューション用のアーキテクチャを次の図に示します。

![GitHub Actions を使用して、CloudFormation テンプレートに基づいて Service Catalog 製品をプロビジョニングします。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/49f82fa7-0c74-4581-bf92-95505dca264c/images/a13c7b41-534e-4a9e-bdca-2974fa40a49a.png)


1. 管理者またはプラットフォームエンジニアは、標準化された CloudFormation テンプレートを GitHub リポジトリにプッシュし、そこでテンプレートが維持されます。GitHub リポジトリには、GitHub Actions AWS Service Catalog を使用した のプロビジョニングを自動化するワークフローも含まれています。

1. GitHub Actions は、OpenID Connect (OIDC) プロバイダー AWS クラウド を使用して に接続し、Service Catalog をプロビジョニングするワークフローをトリガーします。

1. Service Catalog には、開発者が標準化された AWS リソースのプロビジョニングに直接使用できるポートフォリオと製品が含まれています。このパターンは、仮想プライベートクラウド (VPCs)、サブネット、NAT およびインターネットゲートウェイ、ルートテーブルなどの AWS リソースをバンドルします。

1. 開発者が Service Catalog 製品を作成すると、Service Catalog はそれを事前設定および標準化された AWS リソースに変換します。その結果、開発者は個々のリソースをプロビジョニングして手動で設定する必要がなくなるため、時間を節約できます。

## ツール
<a name="provision-aws-service-catalog-products-using-github-actions-tools"></a>

**AWS のサービス**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および 全体のライフサイクルを通じてリソースを管理するのに役立ちます AWS リージョン。これは、 製品タイプの 1 つとして簡単に使用できるコードとしてのインフラストラクチャ (IaC) サービスです AWS Service Catalog。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用を許可するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted.html) では、承認された IT サービスのカタログを一元管理できます AWS。エンドユーザーは、組織によって設定された制約に従って、必要な承認済みの IT サービスのみをすばやくデプロイできます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他**
+ [GitHub Actions](https://docs.github.com/en/actions) は、GitHub リポジトリと緊密に統合された継続的インテグレーションおよび継続的デリバリー (CI/CD) プラットフォームです。GitHub アクションを使用することで、生成、テスト、デプロイのパイプラインを自動化できます。

**コードリポジトリ**

このパターンのコードは、GitHub 内の [service-catalog-with-github-actions](https://github.com/aws-samples/service-catalog-with-github-actions) リポジトリから取得できます。リポジトリには、以下のファイルが含まれます。
+ `github/workflows`:
  + `e2e-test.yaml` – このファイルは[再利用可能なワークフロー](https://docs.github.com/en/actions/sharing-automations/reusing-workflows)である `workflow.yaml` を呼び出します。このワークフローは、ブランチにコミットとプッシュがあるとすぐにトリガーされます。
  + `workflow.yaml` – このファイルには、このソリューションの再利用可能なワークフローが含まれており、トリガーとして `workflow_call` が設定されています。再利用可能なワークフローとして、`workflow.yaml` は他のワークフローから呼び出すことができます。
+ `templates`:
  + `servicecatalog-portfolio.yaml` – この CloudFormation テンプレートには、Service Catalog ポートフォリオと Service Catalog 製品をプロビジョニングするリソースが含まれています。テンプレートには、Service Catalog ポートフォリオと製品のプロビジョニング中に使用される一連のパラメータが含まれています。1 つのパラメータは、テンプレートの `vpc.yaml` がアップロードされる Amazon S3 ファイル URL を受け入れます。このパターンには AWS リソースをプロビジョニングする `vpc.yaml` ファイルが含まれていますが、設定に パラメータ S3 ファイル URL を使用することもできます。
  + `vpc.yaml` – この CloudFormation テンプレートには、Service Catalog product に追加される AWS リソースが含まれています。 AWS リソースには、VPCs、サブネット、インターネットゲートウェイ、NAT ゲートウェイ、ルートテーブルが含まれます。`vpc.yaml` テンプレートは、Service Catalog 製品およびポートフォリオテンプレートで CloudFormation テンプレートを使用する方法の例です。

## ベストプラクティス
<a name="provision-aws-service-catalog-products-using-github-actions-best-practices"></a>
+  AWS Service Catalog ドキュメントの[「 のセキュリティのベストプラクティス AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/security-best-practices.html)」を参照してください。
+ GitHub ドキュメントの「[Security hardening for GitHub Actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions)」をご確認ください。

## エピック
<a name="provision-aws-service-catalog-products-using-github-actions-epics"></a>

### ローカルワークステーションのセットアップ
<a name="set-up-local-workstation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ローカルワークステーションに Git をセットアップします。 | Git ドキュメントの「[Getting Started – Installing Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)」に記載の手順に従って、ローカルワークステーションへ Git をインストールし、設定します。 | アプリ開発者 | 
| GitHub プロジェクトリポジトリのクローンを作成します。 | GitHub プロジェクトリポジトリのクローンを作成するには、以下を実行します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps エンジニア | 

### OIDC プロバイダーをセットアップする
<a name="set-up-the-oidc-provider"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| OIDC プロバイダーを設定します。 |  AWS 認証情報を存続期間の長い GitHub シークレットとして保存することなく AWS、GitHub Actions ワークフローがリソースにアクセスできるようにする OpenID Connect (OIDC) GitHub プロバイダーを作成します。手順について、詳しくは GitHub ドキュメントの「[Amazon Web Services での OpenID Connect の構成](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services)」をご確認ください。<br />OIDC プロバイダーが設定されると、[前提条件](#provision-aws-service-catalog-products-using-github-actions-prereqs)で前述した IAM ロール `github-actions` の信頼ポリシーが更新されます。 | AWS 管理者、AWS DevOps、AWS 全般 | 

### GitHub Actions パイプラインをトリガーして Service Catalog ポートフォリオと製品をデプロイする
<a name="trigger-github-actions-pipeline-to-deploy-sc-portfolio-and-products"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| `e2e-test.yaml` を更新する。 | この `e2e-test.yaml` ファイルは、`workflow.yaml` で再利用可能なワークフローをトリガーします。`e2e-test.yaml` で次の入力パラメータの値を更新して検証します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | DevOps エンジニア | 

### デプロイを検証する
<a name="validate-deployment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Service Catalog リソースを検証します。 | Service Catalog リソースを検証するには、以下を実行します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | AWS DevOps | 

### リソースをクリーンアップする
<a name="clean-up-resources"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CloudFormation スタックを削除します。 | 以下の操作を行い CloudFormation スタックを削除します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html)<br />詳細については、CloudFormation ドキュメントの「[CloudFormation コンソールからスタックを削除する](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)」をご確認ください。 | DevOps エンジニア、AWS 管理者 | 

## トラブルシューティング
<a name="provision-aws-service-catalog-products-using-github-actions-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| `e2e-test`<br />`Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '*/home/runner/work/service-catalog-with-github-actions/service-catalog-with-github-actions`<br />`Did you forget to run actions/checkout before running your local action?` | 正しいリポジトリ設定が有効になっていることを確認するには、以下を実行します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/provision-aws-service-catalog-products-using-github-actions.html) | 

## 関連リソース
<a name="provision-aws-service-catalog-products-using-github-actions-resources"></a>

**AWS ドキュメント**
+ [Service Catalog の概要](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/what-is_concepts.html)

**その他のリソース**
+ [About events that trigger workflows](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#about-events-that-trigger-workflows) (GitHub ドキュメント)
+ [Reuse workflows](https://docs.github.com/en/actions/sharing-automations/reusing-workflows) (GitHub ドキュメント)

## 追加情報
<a name="provision-aws-service-catalog-products-using-github-actions-additional"></a>

[エピック](#provision-aws-service-catalog-products-using-github-actions-epics)に関連するスクリーンショットを表示するには、このパターンの GitHub リポジトリの **[Images]** フォルダに移動してください。次のスクリーンショットを使用できます。
+ [AWS Service Catalog ポートフォリオ、管理セクション](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_portfolio.png)
+ [AWS Service Catalog product、Administration セクション](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product.png)
+ [AWS Service Catalog product、ユーザー/プロビジョニングセクション](https://github.com/aws-samples/service-catalog-with-github-actions/blob/main/images/SC_Product_User.png)