搭建适用于生产环境的Terraform运维环境
简要概述
由于在业务中有机会使用AWS和Terraform,
因此总结了在使用过程中获得的运维经验。
另外,在第2章及以后介绍的Terraform运维方法是个人的最终目标,
并不代表Terraform的最佳实践,只能作为参考。
(例如故意没有使用terraform workspace等)
本文涵盖的环境列表
-
- 開発環境 (ローカルPC)
-
- ステージング環境 (ステージング環境用AWSアカウント)
- 本番環境 (本番環境用AWSアカウント)
执行环境
-
- Linux
Debian [v10.8]
Windows
WSL の Ubuntu [v20.04]
WSLの構築については以下を参照
0. 创建AWS账户 AWS
请参考以下内容,在AWS上创建用于临时环境和生产环境的账户,并为Terraform管理的资源授予相应权限,然后分别获取IAM用户的凭据信息。
- 初めてアカウントを作る場合
- AWSアカウントの初期設定について
- IAMユーザ作成について
- マルチアカウント管理について
1. 设立环境
ⅰ. 安装AWS CLI
参照 公式指南,顺序执行以下命令。
①. 下载AWS CLI安装文件
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o ~/awscliv2.zip
2. 安装文件解压缩
unzip ~/awscliv2.zip
③. 安装 AWS CLI。
sudo ~/aws/install
将为AWS CLI保存的设置信息保存到分段环境
aws configure --profile ******(アプリ名など)-stage
-
- 上記コマンド実行後、以下の質問に答える。
AWS Access Key ID [None]:
-> ステージング環境用IAMユーザのクレデンシャル情報(Access Key ID)を入力
AWS Secret Access Key [None]:
-> ステージング環境用IAMユーザのクレデンシャル情報(Secret Access Key)を入力
Default region name [None]:
-> ap-northeast-1
Default output format [None]:
-> json
将生产环境的配置信息保存到AWS CLI。
aws configure --profile ******(アプリ名など)-prod
-
- 上記コマンド実行後、④と同じ質問に
- 本番環境用IAMユーザのクレデンシャル情報で答える。
ⅱ. 安装会话管理插件
①. 下载包
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
②. 安装会话管理器插件
sudo dpkg -i session-manager-plugin.deb
确认会话管理插件。
session-manager-plugin
ⅲ. 安装 Terraform
①. 仓库克隆
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
将路径添加到仓库
cat << 'EOS' >> ~/.bashrc
export PATH="$PATH:$HOME/.tfenv/bin"
EOS
source ~/.bashrc
③. 安装tfenv
tfenv install
④. 启用命令的标签存储。
terraform -install-autocomplete
ⅳ. 安装 git-secrets
①. 克隆存储库
git clone https://github.com/awslabs/git-secrets.git ~/.git-secrets
2. 安装 git-secrets
cd ~/.git-secrets/ && sudo make install
③. 将 git-secrets 配置为适用于AWS。
git secrets --register-aws --global
④. Git的自定义
git secrets --install ~/.git-templates/git-secrets
git config --global init.templatedir '~/.git-templates/git-secrets'
2. 创建Terraform仓库 (CJIAAN)
在master分支上,创建Terraform仓库。
创建完成后,要创建用于资源构建管理的分支,例如v1.0.0/stage和v1.0.0/prod。
以后,主分支将用于管理与整体相关的更改。
下面是我创建的Terraform仓库的目录结构示例,用于将Laravel应用部署到AWS Fargate。
.
├── README.md
├── .terraform-version --> Terraform実行時のバージョン指定
├── set_aws_profile.sh --> terraformコマンドを使用する事前準備
├── modules --> Terraformで繰り返し使うモジュール
│ ├── alb_target_group
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── ecs_service
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── host_client_security_group
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── iam_role
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── route53_domain
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── s3_log_bucket
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ └── security_group
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── operation --> アプリメンテ用リソース群
│ ├── .gitignore
│ ├── main.tf
│ ├── operation_setup.sh
│ ├── outputs.tf
│ ├── prod.tfbackend
│ ├── prod.tfvars
│ └── variables.tf
├── step0.sh --> 初期構築リソース群
├── step1 --> 第一段階構築リソース群
│ ├── .gitignore
│ ├── ecr_repository.tf
│ ├── lambda_iam_role.tf
│ ├── main.tf
│ ├── outputs.tf
│ ├── prod.tfbackend
│ ├── prod.tfvars
│ ├── rds_db.tf
│ ├── s3_buckets.tf
│ ├── ssm_parameters.tf
│ ├── ssm_parameters_setup.sh --> センシティブな値を手動更新
│ ├── variables.tf
│ └── vpc_endpoint.tf
├── step2 --> 第二段階構築リソース群
│ ├── .gitignore
│ ├── ******(アプリ名など)_container.json
│ ├── ******(アプリ名など)_container_admin.json
│ ├── ******(アプリ名など)_container_camera.json
│ ├── main.tf
│ ├── outputs.tf
│ ├── prod.tfbackend
│ ├── prod.tfvars
│ └── variables.tf
├── git_cherry-pick_from_master.sh --> masterブランチから各ブランチへのcherry-pick
├── terraform_apply.sh --> [terraform apply] コマンド実行用
└── terraform_destroy.sh --> [terraform destroy] コマンド実行用
在上述的目录结构中介绍与运营相关的内容。
ⅰ. .terraform版本
1.0.0
说明:用于在此存储库中执行terraform命令的Terraform版本指定文件。
ⅱ. 设置_aws_配置文件.sh
set -eu
echo 'デプロイ先:ステージング環境 or 本番環境を入力してください。'
read -p 'ex) stage/prod:' ENV
# ステージング環境 or 本番環境のプロファイルを設定
if [ ${ENV} = 'stage' ]; then
export PS1="\[\e[1;36m\][fw-${ENV}]\[\e[0;39m\]${PS1}"
export AWS_PROFILE=******(アプリ名など)-${ENV}
elif [ ${ENV} = 'prod' ]; then
export PS1="\[\e[1;31m\][%%% fw-${ENV} %%%]\[\e[0;39m\]${PS1}"
export AWS_PROFILE=******(アプリ名など)-${ENV}
else
echo '[stage] or [prod] のどちらかを入力してください。'
fi
set +eu
说明:用于在执行terraform命令时设置AWS凭证信息的sh文件。
ⅲ. 步骤0.sh
set -eu
create_bucket () {
# step1のTerraform状態管理S3バケット作成
echo 'step1のTerraform状態管理S3バケット作成中...'
aws s3api create-bucket --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --create-bucket-configuration LocationConstraint=ap-northeast-1
aws s3api put-bucket-versioning --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --versioning-configuration Status=Enabled
aws s3api put-bucket-encryption --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
aws s3api put-public-access-block --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --public-access-block-configuration '{"BlockPublicAcls": true, "IgnorePublicAcls": true, "BlockPublicPolicy": true, "RestrictPublicBuckets": true}'
# operationのTerraform状態管理S3バケット作成
echo 'operationのTerraform状態管理S3バケット作成中...'
aws s3api create-bucket --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --create-bucket-configuration LocationConstraint=ap-northeast-1
aws s3api put-bucket-versioning --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --versioning-configuration Status=Enabled
aws s3api put-bucket-encryption --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
aws s3api put-public-access-block --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --public-access-block-configuration '{"BlockPublicAcls": true, "IgnorePublicAcls": true, "BlockPublicPolicy": true, "RestrictPublicBuckets": true}'
# step2のTerraform状態管理S3バケット作成
echo 'step2のTerraform状態管理S3バケット作成中...'
aws s3api create-bucket --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --create-bucket-configuration LocationConstraint=ap-northeast-1
aws s3api put-bucket-versioning --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --versioning-configuration Status=Enabled
aws s3api put-bucket-encryption --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
aws s3api put-public-access-block --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --public-access-block-configuration '{"BlockPublicAcls": true, "IgnorePublicAcls": true, "BlockPublicPolicy": true, "RestrictPublicBuckets": true}'
}
# ステージング環境 or 本番環境でS3バケットの名前を切り替える
if [ ${AWS_PROFILE} = '******(アプリ名など)-stage' ]; then
export S3_BUCKET_ENV=stage
create_bucket
echo '----- 全S3バケット作成完了 -----'
elif [ ${AWS_PROFILE} = '******(アプリ名など)-prod' ]; then
export S3_BUCKET_ENV=prod
create_bucket
echo '----- 全S3バケット作成完了 -----'
else
echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
fi
set +eu
说明:创建用于存储Terraform状态管理文件的S3存储桶的sh脚本。
ⅳ. 从主分支中挑选进行git cherry-pick的脚本
#!/bin/bash
set -eu
echo 'masterブランチでコミットをしていますか?'
read -p 'ex) y/n:' YN
# masterブランチでコミットをしているかを確認
if [ ${YN} = 'y' ]; then
:
elif [ ${YN} = 'n' ]; then
echo 'masterブランチでコミットをしてください。'
exit 1
else
echo '[y] or [n] のどちらかを入力してください。'
exit 1
fi
# masterから、[v1.0.0/stage, v1.0.0/prod]それぞれへ、HEAD_commitをcherry-pick
git checkout master
GIT_MASTER_HEAD_COMMIT_HASH=`git rev-parse HEAD`
git checkout v1.0.0/stage
git cherry-pick ${GIT_MASTER_HEAD_COMMIT_HASH}
git checkout v1.0.0/prod
git cherry-pick ${GIT_MASTER_HEAD_COMMIT_HASH}
git checkout master
说明:用shell将master分支的HEAD_commit选择性地复制到stage和prod分支上。
ⅴ. 田野塑造应用.sh
#!/bin/bash
set -eu
# ステージング環境 and 本番環境でTerraform applyコマンドの定義
terraform_apply_stage () {
cd ./${DEPLOY}
terraform fmt
terraform init -reconfigure
terraform apply
cd -
}
terraform_apply_prod () {
cd ./${DEPLOY}
terraform fmt
terraform init -reconfigure -backend-config=prod.tfbackend
terraform apply -var-file=prod.tfvars
cd -
}
# [source set_aws_profile.sh] を実行し、デプロイ先を指定しているか確認
if [ ${AWS_PROFILE} = '******(アプリ名など)-stage' -o ${AWS_PROFILE} = '******(アプリ名など)-prod' ]; then
:
else
echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
exit 1
fi
echo 'デプロイ先:ステージング環境 or 本番環境を入力してください。'
read -p 'ex) stage/prod:' ENV
# ステージング環境 or 本番環境でTerraform applyコマンドを切り替える
if [ ${ENV} = 'stage' ]; then
git checkout v1.0.0/${ENV}
echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
read -p 'ex) step1/operation/step2:' DEPLOY
# step1 をデプロイ
if [ ${DEPLOY} = 'step1' ]; then
terraform_apply_stage
# operation をデプロイ
elif [ ${DEPLOY} = 'operation' ]; then
terraform_apply_stage
# step2 をデプロイ
elif [ ${DEPLOY} = 'step2' ]; then
terraform_apply_stage
else
echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
fi
elif [ ${ENV} = 'prod' ]; then
git checkout v1.0.0/${ENV}
echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
read -p 'ex) step1/operation/step2:' DEPLOY
# step1 をデプロイ
if [ ${DEPLOY} = 'step1' ]; then
terraform_apply_prod
# operation をデプロイ
elif [ ${DEPLOY} = 'operation' ]; then
terraform_apply_prod
# step2 をデプロイ
elif [ ${DEPLOY} = 'step2' ]; then
terraform_apply_prod
else
echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
fi
else
echo '[stage] or [prod] のどちらかを入力してください。'
fi
说明:[terraform apply] 命令是用于在不同的分期环境和生产环境中进行区分使用的sh。
ⅵ. 有形地毁灭脚本
#!/bin/bash
set -eu
# ステージング環境 and 本番環境でTerraform destroyコマンドの定義
terraform_destroy_stage () {
cd ./${DEPLOY}
terraform fmt
terraform init -reconfigure
terraform destroy
cd -
}
terraform_destroy_prod () {
cd ./${DEPLOY}
terraform fmt
terraform init -reconfigure -backend-config=prod.tfbackend
terraform destroy -var-file=prod.tfvars
cd -
}
# [source set_aws_profile.sh] を実行し、デプロイ先を指定しているか確認
if [ ${AWS_PROFILE} = '******(アプリ名など)-stage' -o ${AWS_PROFILE} = '******(アプリ名など)-prod' ]; then
:
else
echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
exit 1
fi
echo 'デプロイ先:ステージング環境 or 本番環境を入力してください。'
read -p 'ex) stage/prod:' ENV
# ステージング環境 or 本番環境でTerraform destroyコマンドを切り替える
if [ ${ENV} = 'stage' ]; then
git checkout v1.0.0/${ENV}
echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
read -p 'ex) step1/operation/step2:' DEPLOY
# step1 をデプロイ
if [ ${DEPLOY} = 'step1' ]; then
terraform_destroy_stage
# operation をデプロイ
elif [ ${DEPLOY} = 'operation' ]; then
terraform_destroy_stage
# step2 をデプロイ
elif [ ${DEPLOY} = 'step2' ]; then
terraform_destroy_stage
else
echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
fi
elif [ ${ENV} = 'prod' ]; then
git checkout v1.0.0/${ENV}
echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
read -p 'ex) step1/operation/step2:' DEPLOY
# step1 をデプロイ
if [ ${DEPLOY} = 'step1' ]; then
terraform_destroy_prod
# operation をデプロイ
elif [ ${DEPLOY} = 'operation' ]; then
terraform_destroy_prod
# step2 をデプロイ
elif [ ${DEPLOY} = 'step2' ]; then
terraform_destroy_prod
else
echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
fi
else
echo '[stage] or [prod] のどちらかを入力してください。'
fi
说明:在分别使用staging环境和production环境中执行[terraform destroy]命令的用途的shell脚本。
ⅶ. ssm_parameters_setup.sh:
SSM参数设置脚本。
#!/bin/bash
set -eu
echo 'LaravelのAPP_KEYを入力してください。'
read -p 'APP_KEY:' APP_KEY
echo 'RDSのDBマスターパスワードを入力してください。'
read -p 'DB_PASSWORD:' DB_PASSWORD
# AWSリソースに適用
aws ssm put-parameter --name '/******(アプリ名など)/app/key' --type SecureString --value "${APP_KEY}" --overwrite
aws ssm put-parameter --name '/******(アプリ名など)/db/password' --type SecureString --value "${DB_PASSWORD}" --overwrite
aws rds modify-db-instance --db-instance-identifier '******(アプリ名など)' --master-user-password "${DB_PASSWORD}"
说明:用于手动更新资源上的敏感值的sh脚本。
构建资源组的prod.tfbackend。
bucket = "******(アプリ名など)-prod-tfstate-step1"
说明:用于引用生产环境Terraform状态管理S3存储桶的文件。
ⅸ. 建立prod.tfvars的资源组
s3_bucket_env = "prod"
s3_force_destroy = false
alb_enable_deletion_protection = true
db_name = "******(アプリ名など)Prod"
db_multi_az = true
db_deletion_protection = true
db_skip_final_snapshot = false
domain_name = "<test_domain_prod>"
domain_name_camera = "<test_domain_prod_camera>"
domain_name_admin = "<test_domain_prod_admin>"
ecr_mutability = "IMMUTABLE"
说明:用于搭建生产环境资源的参数文件。
ⅹ. 构建资源组的.gitignore
# ディレクトリ
/.terraform/
# ファイル
.terraform.lock.hcl
.terraform.tfstate.lock.info
terraform.tfstate
terraform.tfstate.backup
解释:为了防止terraform执行命令时自动创建的文件被包含在远程存储库中,请使用以下文件。
3. 关于运营操作的应用
以下是我为了将Laravel应用程序部署到AWS Fargate而创建的Terraform运维操作的介绍。为了简化操作步骤并最大程度地防止人为错误,这个配置变得有些笨拙的负责人是脚本。 (总有一天我想自己创建一个命令行工具)
开始构建AWS资源之前
-
- 本リポジトリ直下で source set_aws_profile.sh を実行し
-
- これからデプロイする環境を指定する。
AWSリソースの構築状態を管理するために必要なS3バケットを作成しておく。
(上記S3バケットの構築は、本リポジトリ直下へ移動し、source step0.sh )
テストドメインとして無料独自ドメインを取得しておく。(https://my.freenom.com/clientarea.php)
以下コード内のパラメータを確認する。
/step1/variables.tf のテストドメイン3種
(同ディレクトリ内の prod.tfvars も要変更)
/step2/prod.tfvars の ecs_docker_image_tag
ⅱ. AWS资源构建步骤
请注意,在执行以下命令之后,不要使用 [Ctrl + c] 强制终止。
Paraphrase: 本仓库下
bash terraform_apply.sh
②. AWS资源构建:步骤1
确认构建资源列表,是的。
④. 测试域名的名称服务器设置
当以下的输出被重复时,请进行设置。
module.route53_domain.aws_acm_certificate_validation.default: Still creating... [2m30s elapsed]
顺便提一下,要确认测试域名的NameServer设置是否正确,可以使用以下dig命令进行验证:
dig +trace 或者
dig @8.8.8.8 NS。
(验证SSL证书可能需要5至100分钟的时间。)
⑤. 通过以下命令,更改Laravel的APP_KEY值和RDS的DB主密码。
bash ./step1/ssm_parameters_setup.sh
将Docker镜像推送到ECR的私有存储库。
根据上述的1至3个步骤,进行AWS资源的构建操作。
8. 通过以下命令访问操作服务器的shell
aws ssm start-session --target <operation_instance_id>
在访问Shell后,执行以下步骤。
-
- sudo su –
-
- 执行docker_run.sh
-
- 执行php artisan migrate
-
- 执行php artisan db:seed –class=<使用的数据填充器>
按Ctrl + D键两次,退出登录。
在上述的1至3步骤中,AWS资源建立:第二步。
ⅲ. 测试域名变更步骤
-
- 将CNAME记录添加到目标DNS服务中,添加的数量取决于要迁移的测试域名数量。(例如:domain CNAME ALBhost)
-
- 使用dig命令确认设置是否生效。
-
- 分别更改ALB的HTTPS监听规则的主机条件。
-
- 在东京地区(ap-northeast-1)发行SSL通配符证书。
-
- 将生成的CNAME记录添加到目标DNS服务中,这是在发行SSL证书时生成的。
- 在SSL证书验证完成后,更改ALB的HTTPS监听规则的默认SSL证书。
测试域名更改后,需要将标注为“※コメントアウト対象”的代码注释掉,然后执行 bash terraform_apply.sh(step1)。
ⅳ. AWS资源销毁步骤
-
- 在运行terraform_destroy.sh之前,先销毁与Lambda相关的资源。
运行terraform_destroy.sh -> 步骤2
运行terraform_destroy.sh -> 操作
运行terraform_destroy.sh -> 步骤1
ⅴ. 关于生产环境
以下是与 Staging 环境不同的几点:
-
- S3バケットの名前
-
- S3バケットの強制削除無効化
-
- ALBの削除保護有効化
-
- 本番環境用のDBインスタンスのDB名を使用
-
- DBインスタンスのマルチAZ有効化
-
- DBインスタンスの削除保護有効化
-
- DBインスタンスのスナップショットスキップ無効化
-
- 本番環境用のテストドメインを使用
-
- ECRリポジトリのタグのイミュータビリティ有効化
-
- 本番環境用のECSタスク定義で使用するDockerイメージタグ
-
- ECSタスクで確保するvCPU、メモリ容量UP
-
- ECSタスクの実行維持数が1→2
- ECSタスクの実行維持数の変化に伴う、ECSサービスの最小/最大ヘルス率の調整
ⅵ. 关于部署单位
作为规范,将AWS资源的部署单位分为以下几个部分。
step1 –> 各Appサーバの稼働に必要なベースとなるリソースを担当
VPC
ALB
Route 53 (テストドメイン用)
RDS
S3
パラメータストア
VPC Endpoint
operation –> AppサーバやDBのメンテナンスをするためのリソースを担当
オペレーションサーバ (EC2)
オペレーションログ
セッションマネージャ
(上記リソースに必要な) VPC Endpoint
step2 –> 各Appサーバのリソースを担当
Appサーバ (Fargate)
Cameraサーバ (Fargate)
Adminサーバ (Fargate)
ⅶ. 注意事项
-
- DBのメンテナンスなどが終了し、オペレーションサーバが必要無くなったら
-
- bash terraform_destroy.sh -> operation
-
- (本番環境の場合、ログ用S3バケットが削除できないエラーが出力されるが、無視でOK)
-
- 現在のAWSリソース構築状況を確認したい場合は
-
- 確認したいディレクトリ直下で terraform show
コード編集後は、(編集したファイルのカレントディレクトリで)
terraform fmt でコードフォーマット。
(エディタのプラグインで、ファイル保存時に自動フォーマットする設定を導入するのがベスト)
AWSの各種リソースは、以下のS3バケットの terraform.tfstate で
それぞれ状態管理されている。
これらのバケットはバージョニング、暗号化、ブロックパブリックアクセスが設定されている。
******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1
******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation
******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2
Fargateの各コンテナへ以下コマンドでアクセスが可能。
aws ecs execute-command --cluster ******(アプリ名など) --task <タスクNo> --container <コンテナ名> --interactive --command "/bin/bash"
参考者
-
- Terraform by HashiCorp
-
- 実践Terraform AWSにおけるシステム設計とベストプラクティス
-
- Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる
- git-secretsはじめました