ec2.Vpc.from_lookup で account/region が指定されていない対処方法

0

スタックは次の通りです。

import aws_cdk as cdk
import aws_cdk.aws_ec2 as ec2
from constructs import Construct

class ExistsVpcDeploy(cdk.Stack):
    def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)
        
        environment_type = self.node.try_get_context("environmentType")
        environment_context = self.node.try_get_context(environment_type)
        region = environment_context["region"]
        account = self.node.try_get_context("account")

        vpcid = self.node.try_get_context("vpcid")

        vpc = ec2.Vpc.from_lookup(self,"VPC",vpc_id=vpcid)

app.py は次の通りです。

environment = Environment(
     account = account,
     region = region
)

PipelineStack(
    app,
    "test-stack",
    env = environment

ec2.Vpc.from_lookup の箇所で次のエラーになる原因と修正方法がご存じの方がいらっしゃれば教えて下さい。

RuntimeError: 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.

naomaro
質問済み 7ヶ月前439ビュー
1回答
0

こんにちは!

この問題については、次のことを確認できます。

  1. 正しいスタックを呼び出しています: PipelineStack ==> ExistsVpcDeploy
  2. デフォルト VPC をインポートしない場合は、「ec2.Vpc.from_lookup()」関数で「is_default=False」を明示的に設定します。

参照: https://stackoverflow.com/questions/59301265/how-to-import-existing-vpc-in-aws-cdk

これで問題が解決したかどうかお知らせください。

profile picture
回答済み 7ヶ月前
    1. aws_cdk.pipelines を利用した別スタックで、PipelineStackを利用しているので私が記述した内容に間違えはありません。Pipeline の deploy ステージで ExistsVpcDeploy を実行しています。

    2. ec2.Vpc.from_lookup() で既存の VPC を呼び出したいため、is_default=False を利用するのは違うようです。実際に is_default=False を入れても同じエラーです。

  • 申し訳ございませんが、提供された情報に基づいて最善を尽くしてお手伝いしております。また、問題に対するさらなるコンテキストを提供いただき、ありがとうございます。

    現在の状況では、環境を設定するためのコードは問題なさそうです。"ExistsVpcDeploy" を作成するコードスニペットを共有いただけますか?これにより、問題をさらに理解するのに役立つかと思います。

    さらに、以下の点をチェックしてみてもいいかもしれません:

    すべてのスタックに "env" があるか確認してください。これは、直接propsとして渡すか、親から継承することができます。

    参考: https://github.com/aws/aws-cdk/issues/3130

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ