buildspec.ymlでparameter-store利用時に「not a valid identifier」エラーの対処法

buildspec.ymlでparameter-store(パラメータストア)を利用したのですが、うまく値を取得することができませんでした。

CodeBuildのIAMロールには「AmazonSSMReadOnlyAccess」ポリシーは付けていました。

原因としては変数に「-」が入っていたからでした。。

 

具体的には赤枠のパラメータストアから値を取得する変数の「s3-cicd-api」でエラーとなります。

 

CodeBuildのログを参照すると以下のエラーでした。

「s3-cicd-api: not a valid identifier」

対応

「-」などの記号を取る。

今回の場合は「s3-cicd-api」→「s3cicdapi」に変更しました。

secrets-manager(AWS Secrets Manager)もたぶん同じだと思います。

 

今まで何となくymlファイルの変数には記号入れたことなかったなぁ~と。

AWS公式サイト(CodeBuild のビルド仕様に関するリファレンス)には特に記載していなかったです。

常識ってことですかね。。

docs.aws.amazon.com

対応方法:Error: PythonPipBuilder:ResolveDependencies - pip executable not found in your python environment at /usr/bin/python3.9

AWS CodeBuild時に以下のエラーが発生した時の対処方法になります。

「Error: PythonPipBuilder:ResolveDependencies - pip executable not found in your python environment at /usr/bin/python3.9」

原因

以下のビルトイメージを利用したため

aws/codebuild/amazonlinux2-x86_64-standard:5.0

ビルトイメージがPython3.9に対応していない

対応方法

以下のビルトイメージを利用する

aws/codebuild/amazonlinux2-x86_64-standard:4.0

AWSコンソールからだと、対象のCodeBuildプロジェクトの「ビルドの詳細」タブを選択し、「環境」の「編集」ボタンから以下のところで変更できます。

 

もう少し詳細

今回ビルドしたのはLambdaのPython3.9になります。

LayerありのLambdaをビルドしたときにエラーとなりました。

ただAWS公式のランタイムとビルドイメージの対応表をみると、

Python3.9は「AmazonLinux2-x86_64-standard:4.0」だよって記載されていました。

■参照先(AWS公式サイト)

docs.aws.amazon.com

 

こんなところでエラーになる人もいないみたいで、全然ネットに情報がなくてハマってしまいました。

もうすぐ開発が始まるのですが、Python3.11にした方が良いような気もしました。

 

CodePipelineから別アカウントの CodeCommitとECRを利用する

CodePipelineから別アカウントの CodeCommitとECRの2つを利用する手順と躓いたところを書きます。

主には別アカウントにECRを配置するところで躓いたので、そこを中心に書きます。

下記の図は書いていませんが、検証環境アカウントで動作確認をしたECR内のイメージを本番環境アカウントで利用したいため、Dev環境にECRを置く構成としました。

 

以下、イメージ図です。

前提

・同一アカウント(検証環境)で上記の構成を構築済(CodeCommit、ECRは検証環境にある状態)

・buildspec.ymlでSpringbootのjarファイルをコンパイルして、ECRにイメージプッシュ

 ※他の言語でも本編に影響しないが念のため記載

 

Code CommitをDev環境に配置する(前半)

Dev環境:Code Commit

検証環境:Code Commit以外のサービス

 

以下のクラスメソッドさんの記事の手順で構築できます。

dev.classmethod.jp

Code Commitは他のサイトでもいろいろ紹介されていたのですが、上記サイトが一番分かりやすく、しかも手順もしっかり書かれていました。

 

ECRをDev環境に配置する(後半)

Dev環境(AWSアカウント 111111111111)

 :Code Commit、ECR(今回の手順はここ)

検証環境(AWSアカウント 222222222222)

 :上記以外のサービス

概要

 Dev環境

  1、ECRを作成し、リポジトリポリシーを設定(検証環境からアクセスを許可)

  2、CodeBuild用のIAMロールを作成

   (検証環境アカウントのIAMロールからAssumeRoleされる)

 検証環境

  3、CodeBuild用のIAMロールを作成

   (2のIAMロールをAssumeRoleする)

 Dev環境

  4、buildspec.ymlファイル修正(主にECRにログインするところを修正)

 

1~3はすんなりできるのですが、4のところで躓きました。

 

手順詳細

Dev環境

1、ECRを作成し、リポジトリポリシーを設定(検証環境からアクセスを許可)

 1-1、ECRを作成

   任意のリポジトリ名を設定し、「リポジトリ作成」ボタンをクリック

   ※他はデフォルトでOK(検証環境なので)

 

 1-2、ECRリポジトリポリシーを設定

  対象のECRを選択し、「アクション ⇒ 許可」をクリック

 

  「ポリシーJSONの編集」をクリック

 

 以下をポリシーJSONに入力する

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCrossPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:root"
      },
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:BatchGetImage",
        "ecr:CompleteLayerUpload",
        "ecr:GetDownloadUrlForLayer",
        "ecr:InitiateLayerUpload",
        "ecr:PutImage",
        "ecr:UploadLayerPart"
      ]
    }
  ]
}

「"AWS": "arn:aws:iam::222222222222:root"」は、以下のように手順3で作成する検証環境のCodeBuild用のIAMロールにした方が良いです。

「"AWS": "arn:aws:iam::222222222222:role/検証環境のCodeBuild用のIAMロール名"」

 

2、CodeBuild用のIAMロールを作成

 2-1、ポリシーを作成(ポリシー名:codebuild-policy-111111111111)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ECRAccessPolicy",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetRepositoryPolicy",
                "ecr:DescribeRepositories",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:BatchGetImage",
                "ecr:GetLifecyclePolicy",
                "ecr:GetLifecyclePolicyPreview",
                "ecr:ListTagsForResource",
                "ecr:DescribeImageScanFindings",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:PutImage"
            ],
            "Resource": "*"
        }
    ]
}

 2-2、IAMロールを作成(IAMロール名:codebuild-role-111111111111)

  2-1で作成したポリシーを付ける

 

 信用されたエンティティを入力する

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::222222222222:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}

※ロール作成時には自由に入力できないため、一旦仮の値を設定しロールを作成し、編集にて入力

 

 

検証環境

3、CodeBuild用のIAMロールを作成

 3-1、ポリシーを作成(ポリシー名:codebuild-policy-222222222222)

  手順2-2で作成したDev側のロールをResourceに指定する

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::111111111111:role/codebuild-role-111111111111"
        }
    ]
}

 3-2、IAMロールを作成(IAMロール名:codebuild-role-222222222222)

  3-1で作成したポリシーを付ける

   ※画像は省略

 

  信用されたエンティティを入力する

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "codebuild.amazonaws.com",
                "AWS": "arn:aws:iam::111111111111:root",
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

Dev環境

4、buildspec.ymlファイル修正

権限も設定したのでECRのURLだけ変更すればうまくプッシュできるのでは?を思ったのですが、ECRのログインができず修正する必要があります。

いろいろ方法あるのですが、codebuild内にAWSのプロファイルを作成しました。

赤字が修正した箇所になります

 

version: 0.2
phases:
  install:
    runtime-versions:
      python: 3.9
  pre_build:
    commands:
      - echo "[profile aaa111]" > .awscli-config
      - echo "role_arn = arn:aws:iam::111111111111:role/codebuild-role-111111111111" >> .awscli-config
      - echo "credential_source = EcsContainer" >> .awscli-config
      - export AWS_CONFIG_FILE=${CODEBUILD_SRC_DIR}/.awscli-config
      - $(aws --profile aaa111 ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
      - REPOSITORY_URI=111111111111.dkr.ecr.ap-northeast-1.amazonaws.com/cross-ecr
      - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)

  build:
    commands:
      - mvn clean
      - mvn install
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG

  post_build:
    commands:
      - mvn package
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - printf '{"Version":"1.0","ImageURI":"%s"}' $REPOSITORY_URI:$IMAGE_TAG > imageDetail.json

artifacts:
    files: imageDetail.json

 

以上で設定は完了です。

 

以下は気になったことや躓いたところです

「4、buildspec.ymlファイル修正」で気になったこと

①CodeBuildのどのフォルダで実行されているのか?

「/codebuild/output/src945596495/src」でした。

※「src945596495」は実行するごとに変わります。(たぶん)

②「.awscli-config」の中身はどうなっているのか?

[profile aaa111]
role_arn = arn:aws:iam::111111111111:role/codebuild-role-111111111111
credential_source = EcsContainer

上記の内容のファイルをCode Commit内に用意し、ビルド時にコピーするのもありかな?と思います。

「[profile aaa111]」のprofileを付けないとエラーになります。

③「export」の「=」の前後に空白を入れない

「=」の前後に半角スペースがあったためエラーとなり30分ぐらいあたふたしました。

「export AWS_CONFIG_FILE = ${CODEBUILD_SRC_DIR}/.awscli-config」

AWS関係なく初歩的なミスですね。。

 

【参考サイト】

他のAWSアカウントのECRリポジトリにPush/Pullする - Qiita

CodeBuildのビルド内でAssumeRole(クロスアカウントアクセス)する方法とハマった話 | DevelopersIO

 

飲食店の確定申告(白色)の手順

いろいろあり、今年(令和4年度)飲食店の確定申告(白色)をやりました。

本当は青色にしようとおもったのですが、まずは白色から。

来年の引継ぎのために書きます。

まずゴール(確定申告に必要な書類)を知って、作成方法とそれまでに準備すること書いていきます。

 

最終的に確定申告に必要な書類

  1. 確定申告書
  2. 収支内訳書(一般用・営業等)
  3. 社会保険料国民健康保険等)控除証明書
  4. 一般の生命保険料、介護医療保険料の支払額などの証明書

自分で作るのは1、2だけ。

3、4は年末ぐらいに郵送されてきます。

 

書類の作成方法

1(確定申告書)、2(収支内訳書)ともに国税庁のサイトから作成できます

https://www.keisan.nta.go.jp/kyoutu/ky/sm/top

収支内訳書の作成

まず、収支内訳書を作成します。

左から2番目の「決算書・収支内訳書(+所得税)」を選択していろいろ入力

収支内訳書

収支内訳書

確定申告書の作成

続いて、確定申告書を作成します。

所得税」を選択していろいろ入力

確定申告書

確定申告書

これを入力した後に所得税の振込ページが出てくるので、印刷してコンビニで所得税を支払います。

所得税の領収書は確定申告に提出する書類には含まれません。

 

以下、ちょっと気を付けるところです。

アは収支内訳書に入力した売上金額を入力し、①は収支内訳書で算出された所得金額を入力します。

 

書類の作成は終わったので、以下の好きな方法で確定申告します。

・税務署に書類を持っていく(簡単な確認はしてくれます)

・郵送する

e-Tax

 

私は不安だったので、税務署に書類を持っていき、確認してもらいました。

税務署にいろいろな経費の領収書など持ってきて、確定申告に必要な資料を1から作成している人もけっこういてビビりました。

 

収支内訳書を作成するまでにやっておくこと

収支内訳書の作成までに売上や経費を算出していれば、

確定申告の70%は終わっているといっても過言ではないです。

やることとしては以下の3つだけです。

1、経費対象のレシートと領収書を保管する

2、売り上げを記録する

  日々の売り上げをExcelなどに記録し、年間売り上げを算出する

3、経費を記録する

  これが一番面倒。。

  レシートや領収書などをExcelなどに記録し、経費を算出する

  以下のような感じに収支内訳書に入力する項目ごとに分けて入力しました

 

税務署で聞いたこと&知ったこと

国民健康保険料、国民年金保険料は控除の対象なのか?

 ⇒ 控除対象で、確定申告書に入力する。

  ※収支内訳書には入力しない(入力するところないですが。。)

  「国民健康保険の控除証明書」は無くても大丈夫で、正しい金額だけ入力

  「国民年金保険料の控除証明書」は必要

・ちょっと相談するだけでもこの行列に並ぶの?

 ⇒並ぶ。書類を作成する人、ちょっとだけ質問したい人、みんな順番待ちして並ぶ。

・LINEで予約しておけば、税務署であまり並ばずに確定申請ができる

 LINE予約を知らなかったので、なんだかんだで1時間ぐらいかかりました。

 2月下旬の平日9時ぐらいに行きました。(会社午前休して。。)

 国税庁のHPにのっていますね。

www.nta.go.jp

 

以下、スクショ。

税務署の確定申告LINE予約

以上になります。

来年は青色申告e-Taxできたら良いな。

分からないことがあれば、LINE予約して税務署に行こう。

「The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.」の対処方法

SQL Serverで以下のエラーが発生した場合の対処方法になります。

メッセージ 242、レベル 16、状態 3、行 1

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.

 

環境

SQL Server 2019(RDS)

 

対応

・接続ユーザーの規定言語を「Japanese - 日本語」とする

 

手順

1、SSMSを起動する

2、「セキュリティ ⇒ ログイン ⇒ 対象のユーザー」を選択し、右クリックし、「プロパティ」をクリックする

 

3、左ペインから「全般」を選択し、既定の言語を「Japanese - 日本語」として、「OK」ボタンを押下する


以上になります。

 

[参考]

stackoverflow.com

 

Windows Server 2019でFTPSを利用する手順

Windows Server 2019でFTPSを利用する手順になります。

いろんなサイトを参考にしたのですが、自分の環境では正しく動作しなかったので、備忘録として残します。

結果から言うとFTPの設定変更を反映させるには、

「自分で Microsoft FTP Service サービスを再起動する」

というのを知らなかったので、路頭に迷いました。

 

サービスの再起動をしなかったので、

WinSCP接続時にずっと以下のエラーで悩んでいました。

ディレクトリ '/' のリスト取得のエラー

Server cannot accept argument

ディレクトリの一覧を取得できません。

 

Windows Server 2019でFTPSを設定し、WinSCPで接続する手順を説明します。

 

前提

Windows Server 2019(AWSのEC2を利用)

IISは10.0

IISを利用して、FTPできる環境は設定済

Windows Server 2019のファイアウォールは無効

 ※無効にできない場合は必要なポートのみ穴あけする

 

以下、FTPの設定方法です。

blog.denet.co.jp

 

構築概要

1、SSL証明書を作成&設定

2、FTPS設定

3、WinSCPの設定(特別な設定は無いです)

4、まとめ

 

手順

1、SSL証明書を作成&設定

1-1、IIS マネージャーを起動し、左ペインからサーバーを選択し、サーバー証明書 をダブルクリックする。

 

1-2、「自己署名入り証明書の作成...」をクリックする。

 

1-3、フレンドリ名には任意の名前を入力し、「OK」ボタンを押下する。

 

SSL証明書が作成されます。

 

■補足

ここで作成すると有効期限が1年になります。

PowerShellから「New-SelfSignedCertificate」で自己署名証明書を作成すれば、有効期限を自由に設定できます。(有効期限10年とか)

詳しくは以下のサイトを参照

自己署名証明書を作成する方法 | 4thsight.xyz

 

1-4、サイトを選択し、「FTPSSL 設定」をダブルクリックする。

 

1-5、「1-3」の手順で作成したSSL証明書を選択し、「SSL接続が必要」を選択し、右側にある「適用」をクリックする。

■ 補足
SSLポリシーは、FTPも利用したい場合は「SSL接続を許可する」を選択する

セキュリティ強化のため、「SSL 接続に 128ビット暗号化を利用する」のチェックは入れておいた方が良さそう

 

2、FTPS設定

2-1、サーバーを選択し、「FTPファイアウォールのサポート」をダブルクリックする。

 

2-2、任意のポートを指定(今回は「5678」とする)「適用」をクリックする。

「5678」ポートを利用するため、データチャネルポートには「5678-5678」を入力

 

2-3、サービスを起動し、「Microsoft FTP Service」を選択し、再起動をクリックする。

ここで再起動しないと、手順2-2の設定が反映されないので、再起動は必須。

 

2-4、この環境はAWSのEC2を利用しているため、セキュリティグループに「5678」のポートを空ける

 

3、WinSCPの設定

特別な設定はないので、簡単な手順で。

3-1、「明示的なTLS/SSL暗号化」を選択し、接続情報を入力し、接続する。

 

デフォルトなので設定不要ですが、「パッシブモード」で接続します。

 

3-2、初回だけ警告ができるので、「はい」ボタンを押下する。

 

3-3、接続することができました。

 

手順としては以上になります。

 

4、まとめ

FTPの設定変更は「Microsoft FTP Service」 サービスを再起動して反映される

・FTPSはパッシブモードで接続する

 

個人的には22ポートを利用するSFTPの方が良いのかなと思っています。

Windows Server 2019でSFTPを利用する手順は以下になります。

rikues2012.hatenablog.com

 

 

参考にさせて頂いたサイト

FTP サーバーで FTPS を設定する (Windows Server) - FTP - ソーサリーフォース

FTP 7.5でPASV ポートを指定する - サーバ

SFTPでFSx for Windows File Server内のファイルを更新する

はじめに

Amazon FSx for Windows File Server(以下 FSx)をコンテンツサーバとして利用し、運用者がSFTPを使用し、FSxにファイルをアップデートできるようにします。

以下、要件です

・ローカル環境からWinSCPを使って、FSx内のファイルを更新したい

WinSCPはSFTPを利用してセキュアに接続したい

前提

・EC2は Windows Server 2019を利用

・FSx、ADは作成済

・EC2はドメインに参加済

・AD管理用のEC2を作成済(AD管理ツールのインストールが必要)

 

EC2のドメインの参加手順は以下の手順3~4を参照

IISからFSx for Windows File Server内のファイルを参照する

 

AD管理ツールのインストールは以下を参照

【AWS Managed Microsoft AD】AD管理ツールをインストールして管理者権限を持つユーザでログインする - サーバーワークスエンジニアブログ

 

構成図

※Direct Connectで接続し、構成をマルチAZにしても、同じ手順でできます

 

構築概要

1、EC2(AD管理):ADにSFTPで利用するユーザーを作成

2、EC2(SFTP接続用):OpenSSHインストール

3、EC2(SFTP接続用):シンボリックリンク作成

4、ローカルPC:WinSCPの設定をして、FSxのファイルを更新

 

手順

1、ADにSFTPで利用するユーザーを作成

 1-1、EC2(AD管理)にAD管理ユーザーにてRDPする

※本環境では「Admin@sftp.local」がAD管理ユーザです

 

 1-2、管理ツールの中から「Active Directoryユーザーとコンピューター」を起動し、左ペインにある「Users」(赤枠)を選択する

 

 1-3、右クリックして、「新規作成」-「ユーザー」を選択する

 

 1-4、以下を設定し、「次へ」ボタンを押下する

   ※本手順ではユーザー名を「sftptest」とする

 

 1-5、パスワードを設定し、「次へ」ボタンを押下する

   ※画像は省略

 1-6、「完了」ボタンを押下する

   ※画像は省略

 1-7、ユーザが追加されたことを確認する

 

2、OpenSSHインストール

 以下の手順を参照(サービスの自動起動も設定すること)

t-dilemma.info

 

3、シンボリックリンク作成

 3-1、EC2(SFTP接続用)にRDPでログインし、FSxに接続できることを確認

※もし無い場合はフォルダとファイルを作成

 3-2、EC2内にフォルダを作成

   ※ここでは「C:\ftptest」を作成

※新規で作成せず既存のフォルダでもOK

 

 3-3、シンボリックリンク作成(コマンドプロンプトを管理モードで起動)

   「C:\ftptest\DATA」を「\\xxxxx.sftp.local\share」のシンボリックリンクとする

mklink /d C:\ftptest\DATA \\xxxxx.sftp.local\share

 

 3-4、シンボリックリンクが作成されたことを確認

 

これであとはWinSCPから接続するだけです。

 

4、WinSCPの設定をして、FSxのファイルを更新

 特別な設定は不要なのですが、手順を記載します

 4-1、必要な情報を入力し、「ログイン」ボタンを押下する

 

 4-2、シンボリックリンクを作成したフォルダに移動し、更にFSx内のフォルダに移動

 

 4-3、PC内にある「bbb.txt」をFSxにアップロードする

 

これでFSxのファイルも参照できましたし、ファイルも更新することができました。