https://awscli.amazonaws.com/AWSCLIV2.pkg
which aws
aws --version
例えば以下のように返ってきます
/usr/local/bin/aws
aws-cli/2.11.21 Python/3.11.3 Darwin/22.3.0 exe/x86_64 prompt/off
npm install -g aws-cdk
cdk --version
例えば以下のように返ってきます
2.80.0 (build bbdb16a)
printenv | grep AWS
aws sts get-caller-identity
cat ~/.aws/config
新しいプロファイルを作成する場合は次のコマンドを実行します
<プロファイル名>のところは IAM ユーザー名にしておくとわかりやすいと思います
aws configure --profile <プロファイル名>
プロファイルを変更するには
export AWS_PROFILE=<プロファイル名>
言語: typescript で initします
mkdir my-first-infra && cd my-first-infra
cdk init --language typescript
cdk ls
lib/my-first-infra-stack.ts
以下の内容に修正します
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyFirstInfraStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// S3 を追加する
const bucket = new s3.Bucket(this, 'CreateBucket', {
bucketName: "test-bucket-2023-05-24",
versioned: true
});
}
}
npm run build
cdk synth
最初に1度必要です(CDKに必要な権限を作成します。)
cdk bootstrap aws://<12桁のアカウント番号>/<リージョン名>
✅ Environment aws://<12桁のアカウント番号>/<リージョン名> bootstrapped.
と出ればokです。
npm run build
cdk deploy
デプロイするには AdministratorAccess が必要ですが、直接 IAMユーザーの権限には持たせないで、assume role できるようにしておくと良いでしょう。手順としては次のとおりです。
・IAM ユーザーを作成する
・ポリシー AdministratorAccess を持つ IAM ロールを作成する
・IAMユーザーに次のようなポリシーを許可する
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:<IAMロールのarnをコピペで貼り付ける>"
}
]
}
AWS CDK でデプロイするときの最小権限について考えてみる | DevelopersIO
aws s3 ls
cdk destroy
削除すると CloudFormation から対象のスタックを削除します。 なお、S3 バケットなどは残ります。
AWS CloudFormationスタック強制削除ツール - 365歩のテック
lib/my-first-infra-stack.ts に removalPolicy: RemovalPolicy.DESTROY
を追加します。
import * as cdk from 'aws-cdk-lib';
import {RemovalPolicy} from 'aws-cdk-lib';
import {Construct} from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyFirstInfraStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// S3 を追加する
new s3.Bucket(this, 'my-second-bucket', {
versioned: true,
removalPolicy: RemovalPolicy.DESTROY,
});
}
}
MySampleTable と MySampleRole を追加します。
import * as cdk from "aws-cdk-lib"
import { RemovalPolicy } from "aws-cdk-lib"
import * as dynamodb from "aws-cdk-lib/aws-dynamodb"
import * as iam from "aws-cdk-lib/aws-iam"
import { Construct } from "constructs"
export class InfrastructureStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props)
// DynamoDB
const table = new dynamodb.Table(this, "MySampleTable", {
partitionKey: { name: "id", type: dynamodb.AttributeType.STRING },
tableName: "my-sample-table",
removalPolicy: RemovalPolicy.DESTROY,
})
// role
const role = new iam.Role(this, "MySampleRole", {
assumedBy: new iam.ServicePrincipal("lambda.amazonaws.com"),
})
role.addToPolicy(
new iam.PolicyStatement({
resources: [table.tableArn],
actions: [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
],
}),
)
}
}