[CFn]Image builder::DistributionConfigurationの構文エラーへの対処
本記事について
こんにちわ。
DevelopersIO BASECAMP一期の加藤です!
今回の記事はエラー文から検索して辿り着いた方以外には、面白味がなさそうな内容です。(開いてくださった方すみません。)
内容の要約
・EC2Image Builderに挑戦。
・スタック実行時 エラーに遭遇した為、同じ事に遭遇する方がいるかもと思い文字にしました。
というものです。
結論
Type:AWS::ImageBuilder::DistributionConfiguration:Properties:Distributions:AmiDistributionConfigurationはドキュメントには「必須:いいえ」と書いてあるが、設定しないとCreate Failedします。
EC2Image Builderとは..
ユーザーガイドより
EC2 Image Builder は、カスタマイズされた安全な最新のサーバー イメージの作成、管理、デプロイメントを自動化するのに役立つフルマネージドの AWS サービスです。
マネジメントコンソールでパイプライン作成を試してみる
先にコンソールで試した後に、テンプレートで同環境を作成します。
畳んでいます。
「イメージパイプラインを作成する」をクリック。
↓
パイプライン名を入力。(「拡張メタデータ収集を有効にする」はチェックをいれたままにします。)
↓
ビルドスケジュールを選択します。※今回は「手動」を選択しました。
↓
「次へ」をクリック。
↓
「レシピを選択する」で「新しいレシピを作成する」+「Amazon マシンイメージ (AMI)」を選択。
↓
レシピ名とバージョンを入力。
↓
「ベースイメージ」は今回以下のように選択しました。
↓
「インスタンスの設定」「作業ディレクトリ」はデフォルトのまま次へ進めます。
↓
画像を拡大しても文字を読み取れないかもしれませんが、
「ビルドコンポーネント」(ここでは「aws-cli-version-2-linux」)
↓
「テストコンポーネント」を選択しています。(「inspector-test-linux」などいくつか選択してみました。)
↓
「ストレージ (ボリューム)」と「タグ」はデフォルトのまま「次へ」をクリック。
↓
「サービスデフォルトを使用してインフラストラクチャ設定を作成する」のまま「次へ」をクリック。
(「新しいインフラストラクチャ設定を作成する」を選択した場合、インスタンスタイプや実行VPC、SecurityGroup、Image Builderから通知とアラートを受信するためのSNSトピック、ログの保存場所等、選択可能になるようです。)
↓
ディストリビューション設定もデフォルトのまま「次へ」をクリック。
↓
内容を確認して「パイプラインを作成する」をクリック。
↓
無事パイプラインが作成されました。
Cloudformationで同じパイプラインを作成してみる。
前章で作成したリソースをテンプレートで表現するという練習で、ユーザーガイドとマネコンを見比べて作成したテンプレートが以下になります。
ec2_image_builder_practice.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
# ------------------------------------------------------------#
# ImageBuilder
# ------------------------------------------------------------#
ImagePipeline:
Type: AWS::ImageBuilder::ImagePipeline
Properties:
DistributionConfigurationArn: !Ref DistributionConfiguration
EnhancedImageMetadataEnabled: true
ImageRecipeArn: !Ref ImageRecipe
InfrastructureConfigurationArn: !Ref InfrastructureConfiguration
Name: test2
Status: ENABLED
ImageRecipe:
Type: AWS::ImageBuilder::ImageRecipe
Properties:
AdditionalInstanceConfiguration:
SystemsManagerAgent:
UninstallAfterBuild: false # default
BlockDeviceMappings:
- DeviceName: /dev/xvda (root)
Ebs:
DeleteOnTermination: true
Encrypted: false
Iops: 100
VolumeSize: 8
VolumeType: gp2
Components:
- ComponentArn: arn:aws:imagebuilder:ap-northeast-1:aws:component/aws-cli-version-2-linux/1.0.4/1
- ComponentArn: arn:aws:imagebuilder:ap-northeast-1:aws:component/inspector-test-linux/1.0.6/1
- ComponentArn: arn:aws:imagebuilder:ap-northeast-1:aws:component/reboot-test-linux/1.0.0/1
- ComponentArn: arn:aws:imagebuilder:ap-northeast-1:aws:component/simple-boot-test-linux/1.0.0/1
- ComponentArn: arn:aws:imagebuilder:ap-northeast-1:aws:component/yum-repository-test-linux/1.0.0/1
Name: test-recipe2
ParentImage: arn:aws:imagebuilder:ap-northeast-1:aws:image/amazon-linux-2-arm64/x.x.x
Version: 1.0.0
WorkingDirectory: /tmp
InfrastructureConfiguration:
Type: AWS::ImageBuilder::InfrastructureConfiguration
Properties:
InstanceProfileName: EC2InstanceProfileForImageBuilder #?
Name: test-InfrastructureConfiguration2
TerminateInstanceOnFailure: true
DistributionConfiguration:
Type: AWS::ImageBuilder::DistributionConfiguration
Properties:
Distributions:
- Region: ap-northeast-1
Name: test-DistributionConfiguration2
発生した構文エラー
上記を実行した所、発生したエラーが以下になります。
Resource handler returned message: "The value supplied for parameter 'distributions[0]' is not valid. One or more outputs should be provided for each region in a distribution configuration. (Service: Imagebuilder, Status Code: 400, Request ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)" (RequestToken: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HandlerErrorCode: GeneralServiceException)
作成したDistributionConfigurationブロック
DistributionConfiguration:
Type: AWS::ImageBuilder::DistributionConfiguration
Properties:
Distributions:
- Region: ap-northeast-1
Name: test-DistributionConfiguration2
ユーザーガイド
全ての設定項目
AmiDistributionConfiguration:
AmiDistributionConfiguration
ContainerDistributionConfiguration:
ContainerDistributionConfiguration
FastLaunchConfigurations:
- FastLaunchConfiguration
LaunchTemplateConfigurations:
- LaunchTemplateConfiguration
LicenseConfigurationArns:
- String
Region: String
問題部分の説明「必須:いいえ」と記載有。
cdkで同じ事にひっかかっていた方
結果
DistributionConfiguration:
Type: AWS::ImageBuilder::DistributionConfiguration
Properties:
Distributions:
- Region: ap-northeast-1
AmiDistributionConfiguration:
Name: testAmiCopyConfiguration - {{ imagebuilder:buildDate }}
Name: test-DistributionConfiguration2
ドキュメントへのフィードバック
「AmiDistributionConfigurationは必須だったりしないでしょうか」としてフィードバックを送信しました。
終わりに
以上でした。どなたかの不毛な時間が短縮されていれば嬉しいです。
お読みいただき有難うございました。
Discussion