Slide 1

Slide 1 text

そんなことあるんだ AWS 2019/07/22 #awswakaran_tokyo オタク

Slide 2

Slide 2 text

  「awswakaran.tokyo ってのをやるんですけど喋りませんか」 おれ「はい」   「名前どうしますか、後から変更出来るんで仮置きで大丈夫です」 おれ「じゃあ一旦オタクで」   「OK」 おれ「ヨッシャ」 →そして当日へ…… 前日譚

Slide 3

Slide 3 text

- 前日譚 - アジェンダ(イマココ) - お前誰? - この話の目的 - Route53 で取得した .jp ドメインの移管ロックを有効にしたかった話 - Terraform で管理していた ACM の DNS 検証用の CNAME レコードの Terraform State がある日突然ぶっ壊れた話 アジェンダ

Slide 4

Slide 4 text

- @ksakahieki - K坂ひえき - オタク - 好きなサービス - DynamoDB - Aurora - CodeBuild - 一番好きなサービス - AWS Support お前誰?

Slide 5

Slide 5 text

よろしくおねがいします。

Slide 6

Slide 6 text

@みなさん AWS わかるって言えますか?

Slide 7

Slide 7 text

Amazon EC2 のことわかりますか?

Slide 8

Slide 8 text

Amazon Kinesis Video Streams のことわ かる人いますか?

Slide 9

Slide 9 text

Amazon QLDB のことわか る人いますか???

Slide 10

Slide 10 text

AWS Ground Station の 使い方わかる人います か???

Slide 11

Slide 11 text

俺は知らん!!!

Slide 12

Slide 12 text

なので AWS わかるっ て絶対言いたくない

Slide 13

Slide 13 text

- でも実際に使うサービスって一部じゃん? - でも各サービスごとになんかよくわからないめ ちゃくちゃ細かい色々なアレがあるじゃないで すか - 「そうなんだ……」ってなるやつ - それについての話をします 今日話すこと

Slide 14

Slide 14 text

- とりあえず触ってみたら細かい部分で困ることよく あるじゃないですか - そういうので怖気づいて「AWSよくわからないし 怖い」ってなる人を少しでも減らしたい - 「そうなんだ……」「そんなことあるんだ」を増や して経験値を溜めていきたい どうして?

Slide 15

Slide 15 text

Route53 で取得した .jp ドメインの移管ロック を有効にしたかった話

Slide 16

Slide 16 text

こんな感じのドメインを持っていました。 - awswakaran.jp - awswakaru.jp あらすじ

Slide 17

Slide 17 text

2019年4月5日……

Slide 18

Slide 18 text

2019年4月5日……

Slide 19

Slide 19 text

- ドメイン移管申請が行われてから10日以内に登 録者からの返答がなかった場合、自動承認され てしまうというフローが原因 - とはいえ移管ロックしとけばいい - こわいですね、確認しましょう ドメイン移管申請こわい

Slide 20

Slide 20 text

:innocent:

Slide 21

Slide 21 text

とりあえずドキュメント読みましょう

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

いけそう

Slide 24

Slide 24 text

有効にしてみましょう

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

- Route53 のレジストラはほぼ Gandi - .com, .org, .net は Amazon Registrar, Inc. - Gandi は2文字 TLD のドメイン移管ロックをサ ポートしていない - こたえ

Slide 27

Slide 27 text

そうなんだ……

Slide 28

Slide 28 text

- AWS の日本語ドキュメントが間違えていることも 時にはある - 直って欲しい!!! - Route53 で取得した .jp ドメインは移管ロック出 来ない - 気をつけましょうとしか…… 教訓

Slide 29

Slide 29 text

- 英語ドキュメントでは `Not Supported` (よくある) - (AWS の方からご指摘)日本語ドキュメントは補足であり、英語ドキュメントが正 です オチ

Slide 30

Slide 30 text

待ってくれ

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

!!!

Slide 33

Slide 33 text

有効に出来ないのに有効になってる

Slide 34

Slide 34 text

- 過去に移管ロック出来ないはずのドメインがロックを取得出来 てしまった時期があるらしい?(AWS Forums情報) - 有効と表示されていても、移管ロック無効と同等の振る舞いを する - 有効→無効の操作は不可能 - サポートに問い合わせたら表示上も無効にできる様子 なぜか有効になっているやつ

Slide 35

Slide 35 text

- Route53 で .jp ドメインの移管ロックは使えない - Route53 の後ろには Gandi がいる - でも Route53 で .jp ドメインの移管ロックが有効になってし まっている場合が時にはある - 有効と表示されていても移管ロックは無効 - 有効と表示されてしまっているものがあればサポートへ まとめ

Slide 36

Slide 36 text

そんなことあるんだ……

Slide 37

Slide 37 text

Terraform で管理していた ACM の DNS 検証 用の CNAME レコードの Terraform State が ある日突然ぶっ壊れた話

Slide 38

Slide 38 text

- AWS Certificate Manager(ACM) で SSL/TLS 証明書を発行していた - ACM のドメイン所有権の検証を CNAME レコード を用いた DNS 検証でやっていた - 永遠に自動更新されて最高に便利 ACM で DNS 検証

Slide 39

Slide 39 text

こういうやつ

Slide 40

Slide 40 text

- AWS Certificate Manager(ACM) で SSL/TLS 証明書を発行していた - ACM のドメイン所有権の検証を CNAME レコード を用いた DNS 検証でやっていた - 永遠に自動更新されて最高に便利 - 証明書、CNAME レコード共に Terraform で管 理して平和に過ごしていた…… ACM で DNS 検証

Slide 41

Slide 41 text

- これを以下のような構成で用いていた - awswakaran.com - *.awswakaran.com ACM で DNS 検証

Slide 42

Slide 42 text

それは2019年5月15日に突然起こった…

Slide 43

Slide 43 text

!!!Terraform の運用完全停止!!!

Slide 44

Slide 44 text

- IAM User を追加する素朴な変更を Terraform に加えようとし た - 突然「ACM の DNS 検証用に作っていた CNAME レコード に差分あるから変更するよ!!」って Terraform が言い 始めた - 想定外の差分が発生し、一旦 Terraform の操作を禁止 なにがおこった

Slide 45

Slide 45 text

ヒリつき始める現場……

Slide 46

Slide 46 text

とはいえ Terraform の変更を反映 (`terraform apply`)しなければ問題にはな らない

Slide 47

Slide 47 text

- ACM の DNS 検証に作っていた CNAME レコードの順番が突 然変わってしまった - 順番はランダムなので、Terraform を実行するたびに実行 結果が変わる - Route53 Record のリソース変更は Destroy & Create (一度削除した後に作り直す) - → つまり Terraform がリソースを破壊して作り直した り、そうじゃなかったりというガチャが発生 - それも us-east-1 リージョン限定で 状況整理

Slide 48

Slide 48 text

- とにもかくにも aws-cli で API を叩いてみるしか無い…… - 色々調べた結果、ACM の `describe-certificate` って API が返す値の、 `DomainValidationOptions` ってアトリ ビュートの配列の中身が、ある日を境に順不同になるよう になっていた 原因調査

Slide 49

Slide 49 text

1回め 2回め 原因調査

Slide 50

Slide 50 text

1回め 2回め 原因調査

Slide 51

Slide 51 text

1回め 2回め 原因調査

Slide 52

Slide 52 text

TODO: 君の名は

Slide 53

Slide 53 text

ひとまず何が起こっているかは理解した ……が、依然として対策は無い……

Slide 54

Slide 54 text

- terraform-provider-aws 上に Issue は存在しているが、あま り議論は活発ではなく……

Slide 55

Slide 55 text

何も出来ないまま翌朝を迎える……

Slide 56

Slide 56 text

おや……

Slide 57

Slide 57 text

ap-northeast-1 でも同様の現象が発生してい るな……?

Slide 58

Slide 58 text

ざわつき始める Issue…

Slide 59

Slide 59 text

- AWS 側で何かが変更されて、明らかに挙動が変わっている - us-east-1 で起こった現象が翌日に ap-northeast-1 でも 発生している - Issue を見るに、ヨーロッパリージョンでも発生 - どう見ても北バージニアで実験→全世界本番リリースが行 われているな??? そろそろ抱いてきた確信

Slide 60

Slide 60 text

そして2週間が経ち……

Slide 61

Slide 61 text

焦れる人々の声…… おそらくここにいた人達は、 関連する Terraform リポジトリ の運用が停止してたのでは。 自分の場合はモノリシック リポジトリで運用してたので 完全停止してしまった。

Slide 62

Slide 62 text

そして5月30日……

Slide 63

Slide 63 text

解消

Slide 64

Slide 64 text

これで15日ぶりにようやく `terraform apply` が出来る(≒安心してインフラに変 更を加えられる)ぞ!!!

Slide 65

Slide 65 text

やったね

Slide 66

Slide 66 text

とはいえ……

Slide 67

Slide 67 text

ACM の API がいつまでも順序保証をしてく れるとは限らない……

Slide 68

Slide 68 text

Terraform 側でソートを挟む PR は(一旦問題 が解消したという理由で)未だ merge されず ……(2019/07/22時点) https://github.com/terraform-providers/terraform-provider-aws/pull/8708

Slide 69

Slide 69 text

頑張れ Terraform!! (正確には terraform-provider-aws)

Slide 70

Slide 70 text

- ACM のとある API の返り値の順番が変更された - はじめは北バージニア、そして全世界へとデプロイされて いった - 全世界の Terraformer たちが騒いだ結果、AWS 側で暫 定的に修正が行われた - Terraform 側でソートを噛ませる実装は未だに merge さ れず…… - これのせいでお互いに二の足を踏んだ感がある - 寛大な措置をありがとう AWS まとめ

Slide 71

Slide 71 text

そんなことあるんだ……(2)

Slide 72

Slide 72 text

- AWS には細かい挙動のアレコレがいっぱいあって「そうなんだ」ってなる - AWS のドキュメントは間違っている事もあるし、ドキュメントに書かれていない挙動 もたくさんあって「そんなことあるんだ」ってなる - 「そんなことあるんだ」が増えてくると、AWS の細かい気持ちがわかってくる - みんなでどんどん「そんなことあるんだ」を集めていきましょう まとめ

Slide 73

Slide 73 text

おわり