このドキュメントは、Google Cloud 組織で Active Assist を使用するために、自動化パイプラインを構築する、企業のアーキテクトとソフトウェア デベロッパーを対象としています。これは、Active Assist を使用してクラウド フットプリントを大規模に最適化するために企業が使用できるアーキテクチャ パターンについて説明するシリーズの一部です。このシリーズは、次のパートで構成されています。
- 大規模に Active Assist を使用するためのパターン
- Active Assist でのサーバーレス パイプラインの使用(このドキュメント)
- Active Assist での GKE Enterprise ツールチェーンの使用
このチュートリアルでは、Google Cloud サーバーレス テクノロジーを使用して、Active Assist の推奨事項を取得および処理する自動化パイプラインを構築する方法を説明します。推奨事項は、企業が設定したビジネスルールに基づきます。このチュートリアルで設定する自動化パイプラインは、チーム主導の確認と作動のプロセスを維持しながら、Active Assist を大規模に操作する際に役立ちます。このアプローチは、企業が Active Assist ポートフォリオの使用を拡大しながら、チーム内での確認と作動のプロセスを管理する場合に便利です。これは、継続的インテグレーションと継続的デリバリー(CI/CD)のパイプラインの代わりに使用できます。
このチュートリアルで示すアーキテクチャは汎用的なものなので、他のサーバーレス プロダクトと連携するように拡張できます。このチュートリアルでは、次の Google Cloud テクノロジーに精通していることを前提としています。
このチュートリアルを完了するには、Slack や同様の通知ツールやチケット処理ツールのアカウントが必要です。このツールは、マシンにセットアップしていつでも使用できる状態にしておく必要があります。
アーキテクチャ
このチュートリアルで示すアーキテクチャはモジュール式であるため、通知コンポーネントをビジネスの要件に合わせて適応させることができます。このチュートリアルでは、通知を生成して Slack に送信する方法を説明します。Pub/Sub やその他の通知 / チケット処理ツールに通知を送信することを選ぶこともできます。
次のアーキテクチャの図に、このチュートリアルで使用するコンポーネントを示します。
このアーキテクチャは、次のコンポーネントから構成されています。
- スケジューラが一定の間隔でトリガーする Cloud Run サービス。このサービスは、Firestore コレクションで定義および保持されているメタデータ(プロジェクト ID と Recommender タイプ)を読み取って、Recommender API を呼び出します。
- Active Assist の推奨事項が push され、処理される Pub/Sub トピック。
- Active Assist の推奨事項を解析する 2 番目の Cloud Run サービス。このサービスでは、企業によって定義され、Firestore コレクションに保存されているビジネスルールに基づいて、推奨事項の処理方法が決定されます。
- ビジネス メタデータとビジネスルールを保存する 2 つの Firestore コレクション。Firestore コレクションは次のように動作します。
- 最初のコレクションには、Active Assist の推奨事項の取得に関連するビジネス メタデータが保存されています。このチュートリアルでは、
recommendation type
、Google Cloud project IDs
、locations
の各属性がビジネス メタデータとして使用されます。これらの属性は、取得する推奨事項のタイプを決定するために、recommendation-collector
Cloud Run サービスによって使用されます。 - 2 番目のコレクションには、推奨事項の処理時に適用されるビジネスルールが保存されます。
- 最初のコレクションには、Active Assist の推奨事項の取得に関連するビジネス メタデータが保存されています。このチュートリアルでは、
目標
- サンプルの Cloud Run サービスを作成してサンプル プロジェクト用の Active Assist の推奨事項を取得し、Pub/Sub トピックに push します。
- サンプル メタデータとビジネスルールをそれぞれ保存する 2 つの Firestore コレクションを作成します。
- このチュートリアルで定義したサンプル ビジネスルールに従って推奨事項を処理する 2 番目の Cloud Run サービスを作成します。
- Cloud Run サービスで Active Assist の推奨事項のサンプルが送信される Slack チャネルを作成します。
- Active Assist の推奨事項のサンプルを使用して、エンドツーエンドのパイプラインをテストします。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
- 推奨事項のマネージャー プロジェクト用の Google Cloud プロジェクト ID をメモしておきます。この ID は、次のセクションの環境設定で必要になります。
-
Enable the Cloud Build, Firestore, App Engine,Pub/Sub, Cloud Run, Cloud Scheduler, and Cloud Source Repositories APIs.
このチュートリアルでは、デフォルトのアプリケーション認証情報を使用します。[プロジェクトへの認証情報の追加] ページで認証情報の作成を求められたら、[キャンセル] をクリックします。 -
Make sure that billing is enabled for your Google Cloud project.
-
以下を作成します。
- Slack チャネルのサンプル。
recommendation-rules-engine
という名前のエンジンによって生成された通知を受信する、Slack アプリと受信 Webhook のサンプル。エンジンは、このチュートリアルの後半で設定します。
Slack アプリと受信 Webhook URL を作成したら、このチュートリアルの後半で必要になるので、その URL をメモしておきます。
サーバーレス パイプラインの構築
このセクションでは、サーバーレス パイプラインの構築に必要なコンポーネントを作成します。プラットフォームでは、使用パターンとシステム指標に基づいて Active Assist の推奨事項が生成されます。生成される推奨事項に応じて、各推奨事項カテゴリでは、使用状況データと指標を分析するために、過去の異なるデフォルト期間が使用される場合があります。
既存のリソースと Active Assist の推奨事項がある Google Cloud プロジェクトのサンプルがある場合は、提供されたサンプルコードに適切な変更を加えた後に、パイプラインを実行してそれらの推奨事項を処理できます。
Firestore コレクションを作成する
このセクションでは、2 つの Firestore コレクションを作成します。1 つ目の activeassist-metadata
コレクションには、Active Assist の推奨事項の取得に関連するビジネス メタデータが保存されます。2 つ目の activeassist-business-rules
コレクションには、パイプラインで推奨事項が処理されるときに適用されるビジネスルールが保存されます。
Firestore コレクションのビジネスルールに基づいて Active Assist の推奨事項が解析されると、通知が生成されて送信されるか、推奨事項が関連する Google Cloud リソースに自動的に適用されます。
activeassist-metadata
コレクションを作成する
Google Cloud コンソールで、[Firestore] ページに移動します。
Firestore データベースがまだない場合は、作成します。また、Firestore データベースがすでにある場合は、次のステップに進みます。
データベースを作成します。
- [ネイティブ モードを選択] をクリックして、Firestore を有効にします。
- Cloud Run サービスが実行されているリージョンに近いリージョンのロケーションを選択します。
- [データベースを作成] をクリックします。構成が完了するまで、少し時間がかかります。
[Firestore] ページで [コレクションを開始] をクリックします。
[コレクション ID] フィールドに、次の
activeassist-metadata
を入力します。次のテーブルに示すように、フィールドにデータを入力します。次のフィールドを追加するには、[フィールドを追加] をクリックします。
フィールド名 フィールド タイプ フィールド値 注 project
string
Stub-Project-ID
このチュートリアルでは、フィールド値のスタブが使用されます。既存の Google Cloud プロジェクトの推奨事項を使用する場合は、代わりにプロジェクト ID を入力します。 locations
array
global
一部の推奨事項は、リージョン固有またはゾーン固有の可能性があります(VM 適正化の推奨事項など)。その他の推奨事項はグローバルです(例えば、IAM の推奨事項など)。 recommenderType
string
google.iam.policy.Recommender
なし フィールドにデータを入力したら、[保存] をクリックします。
activeassist-business-rules
コレクションを作成する
- [コレクションの開始] をクリックします。
[コレクション ID] フィールドに、次の
activeassist-business-rules
を入力します。次のテーブルに示すように、ドキュメントにデータを入力します。次のフィールドを追加するには、[フィールドを追加] をクリックします。
フィールド名 フィールド タイプ フィールド値 注 action
string
Notify
値を Apply
に設定すると、サービスで推奨事項が適用され、未使用のロールが削除されます。projectId
string
Stub-Project-ID
このチュートリアルでは、スタブの推奨事項が使用されます。既存の Google Cloud プロジェクトの推奨事項を使用する場合は、代わりにプロジェクト ID を入力します。 projectNumber
string
999999999
このチュートリアルでは、スタブの推奨事項が使用されます。
既存の Google Cloud プロジェクトの推奨事項を使用する場合は、代わりにプロジェクト番号を入力します。プロジェクト番号は Google Cloud コンソールのようこそページで確認できます。recommenderType
string
google.iam.policy.Recommender
なし recommenderSubtype
string
REMOVE_ROLE
なし slackWebhookURL
string
前の手順で生成した Slack Webhook URL を入力します。URL は次のようになります。
https://hooks.slack.com/services/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
このチュートリアルでは、推奨事項が自動的に適用されるかどうか、または通知が生成されて Slack などのプラットフォームに送信されるかどうかを決定するルールを作成する方法について説明します。設定したビジネスルールのサンプルの評価に基づいて推奨事項を自動的に適用する方法については、関連するリポジトリをご覧ください。
ドキュメントにデータが入力されたら、[保存] をクリックします。
スケジュールされた Cloud Run サービスの作成
このセクションでは、recommendation-collector
というスケジュールされた Cloud Run サービスを作成します。このサービスによって、Recommender API が呼び出されてアクティブな推奨事項が取得されます。このチュートリアルでは、Identity and Access Management Recommender API が Recommender API として使用されます。このサービスでは、取得する推奨事項を決めるために作成した activeassist-metadata
Firestore コレクションからメタデータが読み取られます。
[Cloud Shell で開く] をクリックして、推奨事項マネージャー プロジェクトの Cloud Shell を開きます。
Cloud Shell が開かれると、次のコマンドが実行されます。
- GitHub リポジトリのクローン作成コマンド。
- 変更ディレクトリ コマンド。
[Cloud Shell で開く] ダイアログが表示されたら、[信頼] を選択して [確認] をクリックします。
現在の推奨事項のマネージャー プロジェクトのプロジェクト ID とプロジェクト番号を変数として設定します。
export RECO_MGR_PROJECT=PROJECT_ID gcloud config set project $RECO_MGR_PROJECT export RECO_MGR_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
PROJECT_ID
を実際のプロジェクト ID に置き換えます。コマンドを入力したら、プロンプトが表示されたときに [承認] をクリックします。デプロイ リージョンの変数を設定します。
export REGION=us-central1
このチュートリアルでは
us-central1
リージョンを使用しますが、Cloud Run が利用可能なすべてのリージョンを使用できます。Docker イメージ用の環境変数を作成します。
export RECOMMENDER_IMAGE=gcr.io/$RECO_MGR_PROJECT/recommendation-collector:1.0
Docker イメージを構築し、Container Registry にアップロードします。
gcloud builds submit --tag $RECOMMENDER_IMAGE
recommendation-collector
サービス用のサービス アカウントを作成して、パイプライン内の他の Google Cloud サービスとやり取りします。gcloud iam service-accounts create recommendation-collector-sa \ --description "Service Account that the recommendation-collector service uses to invoke other Google Cloud services" \ --display-name "recommendation-collector-sa" \ --project $RECO_MGR_PROJECT
事前定義ロールをサービス アカウントに割り当てることで、Cloud Run サービスにきめ細かい権限を付与することをおすすめします。詳細については、サービス ID をご覧ください。
recommendation-collector
サービス用のサービス アカウントに Firestore と Recommender API へのアクセスを許可します。gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/datastore.user gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/pubsub.publisher
クローンを作成したリポジトリにあるサンプル
stub
を使用して、このチュートリアルを実行している場合は、次のステップに進みます。このチュートリアルで、既存の Google Cloud プロジェクト用に生成された推奨事項を使用してパイプラインを構築している場合は、2 つの Cloud Run サービスを実行するために作成したサービス アカウントに IAM 権限を割り当てる必要があります。
コマンドを実行する前に、このパイプラインを実行するためのプロジェクトの ID を使って、環境変数
TEST_PROJECT_ID
を設定します。export TEST_PROJECT_ID=TEST_PROJECT_ID gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer gcloud services enable recommender.googleapis.com --project $TEST_PROJECT_ID
使用するプロジェクト ID が、Firestore コレクションの作成で入力したものと一致していることを確認します。
このチュートリアルでは、
STUB_RECOMMENDATIONS
という環境変数を使用してサービスをデプロイします。この変数では、スタブを使用してパイプラインをテストできます。Cloud Run サービスをデプロイします。
gcloud run deploy recommendation-collector \ --image=$RECOMMENDER_IMAGE \ --no-allow-unauthenticated \ --region $REGION \ --platform managed \ --service-account recommendation-collector-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --set-env-vars="STUB_RECOMMENDATIONS=true" \ --project $RECO_MGR_PROJECT \
システムからのメッセージは、すべて受け入れます。
Google Cloud プロジェクト用に生成された Active Assist の推奨事項を使用してパイプラインを実行する場合は、デプロイする前にコマンドから次の行を削除します。
--set-env-vars="STUB_RECOMMENDATIONS=true"
Cloud Scheduler ジョブを設定して recommender-collector service
を実行する
Cloud Shell で、
recommendation-collector
サービスの実行に使用する Cloud Scheduler ジョブのサービス アカウントを作成します。gcloud iam service-accounts create recommender-scheduler-sa \ --description "Service Account used by Cloud Scheduler to invoke the recommender-parser service" \ --display-name "recommender-scheduler-sa" \ --project $RECO_MGR_PROJECT
サービス アカウントに
run/invoker
ロールを付与して、Cloud Run サービスを起動できるようにします。gcloud run services add-iam-policy-binding recommendation-collector \ --member=serviceAccount:recommender-scheduler-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=$REGION \ --platform=managed
recommendation-collector
サービスの URL を取得します。export RECOMMENDER_SERVICE_URI=`gcloud run services describe recommendation-collector \ --platform managed \ --project $RECO_MGR_PROJECT \ --region $REGION \ --format="value(status.url)"`/run
recommender-iam-scheduler
という名前の Cloud Scheduler ジョブを作成します。gcloud scheduler jobs create http recommender-iam-scheduler \ --project $RECO_MGR_PROJECT \ --time-zone "America/Los_Angeles" \ --schedule="0 */3 * * *" \ --uri=$RECOMMENDER_SERVICE_URI \ --description="Scheduler job to invoke recommendation pipeline" \ --oidc-service-account-email="recommender-scheduler-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com" \ --headers="Content-Type=application/json" \ --http-method="POST"
お住まいの地域に合わせてタイムゾーンを設定してください。タイムゾーン値の形式は tz database に基づきます。
詳細については、gcloud scheduler jobs create http をご覧ください。
Cloud Scheduler ジョブは、
recommendation-collector
サービス用の/run
ルートを呼び出します。--schedule="0 */3 * * *"
フラグを設定すると、3 時間ごとに Scheduler ジョブが実行されます。この設定は要件に従って変更できます。詳細については、cron ジョブ スケジュールの構成をご覧ください。
推奨事項を処理する最適化案ルールエンジンを作成する
このセクションでは、recommendation-rules-engine
という名前の 2 番目の Cloud Run サービスを作成して、recommendation-collector
サービスで収集する推奨事項を処理します。recommendation-rules-engine
サービスは、新しい推奨事項が activeassist-recommendations
トピックに push されると、Pub/Sub によって呼び出されます。
このサービスでは、activeassist-business-rules
コレクションで定義したビジネスルールに基づいて推奨事項が解析されます。
Cloud Shell で、
recommendation-rules-engine
ディレクトリを開きます。cd ../recommendation-rules-engine
Docker イメージ用の環境変数を作成します。
export RULES_ENGINE_IMAGE=gcr.io/$RECO_MGR_PROJECT/recommendation-rules-engine:1.0
Docker イメージを構築し、Container Registry にアップロードします。
gcloud builds submit --tag $RULES_ENGINE_IMAGE
recommendation-rules-engine
サービス用のサービス アカウントを作成して、パイプライン内の他の Google Cloud サービスとやり取りします。gcloud iam service-accounts create recommendation-rules-sa \ --description "Service Account that recommendation-rules-engine uses to invoke other Google Cloud services" \ --display-name "recommendation-rules-sa" \ --project $RECO_MGR_PROJECT
recommendation-rules-engine
サービス用のサービス アカウントに Firestore へのアクセスを許可します。gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/datastore.user
このチュートリアル用に用意されたスタブを使用している場合は、次のステップに進みます。
このチュートリアル用に用意されたスタブではなく、Google Cloud プロジェクト用に生成された推奨事項を使用してパイプラインをテストしている場合は、次のコマンドを実行して、ルールエンジン サービス アカウントにプロジェクトへのアクセスを許可してください。
gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/recommender.iamAdmin gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \ --member serviceAccount:recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/resourcemanager.projectIamAdmin
Cloud Run サービスをデプロイします。
gcloud run deploy recommendation-rules-engine \ --image=$RULES_ENGINE_IMAGE \ --no-allow-unauthenticated \ --region $REGION \ --platform managed \ --service-account recommendation-rules-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --project $RECO_MGR_PROJECT
システムからのメッセージは、すべて受け入れます。
recommendation-rules-engine
の URL を取得します。export RECOMMENDER_SERVICE_RULES_URI=`gcloud run services describe recommendation-rules-engine \ --platform managed \ --project $RECO_MGR_PROJECT \ --region $REGION \ --format="value(status.url)"`/process
この手順で取得した URL は、次のステップで作成する Pub/Sub トピックで新しい推奨事項が使用可能になると呼び出されます。
アクティブな推奨事項用の Pub/Sub トピックを作成する
このセクションでは、recommender-collector
サービスで Recommender API を呼び出して取得する Active Assist の推奨事項用の Pub/Sub トピックを作成します。
Cloud Shell で Pub/Sub トピックを作成します。
gcloud pubsub topics create activeassist-recommendations
recommendation-rules-engine
Cloud Run サービスの呼び出しに使用する Pub/Sub 用のサービス アカウントを作成します。gcloud iam service-accounts create recommendation-engine-sub-sa \ --description "Service Account used by Pub/Sub to push recommendations to the recommendation-rules-engine service" \ --display-name "recommendation-engine-sub-sa" \ --project $RECO_MGR_PROJECT
Pub/Sub サービス アカウントは、メッセージのパブリッシュと
recommendation-rules-engine
サービスの呼び出しに必要なロールに関連付けられている必要があります。gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member serviceAccount:recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role roles/run.invoker \ --project $RECO_MGR_PROJECT
Pub/Sub トピック用のサブスクリプションを作成する
recommendation-rules-engine
サービス用のサブスクリプションを作成します。# grant Pub/Sub the permission to create tokens PUBSUB_SERVICE_ACCOUNT="service-$RECO_MGR_PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \ --member="serviceAccount:$PUBSUB_SERVICE_ACCOUNT"\ --role='roles/iam.serviceAccountTokenCreator' # configure the subscription push identity gcloud pubsub subscriptions create active-assist-recommendations-for-rules-engine \ --topic=activeassist-recommendations \ --topic-project=$RECO_MGR_PROJECT \ --push-auth-service-account=recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --ack-deadline=60 \ --push-endpoint=$RECOMMENDER_SERVICE_RULES_URI
作成した
recommendation-engine-sub-sa
サービス アカウントでrecommendation-rules-engine
サービスを呼び出すことができるようにします。gcloud run services add-iam-policy-binding recommendation-rules-engine \ --member=serviceAccount:recommendation-engine-sub-sa@$RECO_MGR_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region=$REGION \ --platform=managed
スタブを使用したエンドツーエンド テストの実行
Active Assist の推奨事項は、使用パターンとシステム指標に基づくプラットフォームによって生成されます。推奨事項の各カテゴリは、生成される推奨事項に基づいて使用状況データと指標を分析するために、過去の別のデフォルト時間枠を使用する場合があります。たとえば、IAM の推奨事項は、過去 90 日間の使用パターンに基づくプラットフォームによって生成されます。
エンドツーエンドのパイプラインをテストするために、このチュートリアル用にクローンを作成したリポジトリには、エンドツーエンドのパイプラインの実行に使用する推奨事項(スタブ)のサンプルが用意されています。
このセクションでは、次の操作を行います。
- スタブの推奨事項を調べます。
- パイプラインを手動で呼び出します。
- 通知が生成され、作成した Slack チャネルに送信されたかどうかを確認します。
リポジトリにある推奨事項のサンプルを確認します。
cat ../recommendation-collector/stub.json
このファイルには、
roles/gkehub.connect
というロールのサンプル用のREMOVE
アクションを含む推奨事項のサンプルが用意されています。次回にスケジュールされた実行を待たずに、次のコマンドを実行して、Cloud Scheduler でジョブをすぐに実行します。
gcloud scheduler jobs run recommender-iam-scheduler
Cloud Scheduler コンソール ページの、
recommender-iam-scheduler
ジョブの [結果] 列で、結果が [成功] であることを確認します。各サービスで実行される手順の詳細を表示するには、
recommendation-collector
サービスとrecommendation-rules-engine
サービス用の Cloud Run のサービスログを表示することもできます。このチュートリアルで構築するサーバーレスのエンドツーエンド パイプラインが正常に実行されると、削除を推奨するロール バインディングの詳細を含む Slack 通知が生成されます。受け取る通知の例を次に示します。
Project xxxxxxxx\ **Impact**: SECURITY\ This role has not been used during the observation window.\ **Role**: roles/gkehub.connect\ **Member**: serviceAccount:sample-sa@recommendation-sample.iam.gserviceaccount.com\ **Action**: remove
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
次のステップ
- Infrastructure as Code 用の推奨事項の使用について確認する。
- Google Cloud サーバーレス テクノロジーの詳細を確認する。
- Policy Intelligence の推奨事項を IaC パイプラインに統合する方法について確認する。