<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: MohamedAmr-DevOps</title>
    <description>The latest articles on DEV Community by MohamedAmr-DevOps (@mohamedamr).</description>
    <link>https://dev.to/mohamedamr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F854803%2F0b87680d-7a3d-4210-9aff-f9f1cc132443.jpg</url>
      <title>DEV Community: MohamedAmr-DevOps</title>
      <link>https://dev.to/mohamedamr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohamedamr"/>
    <language>en</language>
    <item>
      <title>Azure DevOps Flutter IOS CI Pipeline</title>
      <dc:creator>MohamedAmr-DevOps</dc:creator>
      <pubDate>Sat, 21 Dec 2024 02:27:52 +0000</pubDate>
      <link>https://dev.to/mohamedamr/azure-devops-flutter-ios-ci-pipeline-1kb</link>
      <guid>https://dev.to/mohamedamr/azure-devops-flutter-ios-ci-pipeline-1kb</guid>
      <description>&lt;p&gt;Since it took a long time and effort to get all of my issues solved in Azure DevOps to get my build pipeline works. I need to share what I faced and how I got it working at the end&lt;/p&gt;

&lt;h2&gt;
  
  
  Certificates and Profiles
&lt;/h2&gt;

&lt;h2&gt;
  
  
  CocoaPods
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Pipeline steps
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Issues and how I got it solved
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Module not found &lt;/li&gt;
&lt;li&gt;Certificate generated from xcode not working on pipeline &lt;/li&gt;
&lt;li&gt;Pod Doesn't support provisioning profile &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Certificates and Profiles&lt;/strong&gt;: &lt;br&gt;
In Android play store you have one certificate for all and its related to your application so in your configuration and build you just need to sign you application bundle file with one certificate in all of your cases. In Apple no you have too different types for each purpose and its not just certificate its certificate with profile. Which makes this more complicated than what is there in Android. So in development you have adhoc profile and certificate in app-store you have app-store and so on &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CocoaPods&lt;/strong&gt;: &lt;br&gt;
Cocoapods is the dependency modules which your project requires so you need to consider this as part of your build pipeline as I will mention later in the article &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Pipeline Steps: *&lt;/em&gt;&lt;br&gt;
Here I will mention the whole pipeline steps with all issues I faced during my build&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pool:
  name: Azure Pipelines
  demands: xcode

steps:
# getting version number and build number from pubsec.yaml file , please change it if you don't need this to work like this 
- bash: |
   echo "preparing build variables"
   echo "getting build version and build number from pubsec file"
   buildVersion=`grep version src/app/pubspec.yaml |  cut -d':' -f2 | cut -d'+' -f1 | sed 's/ //'`
   buildNumber=`grep version src/app/pubspec.yaml |  cut -d':' -f2 | cut -d'+' -f2 | sed 's/ //'`
   echo "version will be ===&amp;gt; $buildVersion"
   echo "build number will be ===&amp;gt; $buildNumber"
   echo "##vso[task.setvariable variable=buildVersion;]$buildVersion"
   echo "##vso[task.setvariable variable=buildNumber;]$buildNumber"

  displayName: 'prepare build variables '

- task: InstallAppleCertificate@2
  displayName: 'Install an Apple certificate'
  inputs:
    certSecureFile: '********'
    certPwd: '$(P12password)'
    setUpPartitionIdACLForPrivateKey: false

- task: InstallAppleProvisioningProfile@1
  displayName: 'Install an Apple provisioning profile'
  inputs:
    provProfileSecureFile: '******'

- task: Hey24sheep.flutter.flutter-install.FlutterInstall@0
  displayName: 'Flutter Install'

- task: Hey24sheep.flutter.flutter-build.FlutterBuild@0
  displayName: 'Flutter Build ios'
  inputs:
    target: ios
    projectDirectory: src/app
    iosCodesign: false

## This step is very important to consider .. because of pod doesn't support code sign and profile,
## I removed last 6 lines of Podfile which contains post_install section .. please check how many lines you have and remove them 
## After I removed it I added the below section 
- bash: |
   echo "podfile old =================================================================="
   cat Podfile 
   awk 'NR&amp;gt;c{print A[NR%c]} {A[NR%c]=$0}' c=6 Podfile &amp;gt; PodfileTemp
   echo "podfile new =================================================================="
   cat PodfileTemp
   mv PodfileTemp Podfile 
   echo " " &amp;gt;&amp;gt; Podfile
   echo "post_install do |installer| " &amp;gt;&amp;gt; Podfile
   echo "  installer.pods_project.targets.each do |target| " &amp;gt;&amp;gt; Podfile
   echo "    flutter_additional_ios_build_settings(target)" &amp;gt;&amp;gt; Podfile
   echo "    target.build_configurations.each do |config| " &amp;gt;&amp;gt; Podfile
   echo "      config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = \"\" " &amp;gt;&amp;gt; Podfile
   echo "      config.build_settings['CODE_SIGNING_REQUIRED'] = \"NO\" " &amp;gt;&amp;gt; Podfile
   echo "      config.build_settings['CODE_SIGNING_ALLOWED'] = \"NO\" " &amp;gt;&amp;gt; Podfile
   echo "    end " &amp;gt;&amp;gt; Podfile
   echo "  end " &amp;gt;&amp;gt; Podfile
   echo "end " &amp;gt;&amp;gt; Podfile

   sudo gem uninstall cocoapods -ax
   sudo gem install cocoapods

  workingDirectory: src/app/ios
  displayName: 'Modify Podfile'

# This is the trick again .. after you prepare your Podfile you will need to run cocoapod install again .. else the above step will not reflect 
- task: CocoaPods@0
  displayName: 'pod install'
  inputs:
    workingDirectory: src/app/ios
# MARKETING_VERSION and CURRENT_PROJECT_VERSION are variables defined in my code to represent version and build 
# please change it with yours 
- task: Xcode@5
  displayName: 'Xcode build'
  inputs:
    xcWorkspacePath: src/app/ios/Runner.xcworkspace
    scheme: Runner
    packageApp: true
    signingOption: manual
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
    args: 'MARKETING_VERSION="$(buildVersion)" CURRENT_PROJECT_VERSION="$(buildNumber)"'

- task: CopyFiles@2
  displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
  inputs:
    SourceFolder: '$(system.defaultworkingdirectory)'
    Contents: '**/*.ipa'
    TargetFolder: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: drop'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)'
  condition: succeededOrFailed()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;`&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hashicorp Boundary with Azure SQL Server</title>
      <dc:creator>MohamedAmr-DevOps</dc:creator>
      <pubDate>Fri, 29 Mar 2024 12:10:56 +0000</pubDate>
      <link>https://dev.to/mohamedamr/hashicorp-boundary-with-azure-sql-server-2l59</link>
      <guid>https://dev.to/mohamedamr/hashicorp-boundary-with-azure-sql-server-2l59</guid>
      <description>&lt;p&gt;In this post we're going to use Hashicorp Boundary to connect to azure SQL database&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;Its very simple. Client connect to hashicorp boundary cluster which we have in cloud then connection goes through one of your worker nodes and then at the end worker connect to your final target. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctujwhc4x8wqjgo8p44v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctujwhc4x8wqjgo8p44v.png" alt="Image description" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-Requisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hashicorp Boundary cloud cluster&lt;/li&gt;
&lt;li&gt;Azure Account &lt;/li&gt;
&lt;li&gt;Sql Server Management Studio installed on your desktop &lt;/li&gt;
&lt;li&gt;Hahsicorp boundary client &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create Azure SQL Server &lt;/li&gt;
&lt;li&gt;Create Azure VNET&lt;/li&gt;
&lt;li&gt;Create SQL Server private endpoint &lt;/li&gt;
&lt;li&gt;Create Hashicorp Boundary worker node&lt;/li&gt;
&lt;li&gt;Create Hashicorp Boundary target &lt;/li&gt;
&lt;li&gt;Test from Sql server management studio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create Azure SQL Server&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open azure portal &lt;/li&gt;
&lt;li&gt;Search for SQL Server &lt;/li&gt;
&lt;li&gt;Click on Create &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e2lr5qcaerzsdnib5ai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e2lr5qcaerzsdnib5ai.png" alt="Image description" width="800" height="484"&gt;&lt;/a&gt;&lt;br&gt;
 Use SQL Authentication and add username and password, This will be your SQL admin. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhn6yz761opyc2gaph0gh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhn6yz761opyc2gaph0gh.png" alt="Image description" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In Networking, Please don't use allow azure services to access this server &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1eitf769vmu4guonq9st.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1eitf769vmu4guonq9st.png" alt="Image description" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep rest of options as default and then review and create &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create Azure VNET&lt;/strong&gt;&lt;br&gt;
Now after SQL Server creation we need to create Azure virtual network, so as we mentioned worker node can communicate with this database through this network.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open Azure VNET&lt;/li&gt;
&lt;li&gt;Just add name of vnet and the only thing you need to be aware of is address space which we will leave by default to 10.0.0.0/16
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmvr5p37icqaawi3z221v.png" alt="Image description" width="800" height="384"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Create SQL Server private endpoint&lt;/strong&gt;&lt;br&gt;
Now we have created SQL Server and This is now still not accessible we need to confirm that public access is disabled and create private endpoint to be able to access this server on this private link. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open created database server &lt;/li&gt;
&lt;li&gt;Go to "Show Networking Settings"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltp0w5nf5ro6i9dh7l43.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fltp0w5nf5ro6i9dh7l43.png" alt="Image description" width="800" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confirm that public access is disabled &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyghve51j3w35k7e8vwbt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyghve51j3w35k7e8vwbt.png" alt="Image description" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to private Access and choose create private endpoint 
&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieirce6ll6wm9lfj73vf.png" alt="Image description" width="800" height="282"&gt;
&lt;/li&gt;
&lt;li&gt;Add details to basics &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz54oiwmf4tneom9ppl9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz54oiwmf4tneom9ppl9f.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpufontabw3j8580nix6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpufontabw3j8580nix6w.png" alt="Image description" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose vnet which we created recently &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foafra2rfwan36cqyvp83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foafra2rfwan36cqyvp83.png" alt="Image description" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is one of the most important steps is to integrate with private DNS Zone, Just leave it as default since we don't have created DNS Zone before. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnddxblia9u6tbbu5t8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnddxblia9u6tbbu5t8p.png" alt="Image description" width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Just review and create&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After getting this created you will have vnet , SQL Server and private endpoint linked to this Server, The next step is to create a server which can connect to SQL Server. To do this we will need to create it part of created vnet. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Hashicorp Boundary worker node&lt;/strong&gt;&lt;br&gt;
Now we need to create worker node which our cloud instance will communicate with in order to reach target database. In order to do this .. you just need to install boundary worker and start it but you will need also to have this worker node with public IP and whitelist its port to make it reachable by boundary cloud cluster. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to create vm , its better for testing purpose to make it with small size , The most important thing is to create it inside our recently created vnet. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flz3uzhsc4989ennppd7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flz3uzhsc4989ennppd7f.png" alt="Image description" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxkkqwaf90fw4u61ivig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdxkkqwaf90fw4u61ivig.png" alt="Image description" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09u0u4lktzgymocv6ij3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09u0u4lktzgymocv6ij3.png" alt="Image description" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyymlvhh490zrd79qwv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyymlvhh490zrd79qwv5.png" alt="Image description" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;After filling all details .. review and create &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now VM is created and we need to access it and confirm it can reach database without any issue, So we need to install SQL Server CLI in order to test with it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You need also to Allow port 9202 which will be worker service port which boundary cluster will connect to worker through it. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run the below code in order to confirm that you can connect to Created azure SQL database from this node.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## nc database instance to confirm its port is reachable 
nc -zv  boundary-test-database.database.windows.net 1433
## This one should work if it didn't work please check previous steps or comment on the post 
## Please follow this post in order to install your CLI tools. In this post we will install on ubuntu 
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo apt-get install mssql-tools18 unixodbc-dev -y 
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' &amp;gt;&amp;gt; ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' &amp;gt;&amp;gt; ~/.bashrc
source ~/.bashrc
sqlcmd -S boundary-test-database.database.windows.net  -d master -U boundary -P "&amp;lt;put your created password&amp;gt;" -Q "SELECT COUNT(*)  FROM INFORMATION_SCHEMA.TABLES "
## This should return an output from database if it didn't, Please check above steps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now if the above commands worked fine, You will need to install worker software &lt;/li&gt;
&lt;li&gt;Go to hashicorp boundary and choose open admin UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbj58xsxeogs8pzt6daso.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbj58xsxeogs8pzt6daso.png" alt="Image description" width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After providing login details, Go to workers Then click on new &lt;/li&gt;
&lt;li&gt;You need to add 

&lt;ul&gt;
&lt;li&gt;Public IP &lt;/li&gt;
&lt;li&gt;Config file path &lt;/li&gt;
&lt;li&gt;tags &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5gokxt8sbsrybzybs1jk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5gokxt8sbsrybzybs1jk.png" alt="Image description" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This will give you steps you need to do &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxvph8agwr5cx4byad2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxvph8agwr5cx4byad2k.png" alt="Image description" width="800" height="691"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Execute these steps on worker node&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekymyaclg9534o38aop6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekymyaclg9534o38aop6.png" alt="Image description" width="800" height="625"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In my case I got this error , but fixed it with sudo ./boundary instead of ./boundary
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error initializing worker: Failed to lock memory: cannot allocate memory

This usually means that the mlock syscall is not available.
Boundary uses mlock to prevent memory from being swapped to
disk. This requires root privileges as well as a machine
that supports mlock. Please enable mlock on your system or
disable Boundary from using it. To disable Boundary from using it,
set the `disable_mlock` configuration option in your configuration
file.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Boundary worker will start with a token and you will need to add it to New worker page in hashicorp boundary cloud cluster &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxy2yzkyrr8ujs5zsvyvf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxy2yzkyrr8ujs5zsvyvf.png" alt="Image description" width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg7wowdvlkdc8y65iy1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffg7wowdvlkdc8y65iy1a.png" alt="Image description" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You should see this &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jk48ht3pbfegs2xqw7r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jk48ht3pbfegs2xqw7r.png" alt="Image description" width="800" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will be able to see new worker part of your current workers &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnypakr5cnua71wzfrupn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnypakr5cnua71wzfrupn.png" alt="Image description" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create Hashicorp Boundary target&lt;/strong&gt;&lt;br&gt;
This is the last step is to create your database target &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to targets , click on "New Target"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fpsb0rtz1s47zsxpiex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fpsb0rtz1s47zsxpiex.png" alt="Image description" width="800" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7b72g0tulxsu62fi5105.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7b72g0tulxsu62fi5105.png" alt="Image description" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose name for the target&lt;/li&gt;
&lt;li&gt;Target Address ==&amp;gt; "boundary-test-database.database.windows.net"&lt;/li&gt;
&lt;li&gt;Default port and client port ==&amp;gt; 1433 &lt;/li&gt;
&lt;li&gt;ingress filter ==&amp;gt; "boundary" in "/tags/name" &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft21x4mj4xlqw0jq0kq4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft21x4mj4xlqw0jq0kq4j.png" alt="Image description" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have created target the last step is to test target &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open boundary client and authenticate &lt;/li&gt;
&lt;li&gt;You should see now the target which you created &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqptij99mxjtvy8x8fk92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqptij99mxjtvy8x8fk92.png" alt="Image description" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add to your hosts file this line 
127.0.0.1 boundary-test-database.database.windows.net&lt;/li&gt;
&lt;li&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyr0iz90tlxlymuj8iw76.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyr0iz90tlxlymuj8iw76.png" alt="Image description" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>boundary</category>
      <category>azure</category>
      <category>sqlserver</category>
      <category>hashicorp</category>
    </item>
  </channel>
</rss>
