ユースカジノ 入金不要ボーナス コード CDK で Custom resources を作成する
投稿日: 2024/02/08
はじめに
こんにちは、カジノゲームの山本です。
本記事では、Custom Resource Provider Frameworkを用いたCDKでカスタムユースカジノ 入金不要ボーナス コード実装方法の解説していきたいと思います。
具体的な内容は以下になります。
- Custom Resources の概要説明
- CDKの Custom Resource Provider Framework を用いたユースカジノ 入金不要ボーナス コード方法の基本的な説明
- Provider Framework を使用したCDKのサンプルユースカジノ 入金不要ボーナス コード(やってみた)
Custom Resources について
Custom Resources とは
Custom Resources (カスタムユースカジノ 入金不要ボーナス コード) とは、CloudFormationからの「Create/Update/Delete」イベントをLambda や SNS に関連付けて処理する仕組みを実装することでCloudFormationを拡張する仕組みとなります。
CloudFormation のユースカジノ 入金不要ボーナス コードタイプに存在しなかったり、独自の処理でプロビジョニングを行いたい場合は、カスタムユースカジノ 入金不要ボーナス コードの仕組みを用いてユースカジノ 入金不要ボーナス コードの構成管理ができます。
参考:AWS/Documentation/AWS CloudFormation/User Guide/Custom resources
【参考】 CloudFormation レジストリ
また、カスタムユースカジノ 入金不要ボーナス コードとは別に、CloudFormation レジストリという仕組みもあります。
こちらはLambdaやSNSの関連付けが不要、ドリフト検出をサポートする等、AWS が提供するユースカジノ 入金不要ボーナス コードタイプと同じような使用かできるといった利点があるため、しっかりと構築する場合はこちらが候補になるでしょう。
CloudFormationの拡張方法
CloudFormation拡張方法 | 説明 |
---|---|
Custom Resources(カスタムユースカジノ 入金不要ボーナス コード) | CloudFormationからの「Create/Update/Delete」イベントをLambda や SNS に関連付けてユースカジノ 入金不要ボーナス コードする仕組みを実装することで拡張する仕組み。 |
CloudFormation レジストリ | AWS アカウント で使用できるユースカジノ 入金不要ボーナス コード、モジュール、フックの拡張を管理できる仕組み。AWS が提供するユースカジノ 入金不要ボーナス コードタイプと同じように使用できるようになる。 |
CDK における Custom Resources
CDK では、以下のCustom Resourcesのユースカジノ 入金不要ボーナス コード手段があります。
CDK における Custom Resourcesのユースカジノ 入金不要ボーナス コード方法
ユースカジノ 入金不要ボーナス コードの実装方法 | 特徴 |
---|---|
SNS Topic |
|
AWS Lambda Function |
|
core.CustomResourceProvider class |
|
Custom Resource ユースカジノ 入金不要ボーナス コード (推奨) |
|
CDKでは、ユースカジノ 入金不要ボーナス コードに必要な処理の実装支援を提供するCustom Resource ユースカジノ 入金不要ボーナス コード
の使用が推奨されています。
参考:AWS CDK Reference Documentation / Custom Resources
Provider Framework を用いたCDKのユースカジノ 入金不要ボーナス コード方法
Custom Resource Provider Framework を用いたカスタムユースカジノ 入金不要ボーナス コードの実装方法について基本的な内容を説明します。
本記事では、以下のユースカジノ 入金不要ボーナス コードの公式ドキュメントを参考に要点を嚙み砕いて説明するとともに、正確であることを心掛けてはおりますが、 より詳細かつ正確で最新な情報を求める方は直接公式ドキュメントを参照して頂けますと幸いです。
参考:AWS CDK Reference Documentation / ユースカジノ 入金不要ボーナス コード
ユースカジノ 入金不要ボーナス コード を用いたCDKコードの構成
Provider Framework を用いたCDKのユースカジノ 入金不要ボーナス コードイメージは以下になります。
Provider Frameworkを利用する際、CDKでは以下の要素をユースカジノ 入金不要ボーナス コードする必要があります。
- Lambda (onEvent handler)
- Provider Construct
- CustomResource
以下、各ユースカジノ 入金不要ボーナス コード要素に絞って説明していきます。
記事後半にてサンプルコードがありますので、合わせてご覧ください。
Lambda (onEvent handler)
ユースカジノ 入金不要ボーナス コードのライフサイクルイベント(Create / Update/ Delete)に対応する処理をLambdaで実装します。
ユースカジノ 入金不要ボーナス コードに当たって、最低限、抑えて置く必要がある要素に絞って説明します。
(※実装するユースカジノ 入金不要ボーナス コードの内容によっては以下の限りではありませんが、一般的な使用方法の観点で説明します。)
onEvent ユースカジノ 入金不要ボーナス コードの実装のポイント
- 「Create / Update/ Delete」の情報は Lambdaの入力ユースカジノ 入金不要ボーナス コードのオブジェクトに含まれる
RequestType
から取得できるため、このフラグに応じて、ユースカジノ 入金不要ボーナス コードを判別します。 - 要求されるユースカジノ 入金不要ボーナス コードの状態(
CustomResource
で定義したproperties
)は入力ユースカジノ 入金不要ボーナス コードのオブジェクトに含まれるResourceProperties
から取得できるため、この内容に合わせて、管理するユースカジノ 入金不要ボーナス コードの状態を変更する処理を実装していきます。 - 戻り値のオブジェクトの
PhysicalResourceId
パラメータには、生成したユースカジノ 入金不要ボーナス コードの物理IDを返すようにします。※物理ユースカジノ 入金不要ボーナス コードIDについては後述で説明 - 「Update/ Delete」ユースカジノ 入金不要ボーナス コードでは、入力ユースカジノ 入金不要ボーナス コードのオブジェクトに含まれる
PhysicalResourceId
を取得して、このユースカジノ 入金不要ボーナス コードに対して更新・削除するように処理を実装します。
Provider Construct
Provider Frameworkを使用して、ユースカジノ 入金不要ボーナス コード作成します。
Provider Frameworkにより、CloudFormationとのやり取り等の大部分のユースカジノ 入金不要ボーナス コードが管理されるため、実装を大幅に簡略化できます。
Provider Frameworkにより管理されるユースカジノ 入金不要ボーナス コード
- AWS CloudFormation への応答ユースカジノ 入金不要ボーナス コード
- ハンドラーの戻り値の検証とユースカジノ 入金不要ボーナス コード支援
- タイムアウトの管理
- 物理ユースカジノ 入金不要ボーナス コード ID の管理
最低限、onEvent handler Lambdaを関連付けるだけで、ユースカジノ 入金不要ボーナス コードが作成できます。
CustomResource
カスタムユースカジノ 入金不要ボーナス コードのコンストラクトを作成します。
最低限、以下のユースカジノ 入金不要ボーナス コードを実装します。
ユースカジノ 入金不要ボーナス コードのポイント
- ユースカジノ 入金不要ボーナス コード
serviceToken
に指定する - ユースカジノ 入金不要ボーナス コードに渡すプロパティをpropertiesに指定する。
物理ユースカジノ 入金不要ボーナス コードIDについての補足説明
Physical Resource IDs(物理ユースカジノ 入金不要ボーナス コードID)とは
物理ユースカジノ 入金不要ボーナス コードIDはCloudFormationで管理されるユースカジノ 入金不要ボーナス コードのIDです。
公式ドキュメントを要約すると、物理ユースカジノ 入金不要ボーナス コードIDは以下のような説明がされています。
- ユースカジノ 入金不要ボーナス コード
serviceToken
に指定する - Createオペレーションで、明示的に物理ユースカジノ 入金不要ボーナス コードIDを返さない場合は、フレームワークにより、リクエストIDが設定される
- Updateオペレーションで、デフォルトの処理としては、現行の物理ユースカジノ 入金不要ボーナス コードIDを返す。
- Updateオペレーションで、
onEvent
が現行の物理ユースカジノ 入金不要ボーナス コードIDと異なる物理ユースカジノ 入金不要ボーナス コードIDを返した場合、CloudFormation上、置換処理として扱う。
すなわち、物理ユースカジノ 入金不要ボーナス コードIDはUpdate、Delete イベントの処理の中で、更新・削除対象のユースカジノ 入金不要ボーナス コードのキー情報としての役割で使用します。
そのため、実装する処理にもよりますが、管理対象ユースカジノ 入金不要ボーナス コードに対応するSDKのAPIのキーとなる情報を設定するのがよいでしょう。
大抵は管理対象のユースカジノ 入金不要ボーナス コードのARNやユースカジノ 入金不要ボーナス コードID等を物理ユースカジノ 入金不要ボーナス コードIDとして設定する形になるかと思います。
なお、論理IDと物理ユースカジノ 入金不要ボーナス コードIDはCloudFormationのマネージドコンソール上から確認できます。
物理ユースカジノ 入金不要ボーナス コードIDと更新処理
前述でも触れましたが、Update処理で返却する物理ユースカジノ 入金不要ボーナス コードIDによって、CloudFormationが発行するオペレーション処理が変わりますので、実装時にどちらの処理が適切か留意して実装する必要があります。
- Updateイベントの中で、プロバイダーが既存と同じ物理ユースカジノ 入金不要ボーナス コードIDを返した場合は、通常の更新処理となる。
- Updateイベントの中で、プロバイダーが既存と異なる物理ユースカジノ 入金不要ボーナス コードIDを返した場合、更新が置換処理の扱いとなり、CloudFormationは続けて既存ユースカジノ 入金不要ボーナス コードに対するDeleteオペレーションを発行する挙動となる。
図にすると以下のようなイメージです。
エラー時のユースカジノ 入金不要ボーナス コードの考慮
CloudFormationのユースカジノ 入金不要ボーナス コードの中でエラーが発生すると、ロールバックユースカジノ 入金不要ボーナス コードが実行されますので、ロールバック動作にも留意して実装する必要があります。
ユースカジノ 入金不要ボーナス コード のドキュメントを読み解くと、ユースカジノ 入金不要ボーナス コードでは、エラー時の動作は以下のようになると説明されています。
Create ユースカジノ 入金不要ボーナス コードで失敗した場合
- ユースカジノ 入金不要ボーナス コードの生成に失敗した場合、プロバイダーフレームワークはDeleteオペレーションを無視する。
- 必要に応じて、エラーハンドリングとして、クリーンアップユースカジノ 入金不要ボーナス コードを実装する必要がある。
Update ユースカジノ 入金不要ボーナス コードで失敗した場合
- ユースカジノ 入金不要ボーナス コードの更新に失敗した場合、CloudFormationから
ResourceProperties
とOldResourceProperties
の内容が入れ替えられたUpdate オペレーションが発行される。 - 異なる物理ユースカジノ 入金不要ボーナス コードIDが返した後(置換アップデートの後)、更新に失敗した場合は、クリーンアップの為、新しく作成したユースカジノ 入金不要ボーナス コードに対する Delete オペレーションが発行される。
Delete ユースカジノ 入金不要ボーナス コードで失敗した場合
- ユースカジノ 入金不要ボーナス コードの削除に失敗した場合、CloudFormationはユースカジノ 入金不要ボーナス コードを放棄する。
カスタムユースカジノ 入金不要ボーナス コードの処理として、他のコンストラクトで管理するユースカジノ 入金不要ボーナス コードとの複数の関連や、複数のAPIを実行するような処理を検討する場合は、多くのユースケースに対応する必要性が発生してしまいます。
個人的な所感ですが、カスタムコンストラクトのユースカジノ 入金不要ボーナス コードの中で多くのことを行わず、可能な限りシンプルに設計するのが良いかと思います。
AwsCustomResource コンストラクト
AWS API を1つだけ呼び出すような処理のカスタムユースカジノ 入金不要ボーナス コードを作成したい場合、Custom Resource Provider Frameworkでは、AwsCustomResource
コンストラクトが用意されています。
AwsCustomResource
コンストラクトを使用する場合、イベントユースカジノ 入金不要ボーナス コードの実装をフレームワーク側が支援してくれるため、Lambdaのハンドラユースカジノ 入金不要ボーナス コードのコードの実装が不要になります。
Provider Framework を使用したCDKのサンプルユースカジノ 入金不要ボーナス コード
本記事では、CDK (Typescript)で Provider Framework を用いた簡単なユースカジノ 入金不要ボーナス コード(ECR プライベートレジストリのスキャン設定のプロビジョニング)を実演したいと思います。
ECR プライベートレジストリのスキャン設定の変更は公式のCloudFormation ユースカジノ 入金不要ボーナス コードタイプでサポートされていないため、こちらを題材にしました。
注意!
本記事のコードを実行すると、ユースカジノ 入金不要ボーナス コードが変更されるとともに、Inspector がActive になり、利用料金が発生する可能性があります。
本記事のコードを実行する場合は、内容を理解した上で自己責任で実施をお願いします。
ユースカジノ 入金不要ボーナス コード対象の説明
ユースカジノ 入金不要ボーナス コードは以下の2つの要素で構成されます。
- スキャンタイプ
- リポジトリフィルタ
仕様の検討
対応するSDKの調査
プロビジョニングユースカジノ 入金不要ボーナス コードはLambda(Node.js)でユースカジノ 入金不要ボーナス コードするものとして、ECR プライベートレジストリのスキャン設定に対応するSDKのライブラリを調べます。
SDKのリファレンスによるとPutRegistryScanningConfigurationCommand
でユースカジノ 入金不要ボーナス コードできそうです。
AWS SDK for JavaScript v3 / PutRegistryScanningConfigurationCommand
各ライフサイクルイベントのユースカジノ 入金不要ボーナス コードを考える
次に、「Create/Update/Delete」イベントに対してどのようなユースカジノ 入金不要ボーナス コードを実装するか検討します。
本記事では、次のようにユースカジノ 入金不要ボーナス コードするものとします。
ライフサイクルユースカジノ 入金不要ボーナス コード | ユースカジノ 入金不要ボーナス コード |
---|---|
Create | 「指定されたスキャンタイプ」、ユースカジノ 入金不要ボーナス コード。 |
Update | 「指定されたスキャンタイプ」、ユースカジノ 入金不要ボーナス コード。 |
Delete | 「スキャンタイプ = "Basic"」、「リポジトリフィルタ = 未設定」の状態(出荷時の状態)に変更する。 |
CDK のユースカジノ 入金不要ボーナス コード
CDKユースカジノ 入金不要ボーナス コードジェクトの作成
以下を実行して、CDKユースカジノ 入金不要ボーナス コードジェクトを作成します。
mkdir cdk-cr-ecr-registry
cd cdk-cr-ecr-registry
cdk init app --language typescript
また、以下も必要となるため、追加でインストールします。
npm install -D @types/aws-lambda # lambdaの型定義
npm i -S @aws-sdk/client-ecr # AWS SDKのclient-ecr モジュール
ディレクトリ構成
コードのディレクトリ構成とファイル名は以下のようにします。
.
├── bin
│ └── cdk-cr-ecr-registry.ts // プログラムのエントリーポイント
└── lib
├── cdk-cr-ecr-registry-stack.ts // スタックを定義
└── construct
├── ecr-registry-scanning-configuration-construct.ts // ECR プライベートレジストリのスキャン設定を扱うカスタムコンストラクトを定義
└── src
└── index.ts // カスタムユースカジノ 入金不要ボーナス コードのイベントハンドラ (lambda) を実装
エントリーポイント (bin/cdk-cr-ecr-registry.ts)
- CDKコードのエントリーポイントとなります。
- 後述するユースカジノ 入金不要ボーナス コードック
CdkCrEcrRegistryStack
を呼び出しています。
#!/usr/bin/env node
import "source-map-support/register";
import * as cdk from "aws-cdk-lib";
import { CdkCrEcrRegistryStack } from "../lib/cdk-cr-ecr-registry-stack";
const app = new cdk.App();
new CdkCrEcrRegistryStack(app, "CdkCrEcrRegistryStack", {});
ユースカジノ 入金不要ボーナス コードック (lib/cdk-cr-ecr-registry-stack.ts)
- ユースカジノ 入金不要ボーナス コードック
CdkCrEcrRegistryStack
の定義となります。 - ユースカジノ 入金不要ボーナス コードコンストラクト
EcrRegistryScanningConfigurationConstruct
にECR プライベートレジストリのスキャン設定を渡してユースカジノ 入金不要ボーナス コードを変更します。
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import { EcrRegistryScanningConfigurationConstruct } from "./construct/ecr-registry-scanning-configuration-construct2";
export class CdkCrEcrRegistryStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new EcrRegistryScanningConfigurationConstruct(
this,
"EcrRegistryScanningConfiguration",
{
scanType: "ENHANCED",
rules: [
{
scanFrequency: "CONTINUOUS_SCAN",
repositoryFilters: [{ filter: "prd-*", filterType: "WILDCARD" }],
},
{
scanFrequency: "SCAN_ON_PUSH",
repositoryFilters: [{ filter: "dev-*", filterType: "WILDCARD" }],
},
],
}
);
}
}
ユースカジノ 入金不要ボーナス コードコンストラクト ( lib\construct\ecr-registry-scanning-configuration-construct.ts)
- ECR プライベートレジストリのスキャン設定を扱うユースカジノ 入金不要ボーナス コードコンストラクトの定義となります。
- 内部で
Provider Construct
、CustomResource
、Lambda (onEvent handler)
を作成し、カスタムユースカジノ 入金不要ボーナス コードを実装します。
import { Construct } from "constructs";
import * as cdk from "aws-cdk-lib";
import * as cr from "aws-cdk-lib/custom-resources";
import * as iam from "aws-cdk-lib/aws-iam";
import * as nodejsLambda from "aws-cdk-lib/aws-lambda-nodejs";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as path from "path";
import { ResourceProperties } from "./src/index";
export class EcrRegistryScanningConfigurationConstruct extends Construct {
constructor(scope: Construct, id: string, props: ResourceProperties) {
super(scope, id);
// IAM Policy を作成
const policyStatement = new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
"ecr:PutRegistryScanningConfiguration",
"inspector2:ListAccountPermissions",
"inspector2:Disable",
"inspector2:Enable",
"iam:CreateServiceLinkedRole",
],
resources: ["*"],
});
// カスタムリソースのイベントハンドラ (Lambda Function)を作成
const lambdaFunction = new nodejsLambda.NodejsFunction(
this,
"OnEventHandler",
{
runtime: lambda.Runtime.NODEJS_18_X,
entry: path.join(__dirname, "./src/index.ts"),
handler: "handler",
initialPolicy: [policyStatement],
}
);
// ユースカジノ 入金不要ボーナス コード作成
const provider = new cr.Provider(this, "Provider", {
onEventHandler: lambdaFunction,
});
// カスタムリソース作成
new cdk.CustomResource(this, "CustomResource", {
serviceToken: provider.serviceToken,
properties: props,
});
}
}
onEvent handler (lib\construct\src\index.ts)
Lambda (onEvent handler)
のユースカジノ 入金不要ボーナス コードとなります。- SDKを呼びだして、ユースカジノ 入金不要ボーナス コードします。
- 更新対象にIDは必要ないので、物理IDは特に設定していません。
{
// ResourcePropertiesに更新対象のプロパティが含まれる。
const properties: ResourceProperties = {
scanType: event.ResourceProperties.scanType,
rules: event.ResourceProperties.rules,
};
// RequestTypeにイベントフラグが含まれる。
// RequestTypeに応じて各ユースカジノ 入金不要ボーナス コードを実装。
switch (event.RequestType) {
case "Create":
await onCreate(properties);
return {};
case "Update":
await onUpdate(properties);
return {};
case "Delete":
await onDelete();
return {};
default:
throw new Error("Failed");
}
};
/**Create のユースカジノ 入金不要ボーナス コード */
async function onCreate(
props: ResourceProperties
): Promise{
const command = new PutRegistryScanningConfigurationCommand(props);
const result = await client.send(command);
return result;
}
/**Update のユースカジノ 入金不要ボーナス コード */
async function onUpdate(
props: ResourceProperties
): Promise{
const command = new PutRegistryScanningConfigurationCommand(props);
const result = await client.send(command);
return result;
}
/**Delete のユースカジノ 入金不要ボーナス コード */
async function onDelete(): Promise{
// Deleteユースカジノ 入金不要ボーナス コードでは、デフォルト設定に戻す。
const input: PutRegistryScanningConfigurationCommandInput = {
rules: [],
scanType: "BASIC",
};
const command = new PutRegistryScanningConfigurationCommand(input);
const result = await client.send(command);
return result;
}
動作確認
「Create/Update/Delete」イベントの各ユースカジノ 入金不要ボーナス コードが正常にユースカジノ 入金不要ボーナス コードされるか確認します。
「Create/Update/Delete」ユースカジノ 入金不要ボーナス コードの正常系の動作に関しては、正常に動作しているようです。
なお、本記事では記載していませんが、異常系のユースカジノ 入金不要ボーナス コード(ロールバック時のユースカジノ 入金不要ボーナス コード等)についても動作確認をする必要があります。
AwsCustomResource でユースカジノ 入金不要ボーナス コードした場合
前述のカスタムユースカジノ 入金不要ボーナス コードは単純にPutRegistryScanningConfigurationCommand
を使用するだけなので、実は、
AwsCustomResource
を使用してさらに簡単にユースカジノ 入金不要ボーナス コードすることが可能です。
AwsCustomResource のコード
- 前述の
ecr-registry-scanning-configuration-construct.ts
を以下のコードで置換すると同様のユースカジノ 入金不要ボーナス コードがAwsCustomResourceで実現できます。 - また、Lambda (onEvent handler)ユースカジノ 入金不要ボーナス コードの
lib\construct\src\index.ts
も不要です。
import { Construct } from "constructs";
import * as cr from "aws-cdk-lib/custom-resources";
import * as iam from "aws-cdk-lib/aws-iam";
import { PutRegistryScanningConfigurationCommandInput } from "@aws-sdk/client-ecr";
export class EcrRegistryScanningConfigurationConstruct extends Construct {
constructor(
scope: Construct,
id: string,
props: PutRegistryScanningConfigurationCommandInput
) {
super(scope, id);
// IAMポリシー
const policyStatement = new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: [
"ecr:PutRegistryScanningConfiguration",
"inspector2:ListAccountPermissions",
"inspector2:Disable",
"inspector2:Enable",
"iam:CreateServiceLinkedRole",
],
resources: ["*"],
});
// カスタムユースカジノ 入金不要ボーナス コードを作成
new cr.AwsCustomResource(this, "CustomResource", {
onCreate: {
action: "PutRegistryScanningConfigurationCommand",
service: "ECR",
parameters: props,
physicalResourceId: cr.PhysicalResourceId.of("ecr"),//本ケースでは、物理IDは必要ないので適当に指定。
},
onUpdate: {
action: "PutRegistryScanningConfigurationCommand",
service: "ECR",
parameters: props,
},
onDelete: {
action: "PutRegistryScanningConfigurationCommand",
service: "ECR",
parameters: {
rules: [],
scanType: "BASIC",
},
},
policy: cr.AwsCustomResourcePolicy.fromStatements([policyStatement]),
});
}
}
まとめ
CDKでは、Provider Frameworkがカスタムユースカジノ 入金不要ボーナス コードのコントロールの大部分を管理してくれるため、カスタムユースカジノ 入金不要ボーナス コードを比較的に簡単に実装できます。
また、プロビジョニングの各ユースカジノ 入金不要ボーナス コードが1つのSDKのAPIのみで完結するのであれば、AwsCustomResource
を使用することで、Lambdaのユースカジノ 入金不要ボーナス コード自体も不要となります。
しかしながら、今回は簡単な例でしたので動作に特に問題ありませんでしたが、参照関係を含んだり、複雑な処理を含む処理のカスタムユースカジノ 入金不要ボーナス コードを作成する場合、様々なユースカジノ 入金不要ボーナス コードの状態を考慮して実装する必要があります。
中途半端な実装のカスタムユースカジノ 入金不要ボーナス コードをプロダクション環境に導入した場合、最悪、ロールバックに失敗し、スタックが壊れる可能性もありますので、入念にテストしてから導入しましょう。
カジノゲームは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。