CloudFormationによるAWSリソース作成時のエラーに対処してみた


# はじめに
こんにちは。すぎもんです:smile:

突然ですが、「Infrastructure as Code」という言葉を聞いたことがありますか？
OSやミドルウェアなどのITインフラいわゆる「Infrastructure」を「コード」化することです。

オンプレが主流だった頃のンフラ構築は専門部隊がそれなりに大きな工数をかけて対応していましたが、近年はそれらのインフラ構築自体をコード化し、自動で作成してくれるサービスが存在します。

[*AWS CloudFormation*](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html)　などがまさにそうですね。利用側としては、決められたパラメータを渡すことで各種インフラリソースを自動で作成してくれますし、何度実行しても同様に動くので、手動で各種インフラリソースを設定していくことに比べて、ミスなどは大幅に軽減されます。

企業のITシステムは、迅速かつ変化に対応しながら進められている昨今、より効率的にインフラ構築運用を開始できる「Infrastructure as Code」は活用が増えそうです。

# 今回やること

AWS各種リソースを作成する[*AWS CloudFormation*](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html)のエラー解決についてまとめます。

以前投稿したQiitaの記事[「HULFT10 for Container Services」の環境構築](https://qiita.com/sugimon/items/e589e654f7bb38825550)が、[*AWS CloudFormation*](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html)を利用してAWSの各種リソースを構築しているため、実際に環境構築時に発生したエラーやその対処法をまとめます。

## HULFT10 for Container Services の環境構成

CloudFormationを利用した各種リソース作成は下記の図の②④の部分です。
2つのCloudFormationを利用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/e2e2638c-85c0-3abf-7dba-2e2791f8e268.png)

## HULFT10 for Container ServicesでのCloudFormation利用

HULFT10 for Container Servicesは、[AWS Marketplace](https://aws.amazon.com/jp/mp/marketplace-service/overview/)からサブスクライブして利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/211f996e-badd-a308-060e-13ad4875d09e.png)

### Cloud Formationの実行

CloudFormation実行時にパラメータを渡します。（※下記はご参考のキャプチャ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/5bfc9ac5-f0d6-d18b-c0f7-3f5fed94fc96.png)

「Cloud Formation Template1の実行」後、イベントログに<font color="Red">**エラーが表示**</font>されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/61955f39-60b1-6979-03f6-a09dfa9bd282.png)

論理ID「S31」のステータスにて「CREATE_FAILED」、作成失敗のステータスが表示されています。
より詳しい内容は「状況の理由」に記載されている下記メッセージとなります。
>Embedded stack arn:aws:【xxxx】 was not successfully created: The following resource(s) <font color="Red">failed to create: [S3Bucket2</font>].

<font color="Red">**S3バケットの作成に失敗**</font>していることが分かります。


### エラー原因の特定

エラー内容が、S3に関するものなので詳しいエラー内容を調べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b57eede5-afff-2a5b-642a-4bbe945a3167.png)

「状況の理由」にはとして以下が表示されました。

>you have attempted to <font color="Red">**create more buckets than allowed**</font>

メッセージからは、<font color="Red">**許可された数を超えるバケットを作成**</font>しようとしたことが原因だと分かりました。バケット数上限に問題があることが分かりました。

そのため、現在のバケット数を確認すると**101個**のバケットが作成されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/8c5da581-70ab-ff63-6f31-a968ebb3c9f2.png)

AWS S3のバケット最大数は、デフォルトで最大100個となっているため、S3のクォータ引き上げをしていない場合は、これがエラー原因となります。

:::note info
**参考**
バケットの制約と制限 Amazon Simple Storage Service
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/BucketRestrictions.html
:::

### エラーの解消
エラーの解消方法としては２つの方法が考えられます。
今回は、AWS S3のサービスクォータの引き上げで対応しました。

:::note
* 不要なS3バケットの削除
* AWS S3のサービスクォータの引き上げ
:::

注意点として、今回私が環境構築したHULFT10 for Container Servicesは1環境に対して、S3バケットを2個作成するため、仮にS3バケット最大数が100だった場合は、既存のS3バケット数を98個以下にする必要があります。

:::: note warn
環境構築に必要なサービスクォータについての詳細は、下記ご参照ください。
[HULFT10スタートアップガイド](https://www.hulft.com/help/ja-jp/HULFT-V10/CONT-SUG/Content/HULFT_CONT_SUG/aws_marketplace/aws_advance_preparation.htm)

クォータの引き上げのリクエスト(AWS Service Quotas)は、下記ご参照ください。
https://docs.aws.amazon.com/ja_jp/servicequotas/latest/userguide/request-quota-increase.html
:::

### 環境構築の再開
エラー原因を解消したましたので、新たに環境構築を実施します。
エラーが発生した「Cloud Formation Template1の実行」が成功しました。:smile:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a0a47842-c5fc-4cff-06ec-ae25c02c844d.png)

※HULFT10 for Container Servicesの環境構築に関するこの後の作業は、[「HULFT10 for Container Services （コンテナ版HULFT）の環境構築をしてみた」](https://qiita.com/sugimon/items/e589e654f7bb38825550)に投稿した通りです。
本記事では、CloudFormationのエラーについてのみ記述しています。

# 最後に
いかがだったでしょうか。
[*AWS CloudFormation*](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html)を使っての環境構築は初めてだったので、S3バケット数という基本的なエラーではありますが、解決には順序立ててログメッセージの確認が必要だったため本記事にまとめてみました。

このブログでは、今後も様々なTopics記事や接続検証等、皆さんの役に立つような記事を投稿していきたいと思います！
ここまで読んでいただきありがとうございました。それでは、また！