Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20211227_ビギナーがCloudFormationを使用してハマったところ

Ecea651f2366b2475f98fb9211f73390?s=47 uechi kohei
December 27, 2021
550

 20211227_ビギナーがCloudFormationを使用してハマったところ

Ecea651f2366b2475f98fb9211f73390?s=128

uechi kohei

December 27, 2021
Tweet

Transcript

  1. ビギナーが、 CloudFormation(CFn) を使用して ハマったところ 上地 航平(うえち こうへい)

  2. 自己紹介 上地 航平 (うえち こうへい) - 前職:スケボー関連(9年) - IT歴は半年 - 趣味はスケボー -

    好きなAWSサービス: CloudFormation(CFn) twitterやってます! → @uechikohei_ https://twitter.com/uechikohei_
  3. アジェンダ • CloudFormationの使い方 • 特にハマった所 • トラブルシューティング • テンプレートファイルの中身(失敗ver /

    修正ver) • まとめ
  4. ”CFn(CloudFormation)”の前に、 ”IaC(Infrastructure as Code)” インフラのコード化とは?

  5. 1. インフラ環境をコードで管理する概念 2. 使い回すことが可能。 再度、インフラ環境を構築できる。 Infrastructure as Code(インフラのコード化)とは?

  6. CloudFormation(CFn)の使い方

  7. 1. ローカル環境でテンプレートファイル(yaml / json)を記述 2. CFnへデプロイする (CLIを使用) 3. CFnはデプロイされたテンプレートファイルを見て、 各種AWSリソースを起動し、スタックという概念で管理する。

  8. テンプレートファイルの構成 CFnのユーザーガイド:リファレンス) https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html セキュリティグ ループ サブネット

  9. 1.ネットワークレイヤー VPC・サブネット・IGW =>クロススタック参照 今回は、最小構成のインフラ環境を作ってみます! 2.セキュリティレイヤー セキュリティグループ 3.アプリレイヤー EC2(t2.micro)

  10. ここを理解しないと、CFnでハマる! ①テンプレートファイル間で、リソースの関連付けが重要。 • 2層目(セキュリティレイヤー)で記述したSG(セキュリティグループ)は、 1層目(ネットワークレイヤー)で記述したVPCに所属する • 3層目(アプリレイヤー)で記述したEC2は、 1層目(ネットワークレイヤー) で記述したサブネットに所属する

  11. 特にハマった所 デプロイコマンドが通らない、、 何回やっても失敗する。。

  12. 1層(ネットワークレイヤー) はデプロイ成功する。 しかし 2層(セキュリティレイヤーとアプリレイヤー) のデプロイが失敗してしまう。。。 aws cloudformation deploy --template-file [テンプレートファイル名]

    --stack-name [スタック名] デプロイコマンド ① ② ③
  13. トラブルシューティング

  14. エラー文は、コンソール画面のほうが見やすい! 「No Export Named MyVPC2 found. ~」 「MyVPC2という値を見つからないよ!」 と言われていました。。

  15. テンプレートファイル(失敗ver)

  16. ①ネットワークレイヤー Resources:  MyVPC2: Type: AWS::EC2::VPC ~ Resources: secGroupName: Type: AWS::EC2::SecurityGroup

    ~ VpcId: !ImportValue MyVPC2 ~ ②セキュリティレイヤー ※ Outputセクション記載忘れたため セキュリティレイヤーで「MyVpc2」を定義したが 「MyVpc2」が見つからなかった
  17. Ref関数とImportValue関数 (組み込み関数) 違うスタックのOutputsセクションでエクスポートした値を、参照したい! - ImportValue関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html 同じスタック内でAWSリソースの値を、参照したい! - Ref関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

  18. テンプレートファイル(修正ver)

  19. ①ネットワークレイヤー Resources: MyVPC2: Type: AWS::EC2::VPC ~ Outputs:  VPC:   Value: !Ref MyVPC2

    Export: Name: MyVPC2 ~ Resources: secGroupName: Type: AWS::EC2::SecurityGroup ~ GroupDescription-SG VpcId: !ImportValue MyVPC2 ~ Outputs: ~ ②セキュリティレイヤー
  20. 無事デプロイが 完了しました

  21. ①ネットワークレイヤー Resources: MyVPC2: ~ Subnet1Name: ~ Outputs:  VPC:   Value: !Ref MyVPC2

    Export: Name: MyVPC2 Subnet1: Value: !Ref Subnet1Name Export: Name: Subnet1Name Resources: secGroupName: Type: AWS::EC2::SecurityGroup ~ GroupDescription-SG VpcId: !ImportValue MyVPC2 ~ Outputs: SG1: Value : !Ref secGroupName Export: Name: SG1Name ②セキュリティレイヤー Resources:  myEC2Instance:   Type: AWS::EC2::Instance   Properties: ~~~~ NetworkInterfaces: SubnetId: !ImportValue Subnet1Name GroupSet: - !ImportValue SG1Name Tags: - Key: Name Value: CFec2 ③アプリレイヤー 3層テンプレートファイル構成の関連付け(全体図) 今回作成したCFnコードは、Github:https://github.com/uechikohei/cloudformation-basic
  22. まとめ) CFnを使用してみて、何を学べたか? - AWSリソース間の依存関係を把握できた。 コンソール画面操作では、依存関係を意識せずとも作成できるようUIUXが整っている。 - IaCのメリットを理解できた。 テンプレートファイルをGithubで共有できるのは、便利!

  23. 最後まで、ご清聴ありがとうございました! CFnのユーザーガイド:リファレンス) https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html Ref関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html ImportValue関数 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-importvalue.html 今回作成したCFnコードは、Githubhttps://github.com/uechikohei/cloudformation-basic