Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@mira_cocoa

AWS CDKでVPC作ろうとしたら作れなかったとき

More than 1 year has passed since last update.

CloudFormationからAWS CDKに乗り換えようとして今日も元気にビルドを失敗したので解決方法をメモっておく。

やりたいこと

私はただAWSのサンプルをビルドしたかっただけなんだ…!!
https://github.com/aws-samples/aws-cdk-examples/tree/master/python/ecs/fargate-load-balanced-service

無慈悲なCREATE_FAILED

CloudFormationと違って抽象化が激しいので、一行でVPCを作れるんですよ。
その代わり中身を全く知らない。

VPCができる魔法の素晴らしいコード
vpc = ec2.Vpc(
  self, "MyVpc",
  max_azs=2
)
無慈悲に幻想を打ち砕くCREATE_FAILED
$ cdk deploy
  ~略~
Do you wish to deploy these changes (y/n)? y
  ~略~
  9/36 | 7:11:35 AM | CREATE_COMPLETE      | AWS::EC2::VPC                             | MyVpc (MyVpcF9F0CA6F) 
  ~略~
 10/36 | 7:11:38 AM | CREATE_FAILED        | AWS::EC2::Subnet                          | MyVpc/PublicSubnet1/Subnet (MyVpcPublicSubnet1SubnetF123456) Value (ap-northeast-1a) for parameter availabilityZone is invalid. Subnets can currently only be created in the following availability zones: ap-northeast-1d, ap-northeast-1c, ap-northeast-1b. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx)
彼が私に伝えたかったこと
Subnets can currently only be created in the following availability zones: 
ap-northeast-1d, ap-northeast-1c, ap-northeast-1b.

はい。Subnetを作る時にアベイラビリティーゾーンに振り回されるのはCloudFormationの頃から慣れてます。慣れてるなりにさっさと解決したいのにどうすればいいのか分からず途方に暮れる。
ap-northeast-1aに作ろうとして怒られたんだろうなという事くらいは分かる。逆に言うとなんでそこに作ろうとしたのかまったく知らないんですよこっちは。

解決方法

cdk.context.json っていうファイルにavailability-zonesの指定があるので、ap-northeast-1aがあったら消す。
指定がなかったら下記の内容を追記する。

cdk.out/cdk.context.json
  "availability-zones:account=123456789999:region=ap-northeast-1": [
    "ap-northeast-1b",
    "ap-northeast-1c",
    "ap-northeast-1d"
  ]

おわり

3時間くらい悩んだ…。つらかった……。
まだまだCDKと仲良くなれない。

ところでgitignoreを見るとcdk.context.jsonがignoreされてるっぽいのですが、この設定って本当はどこに書いておくものなのかご存知の賢者様がいらっしゃれば教えていただけると嬉しいです。

~追記~
コマンドで設定したりcdk.jsonに書いたりソースコード内で指定したりしなさいって書いてありました^q^

  • Through the --context option to the cdk command.
  • In the context key of the project's cdk.json file.
  • In the context key of a ~/cdk.json file.
  • In code using the construct.node.setContext method.

https://docs.aws.amazon.com/cdk/latest/guide/context.html

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
mira_cocoa
PHPで生ぬるく生きてきたけど最近PythonとかAWSと懇意にしているIT屋。CloudFormation芸人。最近AWS CDKに手を染めた。家から出たくない会社員。全てが永遠の初心者。光の戦士。満員電車は悪い文明。世界で一番妻が可愛い。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?