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

DevelopersIO 2022 俺のTerraform Pipeline

takakuni
July 29, 2022

DevelopersIO 2022 俺のTerraform Pipeline

takakuni

July 29, 2022
Tweet

More Decks by takakuni

Other Decks in Technology

Transcript

  1. 俺のTerraform Pipeline
    AWS事業本部コンサルティング部
    たかくに

    View full-size slide

  2. 2
    ⾃⼰紹介
    名前︓たかくに
    所属︓AWS事業本部コンサルティング部
    ⼊社︓2022年1⽉にジョイン
    好きなAWSサービス︓Amazon VPC
    Twitter︓@takakuni_

    View full-size slide

  3. 3
    アジェンダ
    ・お題
    ・私の考えたアーキテクチャ
    ・ワークフローをざっくり解説
    ・アーキテクチャ解説
    ・詰まった点やこだわった点
    ・まとめ

    View full-size slide

  4. 4
    お題
    ある企業ではAWSリソースのデプロイツールでTerraformを
    採⽤しています。
    企業ではさらなるIaC化推進の⼀環として、デプロイフローを
    CI/CDで実装することを検討しています。
    あなたはこのCI/CDパイプラインをどのように設計しますか︖

    View full-size slide

  5. 5
    私の⾒解
    唯⼀解はないと思います。
    (みんな違ってみんないい)

    View full-size slide

  6. 6
    ツールの⼀例

    View full-size slide

  7. 7
    私の考えたアーキテクチャ

    View full-size slide

  8. 8
    私の考えたアーキテクチャ

    View full-size slide

  9. 9
    ワークフロー

    View full-size slide

  10. 10
    ワークフロー

    View full-size slide

  11. 11
    ワークフロー

    View full-size slide

  12. 12
    ワークフロー

    View full-size slide

  13. 13
    ワークフロー

    View full-size slide

  14. 14
    ワークフロー

    View full-size slide

  15. 15
    ワークフロー

    View full-size slide

  16. 16
    ワークフロー

    View full-size slide

  17. 17
    ワークフロー

    View full-size slide

  18. 18
    ワークフロー

    View full-size slide

  19. 19
    アーキテクチャ解説

    View full-size slide

  20. 20
    アーキテクチャ解説

    View full-size slide

  21. 21
    アーキテクチャ解説

    View full-size slide

  22. 22
    アーキテクチャ解説 (Lambda)
    CodeBuild (tfsec)の実⾏内容
    exclude.ymlの例
    tfsec -s --no-color --config-file exclude.yml .
    tfsec -s --no-color --config-file exclude.yml . --format junit > reports/tfsec/report.xml
    ---
    exclude:
    # Ignoreしたいルールを記載
    - aws-iam-enforce-mfa
    - aws-vpc-add-description-to-security-group

    View full-size slide

  23. 23
    アーキテクチャ解説

    View full-size slide

  24. 24
    アーキテクチャ解説 (tfsec)
    なぜ、Secrets Managerを使うのか
    →「Docker Hubのイメージ取得制限」を回避するため
    添付画像:docker docsより引用

    View full-size slide

  25. 25
    解決⽅法
    ① Secrets Managerを使⽤して、認証ユーザー経由でイメー
    ジを取得する。
    ②NAT Gatewayを使⽤して、IPアドレスを変更してイメージ
    を取得する。
    ③イメージをECRに保存して、ECRからイメージを取得する。

    View full-size slide

  26. 26
    解決⽅法 (Secrets Manager)
    ・Docker Hubへログインして認証
    ユーザーとしてイメージを取得
    ・「レジストリの認証情報」では、
    Secrets Managerが必要
    添付画像:AWS ナレッジセンターより引用

    View full-size slide

  27. 27
    解決⽅法 (NAT Gateway)

    View full-size slide

  28. 28
    解決⽅法 (ECR)

    View full-size slide

  29. 29
    解決⽅法
    ① Secrets Managerを使⽤して、認証ユーザー経由でイメー
    ジを取得する。
    ②NAT Gatewayを使⽤して、IPアドレスを変更してイメージ
    を取得する。
    ③イメージをECRに保存して、ECRからイメージを取得する。

    View full-size slide

  30. 30
    解決⽅法
    ① Secrets Managerを使⽤して、認証ユーザー経由でイメー
    ジを取得する。
    →新しいイメージを使いたい。コスト最適化。
    ②NAT Gatewayを使⽤して、IPアドレスを変更してイメージ
    を取得する。
    →NAT Gatewayの使⽤⽤途が「CI/CDパイプラインに限る」
    場合、コスパが悪い。
    ③イメージをECRに保存して、ECRからイメージを取得する。
    →バージョン管理が⼤変。古いイメージの使い回しの恐れ。

    View full-size slide

  31. 31
    解決⽅法
    “Too Many Requests.” でビルドが失敗する…。AWS
    CodeBuild で IP ガチャを回避するために Docker Hub ロ
    グインしよう!という話
    Docker オフィシャルイメージが ECR Public で利用可能
    になりました #reinvent

    View full-size slide

  32. 32
    アーキテクチャ解説

    View full-size slide

  33. 33
    アーキテクチャ解説

    View full-size slide

  34. 34
    アーキテクチャ解説
    printenvコマンドの出⼒結果(⼀部抜粋)

    View full-size slide

  35. 35
    アーキテクチャ解説

    View full-size slide

  36. 36
    アーキテクチャ解説

    View full-size slide

  37. 37
    アーキテクチャ解説
    [AWS × Terraform] plan できるけど apply できない GitOps
    な IAM ユーザーポリシーの設定方法
    ・アーティファクト⽤のS3バケットへ
    の操作権限
    ・S3、DynamoDBの暗号化で使⽤する
    KMSキーへの操作権限
    ・CloudWatch Logsへのビルドログの
    配信権限

    View full-size slide

  38. 39
    まとめ
    ・なるべくAWSリソースを使⽤した設計をご紹介
    ・CodeBuildからDocker Hubへのイメージプルには注意
    ・CodePipelineでは「名前空間」で値の受け渡しが可能
    ・terraform planのIAMロールは「ReadOnlyAccess」が有効
    TerraformのCI/CDパイプラインを実装してみた

    View full-size slide