😴
CloudFormationレジストリのサードパーティ拡張機能をテンプレートでアクティブにするリソースタイプをSleepの例で説明。
AWS::CloudFormation::TypeActivationを利用する
前回以下のような記事を書きました。
実際にはタイトルにもあるパブリックなサードパーティ拡張機能をアクティベートして利用する事で利用可能となるリソースタイプとなります。テンプレートで一挙手で出来るのではないかと思いドキュメントを眺めていた所、やはり存在しましたので、使ってみたいと思います。
手順
アクティベーションするリソースタイプ
これにしてみます。
出来そうな事が直感的ですね。(どういうケースで必要になりそうかは想像出来ていませんが。)
付与するロールについて
ここにあります。
今回の拡張機能に付与するロールに関係するノート(記述)がありました。
テンプレート
typeActivationTest.yml
AWSTemplateFormatVersion: "2010-09-09"
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
Resources:
# ------------------------------------------------------------#
# TypeActivation
# ------------------------------------------------------------#
TypeActivation:
Type: AWS::CloudFormation::TypeActivation
Properties:
# ※① PublicTypeArn、またはTypeName、TypeおよびPublisherId を指定する必要があります。 を指定する必要があり。
# ※② MajorVersion または VersionBump、両方を指定する事は出来ないと記載あり。MajorVersionのデフォルト値がLatestVersionになる事から、両方設定しない場合はLatestVersionが選択された事になる。
AutoUpdate: true
ExecutionRoleArn:
Fn::GetAtt: ExecutionRole.Arn
# LoggingConfig:
# LoggingConfig
# MajorVersion: # # 必要な場合は設定(デフォルトはLatestVersionになっている。)
PublicTypeArn: arn:aws:cloudformation:us-east-1::type/resource/c830e97710da0c9954d80ba8df021e5439e7134b/AwsCommunity-Time-Sleep
# PublisherId: String
Type: RESOURCE # HOOK | MODULE | RESOURCE
TypeName: AwsCommunity::Time::Sleep
# TypeNameAlias: # 必要な場合は設定
# VersionBump: # 指定が可能且つ、必要な場合は設定 # MAJOR | MINOR
# ------------------------------------------------------------#
# Role
# ------------------------------------------------------------#
ExecutionRole:
Type: AWS::IAM::Role
Properties:
MaxSessionDuration: 8400
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: resources.cloudformation.amazonaws.com
Action: sts:AssumeRole
Path: "/"
Policies:
- PolicyName: ResourceTypePolicy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- "ssm:DeleteParameter"
- "ssm:GetParameter"
- "ssm:PutParameter"
Resource: !Sub "arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/CloudFormation/AwsCommunity/Time/Sleep/*"
# ------------------------------------------------------------#
# Outputs
# ------------------------------------------------------------#
Outputs:
Arn:
Value:
Fn::GetAtt: TypeActivation.Arn
↓
無事作成されました。
↓
こちらも「アクティベート化済み」になっている事が確認出来ました。
試しにSleepを利用してみる
以下githubです。
sleepTest.yml
Resources:
Sleep1:
Type: AwsCommunity::Time::Sleep
Properties:
Seconds: 5
SleepOnCreate: true
SleepOnUpdate: true
SleepOnDelete: true
Sleep2:
Type: AwsCommunity::Time::Sleep
Properties:
Seconds: 10
SleepOnCreate: true
SleepOnUpdate: true
SleepOnDelete: true
Triggers:
- !Ref Sleep1
Sleep3:
Type: AwsCommunity::Time::Sleep
Properties:
Seconds: 15
SleepOnCreate: true
SleepOnUpdate: true
SleepOnDelete: false
Triggers:
- !Ref Sleep2
Sleep4:
DependsOn: Sleep3
Type: AwsCommunity::Time::Sleep
Properties:
Seconds: 20
SleepOnCreate: true
SleepOnUpdate: true
SleepOnDelete: false
Triggersプロパティについて、DependsOnとの違いの有無など、色々試してみると面白いかもしれません。
スタックを削除してみると
アクティベートも解除されました。
以上でした
全サードパーティリソースのアクティベートについて、どういう管理がベストかまた考えてみたいと思いました。
有難うございました。
Discussion