エラー内容
AWSのリソースをCDK経由で生成しようとしたが、デフォルトVPC情報を取得しようとして下記のコードを書いたがエラーが発生した。(使用言語はTypeScript)
lib/cdk-stack.ts
export class CdkStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const vpc = ec2.Vpc.fromLookup(this, 'VPC', {isDefault: true}); // ここでエラーが出る
....
発生したエラー
cdk deploy
.../node_modules/aws-cdk-lib/core/lib/context-provider.ts:91
throw new Error(`Cannot retrieve value from context provider ${options.provider} since account/region ` +
^
Error: Cannot retrieve value from context provider vpc-provider
since account/region are not specified at the stack level.
Configure "env" with an account and region when you define your stack.
See https://docs.aws.amazon.com/cdk/latest/guide/environments.html for more details.
エラー内容(日本語)
エラー: スタックレベルでaccount/regionが指定されていないためコンテキストプロバイダvpc-providerから値を取得できません。スタックを定義するときにaccountとregionを含めたenvを指定してください。この件についての詳細情報はhttps://docs.aws.amazon.com/cdk/latest/guide/environments.htmlにもあります。
原因
-
Vpc.fromLookup
はルックアップを行うときにリージョンの指定が必要となる。 -
リージョンの指定は
CdkStack.constructor()
の第三引数にあるpropsのprops.env.region
から指定できる。 -
だが、
props.env
を指定していなかった。CdkStack
はbin/cdk.ts
でnewされているので、ここで指定できる。
対応
今回はbin/cdk.tsに対して、下記の対応を行った。
CdkStackの第三引数にenvを指定している。
bin/cdk.ts
new CdkStack(app, 'CdkStack', {
env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },
});
上記の例だと環境変数から値を取得しているが、以下のように固定の値を指定しても良い。
env: {account: '123456789012', region: 'ap-northeast-1'},
こちらもおススメ
One thought on “[CDK] Vpc.fromLookup()でエラー 「Cannot retrieve value from context provider vpc-provider since account/region are not specified at the stack level」が出る”