やりたいこと
AWS SDK と AWS CDKで profile
を指定して実行したい。
結論
cdk
コマンドの前に、AWS_PROFILE
でprofile
名を指定すれば、AWS SDK と AWS CDKに、同様のprofile
が入りました。
AWS_PROFILE=hogefuga cdk subcommand
cdkコマンドでprofile
指定できるけど・・・sdkには渡らない
cdk subcommand --profile hoge
cdk
コマンドのオプションで、--profile
指定できますが、
上記コマンドでは、cdk
にprofile
が渡り、sdk
にはprofile
が渡っておらず、sdk
ではdefault
のprofile
が使われることになります。
cdk
のコード内で指定したはずのprofile
を取得できる術が今の所なさそうです。
環境
typescript: 4.9.4
aws-cdk: 2.56.0
aws-cdk-lib: 2.56.0
参考
ちなみに
cdk内でsdkを実行するときには自分は下記のように、即時関数でラップしました。
bin/cdk.ts
#!/usr/bin/env node
import { App } from 'aws-cdk-lib';
import 'source-map-support/register';
import { SdkStack } from '../lib/sdk-stack';
import { getSnapshot } from '../sdk/get-snapshot';
const account = process.env.CDK_DEFAULT_ACCOUNT ?? '';
const region = process.env.CDK_DEFAULT_REGION ?? '';
const app = new App();
// cdk 実行前に、sdk で取得した値を
(async () => {
const { snapshotId } = await getSnapshot(); // sdkで実装した関数
app.node.setContext('snapshotId', snapshotId); // contextに渡すと、stack内で app.node.tryGetContext("snapshotId") で取得可能になる(このままだと型anyだけど)
new SdkStack(app, "SdkStack", {
env: { account, region },
});
})();