Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

6 ツールの⼀例

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

9 ワークフロー

Slide 10

Slide 10 text

10 ワークフロー

Slide 11

Slide 11 text

11 ワークフロー

Slide 12

Slide 12 text

12 ワークフロー

Slide 13

Slide 13 text

13 ワークフロー

Slide 14

Slide 14 text

14 ワークフロー

Slide 15

Slide 15 text

15 ワークフロー

Slide 16

Slide 16 text

16 ワークフロー

Slide 17

Slide 17 text

17 ワークフロー

Slide 18

Slide 18 text

18 ワークフロー

Slide 19

Slide 19 text

19 アーキテクチャ解説

Slide 20

Slide 20 text

20 アーキテクチャ解説

Slide 21

Slide 21 text

21 アーキテクチャ解説

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

23 アーキテクチャ解説

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

27 解決⽅法 (NAT Gateway)

Slide 28

Slide 28 text

28 解決⽅法 (ECR)

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

32 アーキテクチャ解説

Slide 33

Slide 33 text

33 アーキテクチャ解説

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

35 アーキテクチャ解説

Slide 36

Slide 36 text

36 アーキテクチャ解説

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

38 まとめ

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

No content