概要
AWS CDK を使ってパラメータストアに保存した値を取得しようとしたらエラーが発生した。
Error: Cannot retrieve value from context provider ssm since account/region are not specified at the stack level.
ググってみると、GitHub の Issue#3130がヒットした。
日本語の記事がなかったので備忘がてら記事に残す。
サンプルソース
問題のソースと発生したエラー
パラメータストアに保存しているバケット名を取り出し、S3 バケットを作成してみる。
/lib/aws-cdk-ssm-sample-stack.ts
import cdk = require('@aws-cdk/core');
import ssm = require('@aws-cdk/aws-ssm');
import s3 = require("@aws-cdk/aws-s3");
export class AwsCdkSsmSampleStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// パラメータストアに保存しているバケット名を取り出したい
const BUCKET_NAME = ssm.StringParameter.valueFromLookup(this, 'BUCKET_NAME');
new s3.Bucket(this, BUCKET_NAME);
}
}
/bin/aws-cdk-ssm-sample.ts
#!/usr/bin/env node
import 'source-map-support/register';
import cdk = require('@aws-cdk/core');
import { AwsCdkSsmSampleStack } from '../lib/aws-cdk-ssm-sample-stack';
const app = new cdk.App();
new AwsCdkSsmSampleStack(app, 'AwsCdkSsmSampleStack');
$ cdk diff
を叩くと以下のエラーが発生する
Error: Cannot retrieve value from context provider ssm since account/region are not specified at the stack level.
Either configure "env" with explicit account and region when you define your stack, or use the environment variables "CDK_DEFAULT_ACCOUNT" and "CDK_DEFAULT_REGION" to inherit environment information from the CLI (not recommended for production stacks)
(以下略)
どうやらスタックは、アカウントやリージョンの情報をデフォルトでは持っていないらしい。
解決策 cdk.StackPropsのenvプロパティで設定する
公式ドキュメントを見ると、スタックの第 3 引数にプロパティを渡せば良さそう。
https://docs.aws.amazon.com/ja_jp/cdk/latest/guide/environments.html
/bin/aws-cdk-ssm-sample.ts
#!/usr/bin/env node
import 'source-map-support/register';
import cdk = require('@aws-cdk/core');
import { AwsCdkSsmSampleStack } from '../lib/aws-cdk-ssm-sample-stack';
const app = new cdk.App();
// 第3引数にリージョン・アカウントを渡す
new AwsCdkSsmSampleStack(app, 'AwsCdkSsmSampleStack', {
env: {
region: 'ap-northeast-1',
account: '<ACCOUNT ID>',
}
});
修正したので、以下のコマンドでデプロイしてみる。
$ tcs
$ cdk diff
$ cdk deploy
結果
$ tcs
$ cdk diff
Stack AwsCdkSsmSampleStack
Resources
[+] AWS::S3::Bucket aws-cdk-ssm-sample-bucket awscdkssmsamplebucket4******
$ cdk deploy
AwsCdkSsmSampleStack: deploying...
AwsCdkSsmSampleStack: creating CloudFormation changeset...
0/3 | 9:53:48 PM | CREATE_IN_PROGRESS | AWS::CloudFormation::Stack | AwsCdkSsmSampleStack User Initiated
0/3 | 9:53:52 PM | CREATE_IN_PROGRESS | AWS::S3::Bucket | aws-cdk-ssm-sample-bucket (awscdkssmsamplebucket4******)
0/3 | 9:53:52 PM | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata
0/3 | 9:53:53 PM | CREATE_IN_PROGRESS | AWS::S3::Bucket | aws-cdk-ssm-sample-bucket (awscdkssmsamplebucket4******) Resource creation Initiated
0/3 | 9:53:53 PM | CREATE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata Resource creation Initiated
1/3 | 9:53:53 PM | CREATE_COMPLETE | AWS::CDK::Metadata | CDKMetadata
2/3 | 9:54:14 PM | CREATE_COMPLETE | AWS::S3::Bucket | aws-cdk-ssm-sample-bucket (awscdkssmsamplebucket4******)
3/3 | 9:54:15 PM | CREATE_COMPLETE | AWS::CloudFormation::Stack | AwsCdkSsmSampleStack
✅ AwsCdkSsmSampleStack
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:***********:stack/AwsCdkSsmSampleStack/d0db***********************
お、できてるb