スタックは次の通りです。
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.
aws_cdk.pipelines を利用した別スタックで、
PipelineStack
を利用しているので私が記述した内容に間違えはありません。Pipeline の deploy ステージでExistsVpcDeploy
を実行しています。ec2.Vpc.from_lookup() で既存の VPC を呼び出したいため、is_default=False を利用するのは違うようです。実際に is_default=False を入れても同じエラーです。
申し訳ございませんが、提供された情報に基づいて最善を尽くしてお手伝いしております。また、問題に対するさらなるコンテキストを提供いただき、ありがとうございます。
現在の状況では、環境を設定するためのコードは問題なさそうです。"ExistsVpcDeploy" を作成するコードスニペットを共有いただけますか?これにより、問題をさらに理解するのに役立つかと思います。
さらに、以下の点をチェックしてみてもいいかもしれません:
すべてのスタックに "env" があるか確認してください。これは、直接propsとして渡すか、親から継承することができます。
参考: https://github.com/aws/aws-cdk/issues/3130